Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(340)

Side by Side Diff: chrome/browser/ui/views/extensions/extension_install_dialog_view.cc

Issue 363523002: Fix extension scrollbar regression bug, and add a regression test to (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Small fixes to clean up code Created 6 years, 5 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "chrome/browser/ui/views/extensions/extension_install_dialog_view.h"
6
5 #include <vector> 7 #include <vector>
6 8
7 #include "base/basictypes.h" 9 #include "base/basictypes.h"
8 #include "base/command_line.h" 10 #include "base/command_line.h"
9 #include "base/compiler_specific.h" 11 #include "base/compiler_specific.h"
10 #include "base/i18n/rtl.h" 12 #include "base/i18n/rtl.h"
11 #include "base/metrics/histogram.h" 13 #include "base/metrics/histogram.h"
12 #include "base/strings/string_util.h" 14 #include "base/strings/string_util.h"
13 #include "base/strings/utf_string_conversions.h" 15 #include "base/strings/utf_string_conversions.h"
14 #include "chrome/browser/extensions/bundle_installer.h" 16 #include "chrome/browser/extensions/bundle_installer.h"
(...skipping 27 matching lines...) Expand all
42 #include "ui/views/controls/link.h" 44 #include "ui/views/controls/link.h"
43 #include "ui/views/controls/link_listener.h" 45 #include "ui/views/controls/link_listener.h"
44 #include "ui/views/controls/scroll_view.h" 46 #include "ui/views/controls/scroll_view.h"
45 #include "ui/views/controls/separator.h" 47 #include "ui/views/controls/separator.h"
46 #include "ui/views/layout/box_layout.h" 48 #include "ui/views/layout/box_layout.h"
47 #include "ui/views/layout/grid_layout.h" 49 #include "ui/views/layout/grid_layout.h"
48 #include "ui/views/layout/layout_constants.h" 50 #include "ui/views/layout/layout_constants.h"
49 #include "ui/views/view.h" 51 #include "ui/views/view.h"
50 #include "ui/views/widget/widget.h" 52 #include "ui/views/widget/widget.h"
51 #include "ui/views/window/dialog_client_view.h" 53 #include "ui/views/window/dialog_client_view.h"
52 #include "ui/views/window/dialog_delegate.h" 54 #include "ui/views/window/dialog_delegate.h"
Finnur 2014/07/16 10:36:11 Looks like lots of includes were copied from .cc t
Chris Thompson 2014/07/16 20:13:28 Shuffled around includes and forward declarations.
53 55
54 using content::OpenURLParams; 56 using content::OpenURLParams;
55 using content::Referrer; 57 using content::Referrer;
56 using extensions::BundleInstaller; 58 using extensions::BundleInstaller;
57 59
58 namespace { 60 // Width of bullet column in BulletedView.
Finnur 2014/07/16 10:36:12 Why remove this?
Chris Thompson 2014/07/16 20:13:28 Hmm, good point. Added back in for the "static" de
Finnur 2014/07/16 10:36:11 nit: s/of/of the/
Chris Thompson 2014/07/16 20:13:28 Done.
61 const int kBulletWidth = 20;
59 62
60 // Size of extension icon in top left of dialog. 63 // Size of extension icon in top left of dialog.
61 const int kIconSize = 64; 64 const int kIconSize = 64;
62 65
63 // We offset the icon a little bit from the right edge of the dialog, to make it 66 // We offset the icon a little bit from the right edge of the dialog, to make it
64 // align with the button below it. 67 // align with the button below it.
65 const int kIconOffset = 16; 68 const int kIconOffset = 16;
66 69
67 // The dialog will resize based on its content, but this sets a maximum height 70 // The dialog will resize based on its content, but this sets a maximum height
68 // before overflowing a scrollbar. 71 // before overflowing a scrollbar.
(...skipping 22 matching lines...) Expand all
91 // experiment. This is used to group the actions in UMA histograms named 94 // experiment. This is used to group the actions in UMA histograms named
92 // Extensions.InstallPromptExperiment.ShowDetails and 95 // Extensions.InstallPromptExperiment.ShowDetails and
93 // Extensions.InstallPromptExperiment.ShowPermissions. 96 // Extensions.InstallPromptExperiment.ShowPermissions.
94 enum ExperimentLinkAction { 97 enum ExperimentLinkAction {
95 LINK_SHOWN = 0, 98 LINK_SHOWN = 0,
96 LINK_NOT_SHOWN, 99 LINK_NOT_SHOWN,
97 LINK_CLICKED, 100 LINK_CLICKED,
98 NUM_LINK_ACTIONS 101 NUM_LINK_ACTIONS
99 }; 102 };
100 103
101 typedef std::vector<base::string16> PermissionDetails;
102 class ExpandableContainerView;
103
104 void AddResourceIcon(const gfx::ImageSkia* skia_image, void* data) { 104 void AddResourceIcon(const gfx::ImageSkia* skia_image, void* data) {
105 views::View* parent = static_cast<views::View*>(data); 105 views::View* parent = static_cast<views::View*>(data);
106 views::ImageView* image_view = new views::ImageView(); 106 views::ImageView* image_view = new views::ImageView();
107 image_view->SetImage(*skia_image); 107 image_view->SetImage(*skia_image);
108 parent->AddChildView(image_view); 108 parent->AddChildView(image_view);
109 } 109 }
110 110
111 // Creates a string for displaying |message| to the user. If it has to look 111 // Creates a string for displaying |message| to the user. If it has to look
112 // like a entry in a bullet point list, one is added. 112 // like a entry in a bullet point list, one is added.
113 base::string16 PrepareForDisplay(const base::string16& message, 113 base::string16 PrepareForDisplay(const base::string16& message,
114 bool bullet_point) { 114 bool bullet_point) {
115 return bullet_point ? l10n_util::GetStringFUTF16( 115 return bullet_point ? l10n_util::GetStringFUTF16(
116 IDS_EXTENSION_PERMISSION_LINE, 116 IDS_EXTENSION_PERMISSION_LINE,
117 message) : message; 117 message) : message;
118 } 118 }
119 119
120 // A custom scrollable view implementation for the dialog.
121 class CustomScrollableView : public views::View {
122 public:
123 CustomScrollableView();
124 virtual ~CustomScrollableView();
125
126 private:
127 virtual void Layout() OVERRIDE;
128
129 DISALLOW_COPY_AND_ASSIGN(CustomScrollableView);
130 };
131
132 // Implements the extension installation dialog for TOOLKIT_VIEWS.
133 class ExtensionInstallDialogView : public views::DialogDelegateView,
134 public views::LinkListener,
135 public views::ButtonListener {
136 public:
137 ExtensionInstallDialogView(
138 content::PageNavigator* navigator,
139 ExtensionInstallPrompt::Delegate* delegate,
140 scoped_refptr<ExtensionInstallPrompt::Prompt> prompt);
141 virtual ~ExtensionInstallDialogView();
142
143 // Called when one of the child elements has expanded/collapsed.
144 void ContentsChanged();
145
146 private:
147 // views::DialogDelegateView:
148 virtual int GetDialogButtons() const OVERRIDE;
149 virtual base::string16 GetDialogButtonLabel(
150 ui::DialogButton button) const OVERRIDE;
151 virtual int GetDefaultDialogButton() const OVERRIDE;
152 virtual bool Cancel() OVERRIDE;
153 virtual bool Accept() OVERRIDE;
154 virtual ui::ModalType GetModalType() const OVERRIDE;
155 virtual base::string16 GetWindowTitle() const OVERRIDE;
156 virtual void Layout() OVERRIDE;
157 virtual gfx::Size GetPreferredSize() const OVERRIDE;
158 virtual void ViewHierarchyChanged(
159 const ViewHierarchyChangedDetails& details) OVERRIDE;
160
161 // views::LinkListener:
162 virtual void LinkClicked(views::Link* source, int event_flags) OVERRIDE;
163
164 // views::ButtonListener:
165 virtual void ButtonPressed(views::Button* sender,
166 const ui::Event& event) OVERRIDE;
167
168 // Experimental: Toggles inline permission explanations with an animation.
169 void ToggleInlineExplanations();
170
171 // Creates a layout consisting of dialog header, extension name and icon.
172 views::GridLayout* CreateLayout(
173 views::View* parent,
174 int left_column_width,
175 int column_set_id,
176 bool single_detail_row) const;
177
178 bool is_inline_install() const {
179 return prompt_->type() == ExtensionInstallPrompt::INLINE_INSTALL_PROMPT;
180 }
181
182 bool is_bundle_install() const {
183 return prompt_->type() == ExtensionInstallPrompt::BUNDLE_INSTALL_PROMPT;
184 }
185
186 bool is_external_install() const {
187 return prompt_->type() == ExtensionInstallPrompt::EXTERNAL_INSTALL_PROMPT;
188 }
189
190 // Updates the histogram that holds installation accepted/aborted data.
191 void UpdateInstallResultHistogram(bool accepted) const;
192
193 // Updates the histogram that holds data about whether "Show details" or
194 // "Show permissions" links were shown and/or clicked.
195 void UpdateLinkActionHistogram(int action_type) const;
196
197 content::PageNavigator* navigator_;
198 ExtensionInstallPrompt::Delegate* delegate_;
199 scoped_refptr<ExtensionInstallPrompt::Prompt> prompt_;
200
201 // The scroll view containing all the details for the dialog (including all
202 // collapsible/expandable sections).
203 views::ScrollView* scroll_view_;
204
205 // The container view for the scroll view.
206 CustomScrollableView* scrollable_;
207
208 // The container for the simpler view with only the dialog header and the
209 // extension icon. Used for the experiment where the permissions are
210 // initially hidden when the dialog shows.
211 CustomScrollableView* scrollable_header_only_;
212
213 // The preferred size of the dialog.
214 gfx::Size dialog_size_;
215
216 // Experimental: "Show details" link to expand inline explanations and reveal
217 // permision dialog.
218 views::Link* show_details_link_;
219
220 // Experimental: Label for showing information about the checkboxes.
221 views::Label* checkbox_info_label_;
222
223 // Experimental: Contains pointers to inline explanation views.
224 typedef std::vector<ExpandableContainerView*> InlineExplanations;
225 InlineExplanations inline_explanations_;
226
227 // Experimental: Number of unchecked checkboxes in the permission list.
228 // If this becomes zero, the accept button is enabled, otherwise disabled.
229 int unchecked_boxes_;
230
231 DISALLOW_COPY_AND_ASSIGN(ExtensionInstallDialogView);
232 };
233
234 // A simple view that prepends a view with a bullet with the help of a grid
235 // layout.
236 class BulletedView : public views::View {
237 public:
238 explicit BulletedView(views::View* view);
239 private:
240 DISALLOW_COPY_AND_ASSIGN(BulletedView);
241 };
242
243 BulletedView::BulletedView(views::View* view) { 120 BulletedView::BulletedView(views::View* view) {
244 views::GridLayout* layout = new views::GridLayout(this); 121 views::GridLayout* layout = new views::GridLayout(this);
245 SetLayoutManager(layout); 122 SetLayoutManager(layout);
246 views::ColumnSet* column_set = layout->AddColumnSet(0); 123 views::ColumnSet* column_set = layout->AddColumnSet(0);
124 column_set->AddColumn(views::GridLayout::CENTER,
125 views::GridLayout::LEADING,
126 0,
127 views::GridLayout::FIXED,
128 kBulletWidth,
129 0);
247 column_set->AddColumn(views::GridLayout::LEADING, 130 column_set->AddColumn(views::GridLayout::LEADING,
248 views::GridLayout::LEADING, 131 views::GridLayout::LEADING,
249 0, 132 0,
250 views::GridLayout::USE_PREF, 133 views::GridLayout::USE_PREF,
251 0, // no fixed width 134 0, // no fixed width
Finnur 2014/07/16 10:36:11 Nit: Not your problem, but can you captitalize the
Chris Thompson 2014/07/16 20:13:28 Done.
252 0); 135 0);
253 column_set->AddColumn(views::GridLayout::LEADING,
254 views::GridLayout::LEADING,
255 0,
256 views::GridLayout::USE_PREF,
257 0, // no fixed width
258 0);
259 layout->StartRow(0, 0); 136 layout->StartRow(0, 0);
260 layout->AddView(new views::Label(PrepareForDisplay(base::string16(), true))); 137 layout->AddView(new views::Label(PrepareForDisplay(base::string16(), true)));
261 layout->AddView(view); 138 layout->AddView(view);
262 } 139 }
263 140
264 // A simple view that prepends a view with a checkbox with the help of a grid
265 // layout. Used for the permission experiment.
266 // TODO(meacer): Remove once the experiment is completed.
267 class CheckboxedView : public views::View {
268 public:
269 CheckboxedView(views::View* view, views::ButtonListener* listener);
270 private:
271 DISALLOW_COPY_AND_ASSIGN(CheckboxedView);
272 };
273
274 CheckboxedView::CheckboxedView(views::View* view, 141 CheckboxedView::CheckboxedView(views::View* view,
275 views::ButtonListener* listener) { 142 views::ButtonListener* listener) {
276 views::GridLayout* layout = new views::GridLayout(this); 143 views::GridLayout* layout = new views::GridLayout(this);
277 SetLayoutManager(layout); 144 SetLayoutManager(layout);
278 views::ColumnSet* column_set = layout->AddColumnSet(0); 145 views::ColumnSet* column_set = layout->AddColumnSet(0);
279 column_set->AddColumn(views::GridLayout::LEADING, 146 column_set->AddColumn(views::GridLayout::LEADING,
280 views::GridLayout::LEADING, 147 views::GridLayout::LEADING,
281 0, 148 0,
282 views::GridLayout::USE_PREF, 149 views::GridLayout::USE_PREF,
283 0, // no fixed width 150 0, // no fixed width
Finnur 2014/07/16 10:36:11 Same here.
Chris Thompson 2014/07/16 20:13:28 Done.
284 0); 151 0);
285 column_set->AddColumn(views::GridLayout::LEADING, 152 column_set->AddColumn(views::GridLayout::LEADING,
286 views::GridLayout::LEADING, 153 views::GridLayout::LEADING,
287 0, 154 0,
288 views::GridLayout::USE_PREF, 155 views::GridLayout::USE_PREF,
289 0, // no fixed width 156 0, // no fixed width
290 0); 157 0);
291 layout->StartRow(0, 0); 158 layout->StartRow(0, 0);
292 views::Checkbox* checkbox = new views::Checkbox(base::string16()); 159 views::Checkbox* checkbox = new views::Checkbox(base::string16());
293 checkbox->set_listener(listener); 160 checkbox->set_listener(listener);
294 // Alignment needs to be explicitly set again here, otherwise the views are 161 // Alignment needs to be explicitly set again here, otherwise the views are
295 // not vertically centered. 162 // not vertically centered.
296 layout->AddView(checkbox, 1, 1, 163 layout->AddView(checkbox, 1, 1,
297 views::GridLayout::LEADING, views::GridLayout::CENTER); 164 views::GridLayout::LEADING, views::GridLayout::CENTER);
298 layout->AddView(view, 1, 1, 165 layout->AddView(view, 1, 1,
299 views::GridLayout::LEADING, views::GridLayout::CENTER); 166 views::GridLayout::LEADING, views::GridLayout::CENTER);
300 } 167 }
301 168
302 // A view to display text with an expandable details section.
303 class ExpandableContainerView : public views::View,
304 public views::ButtonListener,
305 public views::LinkListener,
306 public gfx::AnimationDelegate {
307 public:
308 ExpandableContainerView(ExtensionInstallDialogView* owner,
309 const base::string16& description,
310 const PermissionDetails& details,
311 int horizontal_space,
312 bool parent_bulleted,
313 bool show_expand_link,
314 bool lighter_color_details);
315 virtual ~ExpandableContainerView();
316
317 // views::View:
318 virtual void ChildPreferredSizeChanged(views::View* child) OVERRIDE;
319
320 // views::ButtonListener:
321 virtual void ButtonPressed(views::Button* sender,
322 const ui::Event& event) OVERRIDE;
323
324 // views::LinkListener:
325 virtual void LinkClicked(views::Link* source, int event_flags) OVERRIDE;
326
327 // gfx::AnimationDelegate:
328 virtual void AnimationProgressed(const gfx::Animation* animation) OVERRIDE;
329 virtual void AnimationEnded(const gfx::Animation* animation) OVERRIDE;
330
331 // Expand/Collapse the detail section for this ExpandableContainerView.
332 void ToggleDetailLevel();
333
334 // Expand the detail section without any animation.
335 // TODO(meacer): Remove once the experiment is completed.
336 void ExpandWithoutAnimation();
337
338 private:
339 // A view which displays all the details of an IssueAdviceInfoEntry.
340 class DetailsView : public views::View {
341 public:
342 explicit DetailsView(int horizontal_space, bool parent_bulleted,
343 bool lighter_color);
344 virtual ~DetailsView() {}
345
346 // views::View:
347 virtual gfx::Size GetPreferredSize() const OVERRIDE;
348
349 void AddDetail(const base::string16& detail);
350
351 // Animates this to be a height proportional to |state|.
352 void AnimateToState(double state);
353
354 private:
355 views::GridLayout* layout_;
356 double state_;
357
358 // Whether the detail text should be shown with a lighter color.
359 bool lighter_color_;
360
361 DISALLOW_COPY_AND_ASSIGN(DetailsView);
362 };
363
364 // The dialog that owns |this|. It's also an ancestor in the View hierarchy.
365 ExtensionInstallDialogView* owner_;
366
367 // A view for showing |issue_advice.details|.
368 DetailsView* details_view_;
369
370 // The 'more details' link shown under the heading (changes to 'hide details'
371 // when the details section is expanded).
372 views::Link* more_details_;
373
374 gfx::SlideAnimation slide_animation_;
375
376 // The up/down arrow next to the 'more detail' link (points up/down depending
377 // on whether the details section is expanded).
378 views::ImageButton* arrow_toggle_;
379
380 // Whether the details section is expanded.
381 bool expanded_;
382
383 DISALLOW_COPY_AND_ASSIGN(ExpandableContainerView);
384 };
385
386 void ShowExtensionInstallDialogImpl( 169 void ShowExtensionInstallDialogImpl(
387 const ExtensionInstallPrompt::ShowParams& show_params, 170 const ExtensionInstallPrompt::ShowParams& show_params,
388 ExtensionInstallPrompt::Delegate* delegate, 171 ExtensionInstallPrompt::Delegate* delegate,
389 scoped_refptr<ExtensionInstallPrompt::Prompt> prompt) { 172 scoped_refptr<ExtensionInstallPrompt::Prompt> prompt) {
390 DCHECK_CURRENTLY_ON(content::BrowserThread::UI); 173 DCHECK_CURRENTLY_ON(content::BrowserThread::UI);
391 CreateBrowserModalDialogViews( 174 CreateBrowserModalDialogViews(
392 new ExtensionInstallDialogView(show_params.navigator, delegate, prompt), 175 new ExtensionInstallDialogView(show_params.navigator, delegate, prompt),
393 show_params.parent_window)->Show(); 176 show_params.parent_window)->Show();
394 } 177 }
395 178
396 } // namespace
Finnur 2014/07/16 10:36:12 Shouldn't this be moved to line 120 (of the file o
Chris Thompson 2014/07/16 20:13:28 Done.
397
398 CustomScrollableView::CustomScrollableView() {} 179 CustomScrollableView::CustomScrollableView() {}
399 CustomScrollableView::~CustomScrollableView() {} 180 CustomScrollableView::~CustomScrollableView() {}
400 181
401 void CustomScrollableView::Layout() { 182 void CustomScrollableView::Layout() {
402 SetBounds(x(), y(), width(), GetHeightForWidth(width())); 183 SetBounds(x(), y(), width(), GetHeightForWidth(width()));
403 views::View::Layout(); 184 views::View::Layout();
404 } 185 }
405 186
406 ExtensionInstallDialogView::ExtensionInstallDialogView( 187 ExtensionInstallDialogView::ExtensionInstallDialogView(
407 content::PageNavigator* navigator, 188 content::PageNavigator* navigator,
(...skipping 221 matching lines...) Expand 10 before | Expand all | Expand 10 after
629 permission_label->SetEnabledColor(kTextHighlight); 410 permission_label->SetEnabledColor(kTextHighlight);
630 } else if (prompt->experiment()->ShouldHighlightBackground( 411 } else if (prompt->experiment()->ShouldHighlightBackground(
631 prompt->GetPermission(i))) { 412 prompt->GetPermission(i))) {
632 permission_label->SetLineHeight(18); 413 permission_label->SetLineHeight(18);
633 permission_label->set_background( 414 permission_label->set_background(
634 views::Background::CreateSolidBackground(kBackgroundHighlight)); 415 views::Background::CreateSolidBackground(kBackgroundHighlight));
635 } 416 }
636 417
637 permission_label->SetMultiLine(true); 418 permission_label->SetMultiLine(true);
638 permission_label->SetHorizontalAlignment(gfx::ALIGN_LEFT); 419 permission_label->SetHorizontalAlignment(gfx::ALIGN_LEFT);
639 permission_label->SizeToFit(left_column_width);
640 420
641 if (prompt->experiment()->show_checkboxes()) { 421 if (prompt->experiment()->show_checkboxes()) {
422 permission_label->SizeToFit(left_column_width);
642 layout->AddView(new CheckboxedView(permission_label, this)); 423 layout->AddView(new CheckboxedView(permission_label, this));
643 ++unchecked_boxes_; 424 ++unchecked_boxes_;
644 } else { 425 } else {
426 permission_label->SizeToFit(left_column_width - kBulletWidth);
645 layout->AddView(new BulletedView(permission_label)); 427 layout->AddView(new BulletedView(permission_label));
646 } 428 }
429
647 // If we have more details to provide, show them in collapsed form. 430 // If we have more details to provide, show them in collapsed form.
648 if (!prompt->GetPermissionsDetails(i).empty()) { 431 if (!prompt->GetPermissionsDetails(i).empty()) {
649 layout->StartRow(0, column_set_id); 432 layout->StartRow(0, column_set_id);
650 PermissionDetails details; 433 PermissionDetails details;
651 details.push_back( 434 details.push_back(
652 PrepareForDisplay(prompt->GetPermissionsDetails(i), false)); 435 PrepareForDisplay(prompt->GetPermissionsDetails(i), false));
653 ExpandableContainerView* details_container = 436 ExpandableContainerView* details_container =
654 new ExpandableContainerView( 437 new ExpandableContainerView(
655 this, base::string16(), details, left_column_width, 438 this, base::string16(), details, left_column_width,
656 true, true, false); 439 true, true, false);
(...skipping 400 matching lines...) Expand 10 before | Expand all | Expand 10 after
1057 NUM_LINK_ACTIONS); 840 NUM_LINK_ACTIONS);
1058 } else { 841 } else {
1059 // The clickable link in the UI is "Show Details". 842 // The clickable link in the UI is "Show Details".
1060 UMA_HISTOGRAM_ENUMERATION( 843 UMA_HISTOGRAM_ENUMERATION(
1061 "Extensions.InstallPromptExperiment.ShowDetails", 844 "Extensions.InstallPromptExperiment.ShowDetails",
1062 action_type, 845 action_type,
1063 NUM_LINK_ACTIONS); 846 NUM_LINK_ACTIONS);
1064 } 847 }
1065 } 848 }
1066 849
1067 // static
1068 ExtensionInstallPrompt::ShowDialogCallback
1069 ExtensionInstallPrompt::GetDefaultShowDialogCallback() {
1070 return base::Bind(&ShowExtensionInstallDialogImpl);
1071 }
1072
1073 // ExpandableContainerView::DetailsView ---------------------------------------- 850 // ExpandableContainerView::DetailsView ----------------------------------------
1074 851
1075 ExpandableContainerView::DetailsView::DetailsView(int horizontal_space, 852 ExpandableContainerView::DetailsView::DetailsView(int horizontal_space,
1076 bool parent_bulleted, 853 bool parent_bulleted,
1077 bool lighter_color) 854 bool lighter_color)
1078 : layout_(new views::GridLayout(this)), 855 : layout_(new views::GridLayout(this)),
1079 state_(0), 856 state_(0),
1080 lighter_color_(lighter_color) { 857 lighter_color_(lighter_color) {
1081 SetLayoutManager(layout_); 858 SetLayoutManager(layout_);
1082 views::ColumnSet* column_set = layout_->AddColumnSet(0); 859 views::ColumnSet* column_set = layout_->AddColumnSet(0);
(...skipping 193 matching lines...) Expand 10 before | Expand all | Expand 10 after
1276 if (slide_animation_.IsShowing()) 1053 if (slide_animation_.IsShowing())
1277 slide_animation_.Hide(); 1054 slide_animation_.Hide();
1278 else 1055 else
1279 slide_animation_.Show(); 1056 slide_animation_.Show();
1280 } 1057 }
1281 1058
1282 void ExpandableContainerView::ExpandWithoutAnimation() { 1059 void ExpandableContainerView::ExpandWithoutAnimation() {
1283 expanded_ = true; 1060 expanded_ = true;
1284 details_view_->AnimateToState(1.0); 1061 details_view_->AnimateToState(1.0);
1285 } 1062 }
1063
1064 // static
1065 ExtensionInstallPrompt::ShowDialogCallback
1066 ExtensionInstallPrompt::GetDefaultShowDialogCallback() {
1067 return base::Bind(&ShowExtensionInstallDialogImpl);
1068 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698