OLD | NEW |
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/location_bar/zoom_bubble_view.h" | 5 #include "chrome/browser/ui/views/location_bar/zoom_bubble_view.h" |
6 | 6 |
7 #include "base/i18n/rtl.h" | 7 #include "base/i18n/rtl.h" |
8 #include "base/strings/stringprintf.h" | 8 #include "base/strings/stringprintf.h" |
9 #include "chrome/browser/chrome_notification_types.h" | 9 #include "chrome/browser/chrome_notification_types.h" |
10 #include "chrome/browser/chrome_page_zoom.h" | 10 #include "chrome/browser/chrome_page_zoom.h" |
(...skipping 51 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
62 ZoomController* zoom_controller = | 62 ZoomController* zoom_controller = |
63 ZoomController::FromWebContents(web_contents); | 63 ZoomController::FromWebContents(web_contents); |
64 const extensions::Extension* extension = zoom_controller->last_extension(); | 64 const extensions::Extension* extension = zoom_controller->last_extension(); |
65 | 65 |
66 // If the bubble is already showing in this window and the zoom change was not | 66 // If the bubble is already showing in this window and the zoom change was not |
67 // initiated by an extension, then the bubble can be reused and only the label | 67 // initiated by an extension, then the bubble can be reused and only the label |
68 // text needs to be updated. | 68 // text needs to be updated. |
69 if (zoom_bubble_ && | 69 if (zoom_bubble_ && |
70 zoom_bubble_->GetAnchorView() == anchor_view && | 70 zoom_bubble_->GetAnchorView() == anchor_view && |
71 !extension) { | 71 !extension) { |
| 72 DCHECK_EQ(web_contents, zoom_bubble_->web_contents_); |
72 zoom_bubble_->Refresh(); | 73 zoom_bubble_->Refresh(); |
73 return; | 74 return; |
74 } | 75 } |
75 | 76 |
76 // If the bubble is already showing but in a different tab, the current | 77 // If the bubble is already showing but in a different tab, the current |
77 // bubble must be closed and a new one created. | 78 // bubble must be closed and a new one created. |
78 CloseBubble(); | 79 CloseBubble(); |
79 | 80 |
80 zoom_bubble_ = new ZoomBubbleView(anchor_view, | 81 zoom_bubble_ = new ZoomBubbleView(anchor_view, |
81 web_contents, | 82 web_contents, |
(...skipping 85 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
167 void ZoomBubbleView::Refresh() { | 168 void ZoomBubbleView::Refresh() { |
168 ZoomController* zoom_controller = | 169 ZoomController* zoom_controller = |
169 ZoomController::FromWebContents(web_contents_); | 170 ZoomController::FromWebContents(web_contents_); |
170 int zoom_percent = zoom_controller->GetZoomPercent(); | 171 int zoom_percent = zoom_controller->GetZoomPercent(); |
171 label_->SetText( | 172 label_->SetText( |
172 l10n_util::GetStringFUTF16Int(IDS_TOOLTIP_ZOOM, zoom_percent)); | 173 l10n_util::GetStringFUTF16Int(IDS_TOOLTIP_ZOOM, zoom_percent)); |
173 StartTimerIfNecessary(); | 174 StartTimerIfNecessary(); |
174 } | 175 } |
175 | 176 |
176 void ZoomBubbleView::Close() { | 177 void ZoomBubbleView::Close() { |
| 178 // Widget's Close() is async, but we don't want to use zoom_bubble_ after |
| 179 // this. Additionally web_contents_ may have been destroyed. |
| 180 zoom_bubble_ = NULL; |
| 181 web_contents_ = NULL; |
177 GetWidget()->Close(); | 182 GetWidget()->Close(); |
178 } | 183 } |
179 | 184 |
180 void ZoomBubbleView::SetExtensionInfo(const extensions::Extension* extension) { | 185 void ZoomBubbleView::SetExtensionInfo(const extensions::Extension* extension) { |
181 DCHECK(extension); | 186 DCHECK(extension); |
182 extension_info_.id = extension->id(); | 187 extension_info_.id = extension->id(); |
183 extension_info_.name = extension->name(); | 188 extension_info_.name = extension->name(); |
184 | 189 |
185 ResourceBundle& rb = ui::ResourceBundle::GetSharedInstance(); | 190 ResourceBundle& rb = ui::ResourceBundle::GetSharedInstance(); |
186 const gfx::ImageSkia& default_extension_icon_image = | 191 const gfx::ImageSkia& default_extension_icon_image = |
(...skipping 166 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
353 void ZoomBubbleView::WindowClosing() { | 358 void ZoomBubbleView::WindowClosing() { |
354 // |zoom_bubble_| can be a new bubble by this point (as Close(); doesn't | 359 // |zoom_bubble_| can be a new bubble by this point (as Close(); doesn't |
355 // call this right away). Only set to NULL when it's this bubble. | 360 // call this right away). Only set to NULL when it's this bubble. |
356 if (zoom_bubble_ == this) | 361 if (zoom_bubble_ == this) |
357 zoom_bubble_ = NULL; | 362 zoom_bubble_ = NULL; |
358 } | 363 } |
359 | 364 |
360 ZoomBubbleView::ZoomBubbleExtensionInfo::ZoomBubbleExtensionInfo() {} | 365 ZoomBubbleView::ZoomBubbleExtensionInfo::ZoomBubbleExtensionInfo() {} |
361 | 366 |
362 ZoomBubbleView::ZoomBubbleExtensionInfo::~ZoomBubbleExtensionInfo() {} | 367 ZoomBubbleView::ZoomBubbleExtensionInfo::~ZoomBubbleExtensionInfo() {} |
OLD | NEW |