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

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

Issue 7529011: Add a flag that lets the webstore show a different UI on app install. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: removed files added in separate CL (r95432) Created 9 years, 4 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 | Annotate | Revision Log
OLDNEW
1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2011 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_installed_bubble.h" 5 #include "chrome/browser/ui/views/extensions/extension_installed_bubble.h"
6 6
7 #include <algorithm> 7 #include <algorithm>
8 8
9 #include "base/i18n/rtl.h" 9 #include "base/i18n/rtl.h"
10 #include "base/message_loop.h" 10 #include "base/message_loop.h"
11 #include "base/utf_string_conversions.h" 11 #include "base/utf_string_conversions.h"
12 #include "chrome/browser/extensions/extension_install_ui.h"
12 #include "chrome/browser/profiles/profile.h" 13 #include "chrome/browser/profiles/profile.h"
13 #include "chrome/browser/ui/browser.h" 14 #include "chrome/browser/ui/browser.h"
14 #include "chrome/browser/ui/browser_window.h" 15 #include "chrome/browser/ui/browser_window.h"
15 #include "chrome/browser/ui/views/browser_actions_container.h" 16 #include "chrome/browser/ui/views/browser_actions_container.h"
16 #include "chrome/browser/ui/views/frame/browser_view.h" 17 #include "chrome/browser/ui/views/frame/browser_view.h"
17 #include "chrome/browser/ui/views/location_bar/location_bar_view.h" 18 #include "chrome/browser/ui/views/location_bar/location_bar_view.h"
19 #include "chrome/browser/ui/views/tabs/tab_strip.h"
18 #include "chrome/browser/ui/views/toolbar_view.h" 20 #include "chrome/browser/ui/views/toolbar_view.h"
19 #include "chrome/common/chrome_notification_types.h" 21 #include "chrome/common/chrome_notification_types.h"
20 #include "chrome/common/extensions/extension.h" 22 #include "chrome/common/extensions/extension.h"
21 #include "chrome/common/extensions/extension_action.h" 23 #include "chrome/common/extensions/extension_action.h"
22 #include "content/common/notification_details.h" 24 #include "content/common/notification_details.h"
23 #include "content/common/notification_source.h" 25 #include "content/common/notification_source.h"
24 #include "grit/generated_resources.h" 26 #include "grit/generated_resources.h"
25 #include "grit/theme_resources_standard.h" 27 #include "grit/theme_resources_standard.h"
26 #include "ui/base/l10n/l10n_util.h" 28 #include "ui/base/l10n/l10n_util.h"
27 #include "ui/base/resource/resource_bundle.h" 29 #include "ui/base/resource/resource_bundle.h"
28 #include "views/controls/button/image_button.h" 30 #include "views/controls/button/image_button.h"
29 #include "views/controls/image_view.h" 31 #include "views/controls/image_view.h"
30 #include "views/controls/label.h" 32 #include "views/controls/label.h"
33 #include "views/controls/link.h"
34 #include "views/controls/link_listener.h"
31 #include "views/layout/layout_constants.h" 35 #include "views/layout/layout_constants.h"
32 #include "views/view.h" 36 #include "views/view.h"
33 37
34 namespace { 38 namespace {
35 39
36 const int kIconSize = 43; 40 const int kIconSize = 43;
37 41
38 const int kRightColumnWidth = 285; 42 const int kRightColumnWidth = 285;
39 43
40 // The Bubble uses a BubbleBorder which adds about 6 pixels of whitespace 44 // The Bubble uses a BubbleBorder which adds about 6 pixels of whitespace
(...skipping 30 matching lines...) Expand all
71 Profile* profile) { 75 Profile* profile) {
72 ExtensionInstalledBubble::Show(extension, browser, icon); 76 ExtensionInstalledBubble::Show(extension, browser, icon);
73 } 77 }
74 78
75 } // namespace browser 79 } // namespace browser
76 80
77 // InstalledBubbleContent is the content view which is placed in the 81 // InstalledBubbleContent is the content view which is placed in the
78 // ExtensionInstalledBubble. It displays the install icon and explanatory 82 // ExtensionInstalledBubble. It displays the install icon and explanatory
79 // text about the installed extension. 83 // text about the installed extension.
80 class InstalledBubbleContent : public views::View, 84 class InstalledBubbleContent : public views::View,
81 public views::ButtonListener { 85 public views::ButtonListener,
86 public views::LinkListener {
82 public: 87 public:
83 InstalledBubbleContent(const Extension* extension, 88 InstalledBubbleContent(Browser* browser,
89 const Extension* extension,
84 ExtensionInstalledBubble::BubbleType type, 90 ExtensionInstalledBubble::BubbleType type,
85 SkBitmap* icon) 91 SkBitmap* icon)
86 : bubble_(NULL), 92 : browser_(browser),
93 extension_id_(extension->id()),
94 bubble_(NULL),
87 type_(type), 95 type_(type),
88 info_(NULL) { 96 info_(NULL) {
89 ResourceBundle& rb = ResourceBundle::GetSharedInstance(); 97 ResourceBundle& rb = ResourceBundle::GetSharedInstance();
90 const gfx::Font& font = rb.GetFont(ResourceBundle::BaseFont); 98 const gfx::Font& font = rb.GetFont(ResourceBundle::BaseFont);
91 99
92 // Scale down to 43x43, but allow smaller icons (don't scale up). 100 // Scale down to 43x43, but allow smaller icons (don't scale up).
93 gfx::Size size(icon->width(), icon->height()); 101 gfx::Size size(icon->width(), icon->height());
94 if (size.width() > kIconSize || size.height() > kIconSize) 102 if (size.width() > kIconSize || size.height() > kIconSize)
95 size = gfx::Size(kIconSize, kIconSize); 103 size = gfx::Size(kIconSize, kIconSize);
96 icon_ = new views::ImageView(); 104 icon_ = new views::ImageView();
97 icon_->SetImageSize(size); 105 icon_->SetImageSize(size);
98 icon_->SetImage(*icon); 106 icon_->SetImage(*icon);
99 AddChildView(icon_); 107 AddChildView(icon_);
100 108
101 string16 extension_name = UTF8ToUTF16(extension->name()); 109 string16 extension_name = UTF8ToUTF16(extension->name());
102 base::i18n::AdjustStringForLocaleDirection(&extension_name); 110 base::i18n::AdjustStringForLocaleDirection(&extension_name);
103 heading_ = new views::Label(UTF16ToWide( 111 heading_ = new views::Label(UTF16ToWide(
104 l10n_util::GetStringFUTF16(IDS_EXTENSION_INSTALLED_HEADING, 112 l10n_util::GetStringFUTF16(IDS_EXTENSION_INSTALLED_HEADING,
105 extension_name))); 113 extension_name)));
106 heading_->SetFont(rb.GetFont(ResourceBundle::MediumFont)); 114 heading_->SetFont(rb.GetFont(ResourceBundle::MediumFont));
107 heading_->SetMultiLine(true); 115 heading_->SetMultiLine(true);
108 heading_->SetHorizontalAlignment(views::Label::ALIGN_LEFT); 116 heading_->SetHorizontalAlignment(views::Label::ALIGN_LEFT);
109 AddChildView(heading_); 117 AddChildView(heading_);
110 118
111 if (type_ == ExtensionInstalledBubble::PAGE_ACTION) { 119 switch (type_) {
112 info_ = new views::Label(UTF16ToWide(l10n_util::GetStringUTF16( 120 case ExtensionInstalledBubble::PAGE_ACTION: {
113 IDS_EXTENSION_INSTALLED_PAGE_ACTION_INFO))); 121 info_ = new views::Label(UTF16ToWide(l10n_util::GetStringUTF16(
114 info_->SetFont(font); 122 IDS_EXTENSION_INSTALLED_PAGE_ACTION_INFO)));
115 info_->SetMultiLine(true); 123 info_->SetFont(font);
116 info_->SetHorizontalAlignment(views::Label::ALIGN_LEFT); 124 info_->SetMultiLine(true);
117 AddChildView(info_); 125 info_->SetHorizontalAlignment(views::Label::ALIGN_LEFT);
126 AddChildView(info_);
127 break;
128 }
129 case ExtensionInstalledBubble::OMNIBOX_KEYWORD: {
130 info_ = new views::Label(UTF16ToWide(l10n_util::GetStringFUTF16(
131 IDS_EXTENSION_INSTALLED_OMNIBOX_KEYWORD_INFO,
132 UTF8ToUTF16(extension->omnibox_keyword()))));
133 info_->SetFont(font);
134 info_->SetMultiLine(true);
135 info_->SetHorizontalAlignment(views::Label::ALIGN_LEFT);
136 AddChildView(info_);
137 break;
138 }
139 case ExtensionInstalledBubble::APP: {
140 views::Link* link = new views::Link(UTF16ToWide(
141 l10n_util::GetStringUTF16(IDS_EXTENSION_INSTALLED_APP_INFO)));
142 link->set_listener(this);
143 manage_ = link;
144 manage_->SetFont(font);
145 manage_->SetMultiLine(true);
146 manage_->SetHorizontalAlignment(views::Label::ALIGN_LEFT);
147 AddChildView(manage_);
148 break;
149 }
150 default:
151 break;
118 } 152 }
119 153
120 if (type_ == ExtensionInstalledBubble::OMNIBOX_KEYWORD) { 154 if (type_ != ExtensionInstalledBubble::APP) {
121 info_ = new views::Label(UTF16ToWide(l10n_util::GetStringFUTF16( 155 manage_ = new views::Label(UTF16ToWide(
122 IDS_EXTENSION_INSTALLED_OMNIBOX_KEYWORD_INFO, 156 l10n_util::GetStringUTF16(IDS_EXTENSION_INSTALLED_MANAGE_INFO)));
123 UTF8ToUTF16(extension->omnibox_keyword())))); 157 manage_->SetFont(font);
124 info_->SetFont(font); 158 manage_->SetMultiLine(true);
125 info_->SetMultiLine(true); 159 manage_->SetHorizontalAlignment(views::Label::ALIGN_LEFT);
126 info_->SetHorizontalAlignment(views::Label::ALIGN_LEFT); 160 AddChildView(manage_);
127 AddChildView(info_);
128 } 161 }
129 162
130 manage_ = new views::Label(UTF16ToWide(
131 l10n_util::GetStringUTF16(IDS_EXTENSION_INSTALLED_MANAGE_INFO)));
132 manage_->SetFont(font);
133 manage_->SetMultiLine(true);
134 manage_->SetHorizontalAlignment(views::Label::ALIGN_LEFT);
135 AddChildView(manage_);
136
137 close_button_ = new views::ImageButton(this); 163 close_button_ = new views::ImageButton(this);
138 close_button_->SetImage(views::CustomButton::BS_NORMAL, 164 close_button_->SetImage(views::CustomButton::BS_NORMAL,
139 rb.GetBitmapNamed(IDR_CLOSE_BAR)); 165 rb.GetBitmapNamed(IDR_CLOSE_BAR));
140 close_button_->SetImage(views::CustomButton::BS_HOT, 166 close_button_->SetImage(views::CustomButton::BS_HOT,
141 rb.GetBitmapNamed(IDR_CLOSE_BAR_H)); 167 rb.GetBitmapNamed(IDR_CLOSE_BAR_H));
142 close_button_->SetImage(views::CustomButton::BS_PUSHED, 168 close_button_->SetImage(views::CustomButton::BS_PUSHED,
143 rb.GetBitmapNamed(IDR_CLOSE_BAR_P)); 169 rb.GetBitmapNamed(IDR_CLOSE_BAR_P));
144 AddChildView(close_button_); 170 AddChildView(close_button_);
145 } 171 }
146 172
147 void set_bubble(Bubble* bubble) { bubble_ = bubble; } 173 void set_bubble(Bubble* bubble) { bubble_ = bubble; }
148 174
149 virtual void ButtonPressed( 175 virtual void ButtonPressed(
150 views::Button* sender, 176 views::Button* sender,
151 const views::Event& event) { 177 const views::Event& event) {
152 if (sender == close_button_) { 178 if (sender == close_button_) {
153 bubble_->set_fade_away_on_close(true); 179 bubble_->set_fade_away_on_close(true);
154 GetWidget()->Close(); 180 GetWidget()->Close();
155 } else { 181 } else {
156 NOTREACHED() << "Unknown view"; 182 NOTREACHED() << "Unknown view";
157 } 183 }
158 } 184 }
159 185
186 // Implements the views::LinkListener interface.
187 virtual void LinkClicked(views::Link* source, int event_flags) OVERRIDE {
188 GetWidget()->Close();
189 ExtensionInstallUI::OpenAppInstalledNTP(browser_, extension_id_);
190 }
191
160 private: 192 private:
161 virtual gfx::Size GetPreferredSize() { 193 virtual gfx::Size GetPreferredSize() {
162 int width = kHorizOuterMargin; 194 int width = kHorizOuterMargin;
163 width += kIconSize; 195 width += kIconSize;
164 width += views::kPanelHorizMargin; 196 width += views::kPanelHorizMargin;
165 width += kRightColumnWidth; 197 width += kRightColumnWidth;
166 width += 2 * views::kPanelHorizMargin; 198 width += 2 * views::kPanelHorizMargin;
167 width += kHorizOuterMargin; 199 width += kHorizOuterMargin;
168 200
169 int height = kVertOuterMargin; 201 int height = kVertOuterMargin;
170 height += heading_->GetHeightForWidth(kRightColumnWidth); 202 height += heading_->GetHeightForWidth(kRightColumnWidth);
171 height += kVertInnerMargin; 203 height += kVertInnerMargin;
172 if (type_ == ExtensionInstalledBubble::PAGE_ACTION || 204 if (info_) {
173 type_ == ExtensionInstalledBubble::OMNIBOX_KEYWORD) {
174 height += info_->GetHeightForWidth(kRightColumnWidth); 205 height += info_->GetHeightForWidth(kRightColumnWidth);
175 height += kVertInnerMargin; 206 height += kVertInnerMargin;
176 } 207 }
177 height += manage_->GetHeightForWidth(kRightColumnWidth); 208 height += manage_->GetHeightForWidth(kRightColumnWidth);
178 height += kVertOuterMargin; 209 height += kVertOuterMargin;
179 210
180 return gfx::Size(width, std::max(height, kIconSize + 2 * kVertOuterMargin)); 211 return gfx::Size(width, std::max(height, kIconSize + 2 * kVertOuterMargin));
181 } 212 }
182 213
183 virtual void Layout() { 214 virtual void Layout() {
184 int x = kHorizOuterMargin; 215 int x = kHorizOuterMargin;
185 int y = kVertOuterMargin; 216 int y = kVertOuterMargin;
186 217
187 icon_->SetBounds(x, y, kIconSize, kIconSize); 218 icon_->SetBounds(x, y, kIconSize, kIconSize);
188 x += kIconSize; 219 x += kIconSize;
189 x += views::kPanelHorizMargin; 220 x += views::kPanelHorizMargin;
190 221
191 y += kRightcolumnVerticalShift; 222 y += kRightcolumnVerticalShift;
192 heading_->SizeToFit(kRightColumnWidth); 223 heading_->SizeToFit(kRightColumnWidth);
193 heading_->SetX(x); 224 heading_->SetX(x);
194 heading_->SetY(y); 225 heading_->SetY(y);
195 y += heading_->height(); 226 y += heading_->height();
196 y += kVertInnerMargin; 227 y += kVertInnerMargin;
197 228
198 if (type_ == ExtensionInstalledBubble::PAGE_ACTION || 229 if (info_) {
199 type_ == ExtensionInstalledBubble::OMNIBOX_KEYWORD) {
200 info_->SizeToFit(kRightColumnWidth); 230 info_->SizeToFit(kRightColumnWidth);
201 info_->SetX(x); 231 info_->SetX(x);
202 info_->SetY(y); 232 info_->SetY(y);
203 y += info_->height(); 233 y += info_->height();
204 y += kVertInnerMargin; 234 y += kVertInnerMargin;
205 } 235 }
206 236
207 manage_->SizeToFit(kRightColumnWidth); 237 manage_->SizeToFit(kRightColumnWidth);
208 manage_->SetX(x); 238 manage_->SetX(x);
209 manage_->SetY(y); 239 manage_->SetY(y);
210 y += manage_->height(); 240 y += manage_->height();
211 y += kVertInnerMargin; 241 y += kVertInnerMargin;
212 242
213 gfx::Size sz; 243 gfx::Size sz;
214 x += kRightColumnWidth + 2 * views::kPanelHorizMargin + kHorizOuterMargin - 244 x += kRightColumnWidth + 2 * views::kPanelHorizMargin + kHorizOuterMargin -
215 close_button_->GetPreferredSize().width(); 245 close_button_->GetPreferredSize().width();
216 y = kVertOuterMargin; 246 y = kVertOuterMargin;
217 sz = close_button_->GetPreferredSize(); 247 sz = close_button_->GetPreferredSize();
218 // x-1 & y-1 is just slop to get the close button visually aligned with the 248 // x-1 & y-1 is just slop to get the close button visually aligned with the
219 // title text and bubble arrow. 249 // title text and bubble arrow.
220 close_button_->SetBounds(x - 1, y - 1, sz.width(), sz.height()); 250 close_button_->SetBounds(x - 1, y - 1, sz.width(), sz.height());
221 } 251 }
222 252
253 // The browser we're associated with.
254 Browser* browser_;
255
256 // The id of the extension just installed.
257 const std::string extension_id_;
258
223 // The Bubble showing us. 259 // The Bubble showing us.
224 Bubble* bubble_; 260 Bubble* bubble_;
225 261
226 ExtensionInstalledBubble::BubbleType type_; 262 ExtensionInstalledBubble::BubbleType type_;
227 views::ImageView* icon_; 263 views::ImageView* icon_;
228 views::Label* heading_; 264 views::Label* heading_;
229 views::Label* info_; 265 views::Label* info_;
230 views::Label* manage_; 266 views::Label* manage_;
231 views::ImageButton* close_button_; 267 views::ImageButton* close_button_;
232 268
233 DISALLOW_COPY_AND_ASSIGN(InstalledBubbleContent); 269 DISALLOW_COPY_AND_ASSIGN(InstalledBubbleContent);
234 }; 270 };
235 271
236 void ExtensionInstalledBubble::Show(const Extension* extension, 272 void ExtensionInstalledBubble::Show(const Extension* extension,
237 Browser *browser, 273 Browser *browser,
238 const SkBitmap& icon) { 274 const SkBitmap& icon) {
239 new ExtensionInstalledBubble(extension, browser, icon); 275 new ExtensionInstalledBubble(extension, browser, icon);
240 } 276 }
241 277
242 ExtensionInstalledBubble::ExtensionInstalledBubble(const Extension* extension, 278 ExtensionInstalledBubble::ExtensionInstalledBubble(const Extension* extension,
243 Browser *browser, 279 Browser *browser,
244 const SkBitmap& icon) 280 const SkBitmap& icon)
245 : extension_(extension), 281 : extension_(extension),
246 browser_(browser), 282 browser_(browser),
247 icon_(icon), 283 icon_(icon),
248 animation_wait_retries_(0) { 284 animation_wait_retries_(0) {
249 AddRef(); // Balanced in BubbleClosing. 285 AddRef(); // Balanced in BubbleClosing.
250 286
251 if (!extension_->omnibox_keyword().empty()) { 287 if (extension->is_app()) {
288 type_ = APP;
289 } else if (!extension_->omnibox_keyword().empty()) {
252 type_ = OMNIBOX_KEYWORD; 290 type_ = OMNIBOX_KEYWORD;
253 } else if (extension_->browser_action()) { 291 } else if (extension_->browser_action()) {
254 type_ = BROWSER_ACTION; 292 type_ = BROWSER_ACTION;
255 } else if (extension->page_action() && 293 } else if (extension->page_action() &&
256 !extension->page_action()->default_icon_path().empty()) { 294 !extension->page_action()->default_icon_path().empty()) {
257 type_ = PAGE_ACTION; 295 type_ = PAGE_ACTION;
258 } else { 296 } else {
259 type_ = GENERIC; 297 type_ = GENERIC;
260 } 298 }
261 299
(...skipping 29 matching lines...) Expand all
291 } else { 329 } else {
292 NOTREACHED() << L"Received unexpected notification"; 330 NOTREACHED() << L"Received unexpected notification";
293 } 331 }
294 } 332 }
295 333
296 void ExtensionInstalledBubble::ShowInternal() { 334 void ExtensionInstalledBubble::ShowInternal() {
297 BrowserView* browser_view = BrowserView::GetBrowserViewForNativeWindow( 335 BrowserView* browser_view = BrowserView::GetBrowserViewForNativeWindow(
298 browser_->window()->GetNativeHandle()); 336 browser_->window()->GetNativeHandle());
299 337
300 const views::View* reference_view = NULL; 338 const views::View* reference_view = NULL;
301 if (type_ == BROWSER_ACTION) { 339 if (type_ == APP) {
340 if (browser_view->IsTabStripVisible()) {
341 AbstractTabStripView* tabstrip = browser_view->tabstrip();
342 views::View* ntp_button = tabstrip->GetNewTabButton();
343 if (ntp_button && ntp_button->IsVisibleInRootView()) {
344 reference_view = ntp_button;
345 } else {
346 // Just have the bubble point at the tab strip.
347 reference_view = tabstrip;
348 }
349 }
350 } else if (type_ == BROWSER_ACTION) {
302 BrowserActionsContainer* container = 351 BrowserActionsContainer* container =
303 browser_view->GetToolbarView()->browser_actions(); 352 browser_view->GetToolbarView()->browser_actions();
304 if (container->animating() && 353 if (container->animating() &&
305 animation_wait_retries_++ < kAnimationWaitMaxRetry) { 354 animation_wait_retries_++ < kAnimationWaitMaxRetry) {
306 // We don't know where the view will be until the container has stopped 355 // We don't know where the view will be until the container has stopped
307 // animating, so check back in a little while. 356 // animating, so check back in a little while.
308 MessageLoopForUI::current()->PostDelayedTask( 357 MessageLoopForUI::current()->PostDelayedTask(
309 FROM_HERE, NewRunnableMethod(this, 358 FROM_HERE, NewRunnableMethod(this,
310 &ExtensionInstalledBubble::ShowInternal), kAnimationWaitTime); 359 &ExtensionInstalledBubble::ShowInternal), kAnimationWaitTime);
311 return; 360 return;
(...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after
345 394
346 // For omnibox keyword bubbles, move the arrow to point to the left edge 395 // For omnibox keyword bubbles, move the arrow to point to the left edge
347 // of the omnibox, just to the right of the icon. 396 // of the omnibox, just to the right of the icon.
348 if (type_ == OMNIBOX_KEYWORD) { 397 if (type_ == OMNIBOX_KEYWORD) {
349 bounds.set_origin( 398 bounds.set_origin(
350 browser_view->GetLocationBarView()->GetLocationEntryOrigin()); 399 browser_view->GetLocationBarView()->GetLocationEntryOrigin());
351 bounds.set_width(0); 400 bounds.set_width(0);
352 arrow_location = BubbleBorder::TOP_LEFT; 401 arrow_location = BubbleBorder::TOP_LEFT;
353 } 402 }
354 403
355 bubble_content_ = new InstalledBubbleContent(extension_, type_, &icon_); 404 bubble_content_ = new InstalledBubbleContent(
405 browser_, extension_, type_, &icon_);
356 Bubble* bubble = Bubble::Show(browser_view->GetWidget(), bounds, 406 Bubble* bubble = Bubble::Show(browser_view->GetWidget(), bounds,
357 arrow_location, bubble_content_, this); 407 arrow_location, bubble_content_, this);
358 bubble_content_->set_bubble(bubble); 408 bubble_content_->set_bubble(bubble);
359 } 409 }
360 410
361 // BubbleDelegate 411 // BubbleDelegate
362 void ExtensionInstalledBubble::BubbleClosing(Bubble* bubble, 412 void ExtensionInstalledBubble::BubbleClosing(Bubble* bubble,
363 bool closed_by_escape) { 413 bool closed_by_escape) {
364 if (extension_ && type_ == PAGE_ACTION) { 414 if (extension_ && type_ == PAGE_ACTION) {
365 BrowserView* browser_view = BrowserView::GetBrowserViewForNativeWindow( 415 BrowserView* browser_view = BrowserView::GetBrowserViewForNativeWindow(
366 browser_->window()->GetNativeHandle()); 416 browser_->window()->GetNativeHandle());
367 browser_view->GetLocationBarView()->SetPreviewEnabledPageAction( 417 browser_view->GetLocationBarView()->SetPreviewEnabledPageAction(
368 extension_->page_action(), 418 extension_->page_action(),
369 false); // preview_enabled 419 false); // preview_enabled
370 } 420 }
371 421
372 Release(); // Balanced in ctor. 422 Release(); // Balanced in ctor.
373 } 423 }
374 424
375 bool ExtensionInstalledBubble::CloseOnEscape() { 425 bool ExtensionInstalledBubble::CloseOnEscape() {
376 return true; 426 return true;
377 } 427 }
378 428
379 bool ExtensionInstalledBubble::FadeInOnShow() { 429 bool ExtensionInstalledBubble::FadeInOnShow() {
380 return true; 430 return true;
381 } 431 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698