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

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

Issue 18179004: Dismiss action in tab modal dialogs. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Fix test for Mac Created 7 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
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_dialog.h" 5 #include "chrome/browser/ui/views/extensions/extension_dialog.h"
6 6
7 #include "chrome/browser/chrome_notification_types.h" 7 #include "chrome/browser/chrome_notification_types.h"
8 #include "chrome/browser/extensions/extension_host.h" 8 #include "chrome/browser/extensions/extension_host.h"
9 #include "chrome/browser/extensions/extension_process_manager.h" 9 #include "chrome/browser/extensions/extension_process_manager.h"
10 #include "chrome/browser/extensions/extension_system.h" 10 #include "chrome/browser/extensions/extension_system.h"
11 #include "chrome/browser/profiles/profile.h" 11 #include "chrome/browser/profiles/profile.h"
12 #include "chrome/browser/ui/views/constrained_window_views.h" 12 #include "chrome/browser/ui/views/constrained_window_views.h"
13 #include "chrome/browser/ui/views/extensions/extension_dialog_observer.h" 13 #include "chrome/browser/ui/views/extensions/extension_dialog_observer.h"
14 #include "content/public/browser/notification_details.h" 14 #include "content/public/browser/notification_details.h"
15 #include "content/public/browser/notification_source.h" 15 #include "content/public/browser/notification_source.h"
16 #include "content/public/browser/render_view_host.h" 16 #include "content/public/browser/render_view_host.h"
17 #include "content/public/browser/render_widget_host_view.h" 17 #include "content/public/browser/render_widget_host_view.h"
18 #include "content/public/browser/web_contents.h" 18 #include "content/public/browser/web_contents.h"
19 #include "content/public/browser/web_contents_view.h" 19 #include "content/public/browser/web_contents_view.h"
20 #include "ui/base/base_window.h" 20 #include "ui/base/base_window.h"
21 #include "ui/gfx/screen.h" 21 #include "ui/gfx/screen.h"
22 #include "ui/views/background.h" 22 #include "ui/views/background.h"
23 #include "ui/views/widget/widget.h" 23 #include "ui/views/widget/widget.h"
24 #include "url/gurl.h" 24 #include "url/gurl.h"
25 25
26 using content::WebContents; 26 using content::WebContents;
27 27
28 ExtensionDialog::ExtensionDialog(extensions::ExtensionHost* host, 28 ExtensionDialog::ExtensionDialog(extensions::ExtensionHost* host,
29 ExtensionDialogObserver* observer) 29 ExtensionDialogObserver* observer)
30 : window_(NULL), 30 : extension_host_(host),
31 extension_host_(host),
32 observer_(observer) { 31 observer_(observer) {
33 AddRef(); // Balanced in DeleteDelegate(); 32 AddRef(); // Balanced in DeleteDelegate();
34 33
35 registrar_.Add(this, chrome::NOTIFICATION_EXTENSION_HOST_DID_STOP_LOADING, 34 registrar_.Add(this, chrome::NOTIFICATION_EXTENSION_HOST_DID_STOP_LOADING,
36 content::Source<Profile>(host->profile())); 35 content::Source<Profile>(host->profile()));
37 // Listen for the containing view calling window.close(); 36 // Listen for the containing view calling window.close();
38 registrar_.Add(this, chrome::NOTIFICATION_EXTENSION_HOST_VIEW_SHOULD_CLOSE, 37 registrar_.Add(this, chrome::NOTIFICATION_EXTENSION_HOST_VIEW_SHOULD_CLOSE,
39 content::Source<Profile>(host->profile())); 38 content::Source<Profile>(host->profile()));
40 // Listen for a crash or other termination of the extension process. 39 // Listen for a crash or other termination of the extension process.
41 registrar_.Add(this, chrome::NOTIFICATION_EXTENSION_PROCESS_TERMINATED, 40 registrar_.Add(this, chrome::NOTIFICATION_EXTENSION_PROCESS_TERMINATED,
(...skipping 50 matching lines...) Expand 10 before | Expand all | Expand 10 after
92 DCHECK(manager); 91 DCHECK(manager);
93 if (!manager) 92 if (!manager)
94 return NULL; 93 return NULL;
95 return manager->CreateDialogHost(url); 94 return manager->CreateDialogHost(url);
96 } 95 }
97 96
98 void ExtensionDialog::InitWindow(ui::BaseWindow* base_window, 97 void ExtensionDialog::InitWindow(ui::BaseWindow* base_window,
99 int width, 98 int width,
100 int height) { 99 int height) {
101 gfx::NativeWindow parent = base_window->GetNativeWindow(); 100 gfx::NativeWindow parent = base_window->GetNativeWindow();
102 window_ = CreateBrowserModalDialogViews(this, parent); 101 views::Widget* window = CreateBrowserModalDialogViews(this, parent);
103 102
104 // Center the window over the browser. 103 // Center the window over the browser.
105 gfx::Point center = base_window->GetBounds().CenterPoint(); 104 gfx::Point center = base_window->GetBounds().CenterPoint();
106 int x = center.x() - width / 2; 105 int x = center.x() - width / 2;
107 int y = center.y() - height / 2; 106 int y = center.y() - height / 2;
108 // Ensure the top left and top right of the window are on screen, with 107 // Ensure the top left and top right of the window are on screen, with
109 // priority given to the top left. 108 // priority given to the top left.
110 gfx::Rect screen_rect = gfx::Screen::GetScreenFor(parent)-> 109 gfx::Rect screen_rect = gfx::Screen::GetScreenFor(parent)->
111 GetDisplayNearestPoint(center).bounds(); 110 GetDisplayNearestPoint(center).bounds();
112 gfx::Rect bounds_rect = gfx::Rect(x, y, width, height); 111 gfx::Rect bounds_rect = gfx::Rect(x, y, width, height);
113 bounds_rect.AdjustToFit(screen_rect); 112 bounds_rect.AdjustToFit(screen_rect);
114 window_->SetBounds(bounds_rect); 113 window->SetBounds(bounds_rect);
115 114
116 window_->Show(); 115 window->Show();
117 // TODO(jamescook): Remove redundant call to Activate()? 116 // TODO(jamescook): Remove redundant call to Activate()?
118 window_->Activate(); 117 window->Activate();
119 } 118 }
120 119
121 void ExtensionDialog::ObserverDestroyed() { 120 void ExtensionDialog::ObserverDestroyed() {
122 observer_ = NULL; 121 observer_ = NULL;
123 } 122 }
124 123
125 void ExtensionDialog::Close() {
126 if (!window_)
127 return;
128
129 window_->Close();
130 window_ = NULL;
131 }
132
133 void ExtensionDialog::MaybeFocusRenderView() { 124 void ExtensionDialog::MaybeFocusRenderView() {
134 views::FocusManager* focus_manager = GetWidget()->GetFocusManager(); 125 views::FocusManager* focus_manager = GetWidget()->GetFocusManager();
135 DCHECK(focus_manager != NULL); 126 DCHECK(focus_manager != NULL);
136 127
137 // Already there's a focused view, so no need to switch the focus. 128 // Already there's a focused view, so no need to switch the focus.
138 if (focus_manager->GetFocusedView()) 129 if (focus_manager->GetFocusedView())
139 return; 130 return;
140 131
141 content::RenderWidgetHostView* view = host()->render_view_host()->GetView(); 132 content::RenderWidgetHostView* view = host()->render_view_host()->GetView();
142 if (!view) 133 if (!view)
(...skipping 75 matching lines...) Expand 10 before | Expand all | Expand 10 after
218 extension_host_->view()->set_background(NULL); 209 extension_host_->view()->set_background(NULL);
219 // The render view is created during the LoadURL(), so we should 210 // The render view is created during the LoadURL(), so we should
220 // set the focus to the view if nobody else takes the focus. 211 // set the focus to the view if nobody else takes the focus.
221 if (content::Details<extensions::ExtensionHost>(host()) == details) 212 if (content::Details<extensions::ExtensionHost>(host()) == details)
222 MaybeFocusRenderView(); 213 MaybeFocusRenderView();
223 break; 214 break;
224 case chrome::NOTIFICATION_EXTENSION_HOST_VIEW_SHOULD_CLOSE: 215 case chrome::NOTIFICATION_EXTENSION_HOST_VIEW_SHOULD_CLOSE:
225 // If we aren't the host of the popup, then disregard the notification. 216 // If we aren't the host of the popup, then disregard the notification.
226 if (content::Details<extensions::ExtensionHost>(host()) != details) 217 if (content::Details<extensions::ExtensionHost>(host()) != details)
227 return; 218 return;
228 Close(); 219 GetWidget()->Close();
229 break; 220 break;
230 case chrome::NOTIFICATION_EXTENSION_PROCESS_TERMINATED: 221 case chrome::NOTIFICATION_EXTENSION_PROCESS_TERMINATED:
231 if (content::Details<extensions::ExtensionHost>(host()) != details) 222 if (content::Details<extensions::ExtensionHost>(host()) != details)
232 return; 223 return;
233 if (observer_) 224 if (observer_)
234 observer_->ExtensionTerminated(this); 225 observer_->ExtensionTerminated(this);
235 break; 226 break;
236 default: 227 default:
237 NOTREACHED() << L"Received unexpected notification"; 228 NOTREACHED() << L"Received unexpected notification";
238 break; 229 break;
239 } 230 }
240 } 231 }
OLDNEW
« no previous file with comments | « chrome/browser/ui/views/extensions/extension_dialog.h ('k') | chrome/browser/ui/views/javascript_app_modal_dialog_views.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698