Chromium Code Reviews| OLD | NEW |
|---|---|
| 1 // Copyright 2014 The Chromium Authors. All rights reserved. | 1 // Copyright 2014 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/extensions/chrome_extension_function_details.h" | 5 #include "chrome/browser/extensions/chrome_extension_function_details.h" |
| 6 | 6 |
| 7 #include "chrome/browser/extensions/extension_tab_util.h" | |
| 7 #include "chrome/browser/extensions/window_controller.h" | 8 #include "chrome/browser/extensions/window_controller.h" |
| 8 #include "chrome/browser/extensions/window_controller_list.h" | 9 #include "chrome/browser/extensions/window_controller_list.h" |
| 9 #include "chrome/browser/profiles/profile.h" | 10 #include "chrome/browser/profiles/profile.h" |
| 10 #include "chrome/browser/ui/browser.h" | 11 #include "chrome/browser/ui/browser.h" |
| 11 #include "chrome/browser/ui/browser_finder.h" | 12 #include "chrome/browser/ui/browser_finder.h" |
| 12 #include "chrome/browser/ui/tabs/tab_strip_model.h" | 13 #include "chrome/browser/ui/tabs/tab_strip_model.h" |
| 14 #include "components/web_modal/web_contents_modal_dialog_manager.h" | |
| 13 #include "content/public/browser/render_frame_host.h" | 15 #include "content/public/browser/render_frame_host.h" |
| 14 #include "content/public/browser/render_process_host.h" | 16 #include "content/public/browser/render_process_host.h" |
| 17 #include "extensions/browser/app_window/app_window.h" | |
| 18 #include "extensions/browser/app_window/app_window_registry.h" | |
| 15 #include "extensions/browser/extension_function.h" | 19 #include "extensions/browser/extension_function.h" |
| 16 #include "extensions/browser/extension_function_dispatcher.h" | 20 #include "extensions/browser/extension_function_dispatcher.h" |
| 17 | 21 |
| 18 using content::WebContents; | 22 using content::WebContents; |
| 19 using content::RenderViewHost; | 23 using content::RenderViewHost; |
| 20 using extensions::WindowController; | 24 using extensions::WindowController; |
| 21 | 25 |
| 22 ChromeExtensionFunctionDetails::ChromeExtensionFunctionDetails( | 26 ChromeExtensionFunctionDetails::ChromeExtensionFunctionDetails( |
| 23 UIThreadExtensionFunction* function) | 27 UIThreadExtensionFunction* function) |
| 24 : function_(function) { | 28 : function_(function) { |
| (...skipping 81 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 106 ChromeExtensionFunctionDetails::GetAssociatedWebContents() { | 110 ChromeExtensionFunctionDetails::GetAssociatedWebContents() { |
| 107 content::WebContents* web_contents = function_->GetAssociatedWebContents(); | 111 content::WebContents* web_contents = function_->GetAssociatedWebContents(); |
| 108 if (web_contents) | 112 if (web_contents) |
| 109 return web_contents; | 113 return web_contents; |
| 110 | 114 |
| 111 Browser* browser = GetCurrentBrowser(); | 115 Browser* browser = GetCurrentBrowser(); |
| 112 if (!browser) | 116 if (!browser) |
| 113 return NULL; | 117 return NULL; |
| 114 return browser->tab_strip_model()->GetActiveWebContents(); | 118 return browser->tab_strip_model()->GetActiveWebContents(); |
| 115 } | 119 } |
| 120 | |
| 121 content::WebContents* ChromeExtensionFunctionDetails::GetVisibleWebContents() { | |
| 122 WebContents* contents = | |
| 123 WebContents::FromRenderFrameHost(function_->render_frame_host()); | |
|
not at google - send to devlin
2015/07/10 17:02:25
You should be able to use GetSenderWebContents() h
| |
| 124 web_modal::WebContentsModalDialogManager* web_contents_modal_dialog_manager = | |
|
not at google - send to devlin
2015/07/10 17:02:25
Add comment:
// Hack: use the existence of a WebC
| |
| 125 web_modal::WebContentsModalDialogManager::FromWebContents(contents); | |
| 126 if (!web_contents_modal_dialog_manager) { | |
| 127 // If there is no WebContentsModalDialogManager, then this contents is | |
| 128 // probably the background page for an app. Try to find a app window to | |
| 129 // host the dialog. | |
| 130 contents = nullptr; | |
| 131 | |
| 132 Profile* profile = GetProfile(); | |
| 133 const extensions::Extension* extension = function_->extension(); | |
| 134 if (extension) { | |
| 135 extensions::AppWindow* window = | |
|
not at google - send to devlin
2015/07/10 17:57:03
Actually, perhaps you should be using WindowContro
wjywbs
2015/07/10 19:54:22
Turns out that CurrentWindowForFunction() can prop
| |
| 136 extensions::AppWindowRegistry::Get(profile) | |
| 137 ->GetCurrentAppWindowForApp(extension->id()); | |
| 138 if (window) | |
| 139 contents = window->web_contents(); | |
|
not at google - send to devlin
2015/07/10 17:02:25
Likewise, early-return (even once moved to the end
| |
| 140 } | |
| 141 | |
| 142 int source_tab_id = function_->source_tab_id(); | |
|
not at google - send to devlin
2015/07/10 17:02:25
Tiny request: put the checks for the tab above the
| |
| 143 if (!contents && source_tab_id != TabStripModel::kNoTab) { | |
| 144 // When the request originated from a background page, but there is no | |
| 145 // app window open, check to see if it originated from a tab and display | |
| 146 // the dialog in that tab. | |
| 147 extensions::ExtensionTabUtil::GetTabById(source_tab_id, profile, | |
| 148 profile->IsOffTheRecord(), NULL, | |
|
not at google - send to devlin
2015/07/10 17:02:25
just use "true" here, not "profile->IsOffTheRecord
| |
| 149 NULL, &contents, NULL); | |
|
not at google - send to devlin
2015/07/10 17:02:25
always use nullptr not NULL now.
| |
| 150 } | |
|
not at google - send to devlin
2015/07/10 17:02:25
and early-return.
| |
| 151 } | |
| 152 return contents; | |
| 153 } | |
| OLD | NEW |