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

Side by Side Diff: chrome/browser/extensions/chrome_extension_function_details.cc

Issue 543873002: Add ChromeExtensionFunctionDetails (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 6 years, 3 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 2013 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.h" 5 #include "chrome/browser/extensions/chrome_extension_function_details.h"
6 6
7 #include "chrome/browser/extensions/window_controller.h" 7 #include "chrome/browser/extensions/window_controller.h"
8 #include "chrome/browser/extensions/window_controller_list.h" 8 #include "chrome/browser/extensions/window_controller_list.h"
9 #include "chrome/browser/profiles/profile.h" 9 #include "chrome/browser/profiles/profile.h"
10 #include "chrome/browser/ui/browser.h" 10 #include "chrome/browser/ui/browser.h"
11 #include "chrome/browser/ui/browser_finder.h" 11 #include "chrome/browser/ui/browser_finder.h"
12 #include "chrome/browser/ui/tabs/tab_strip_model.h" 12 #include "chrome/browser/ui/tabs/tab_strip_model.h"
13 #include "content/public/browser/render_process_host.h" 13 #include "content/public/browser/render_process_host.h"
14 #include "content/public/browser/render_view_host.h" 14 #include "content/public/browser/render_view_host.h"
15 #include "extensions/browser/extension_function.h"
15 #include "extensions/browser/extension_function_dispatcher.h" 16 #include "extensions/browser/extension_function_dispatcher.h"
16 17
18 using content::WebContents;
17 using content::RenderViewHost; 19 using content::RenderViewHost;
18 using content::WebContents; 20 using extensions::WindowController;
19 21
20 ChromeUIThreadExtensionFunction::ChromeUIThreadExtensionFunction() { 22 ChromeExtensionFunctionDetails::ChromeExtensionFunctionDetails(
23 UIThreadExtensionFunction* function)
24 : function_(function) {
21 } 25 }
22 26
23 Profile* ChromeUIThreadExtensionFunction::GetProfile() const { 27 ChromeExtensionFunctionDetails::~ChromeExtensionFunctionDetails() {
24 return Profile::FromBrowserContext(context_);
25 } 28 }
26 29
27 bool ChromeUIThreadExtensionFunction::CanOperateOnWindow( 30 Profile* ChromeExtensionFunctionDetails::GetProfile() const {
31 return Profile::FromBrowserContext(function_->browser_context());
32 }
33
34 bool ChromeExtensionFunctionDetails::CanOperateOnWindow(
28 const extensions::WindowController* window_controller) const { 35 const extensions::WindowController* window_controller) const {
29 // |extension()| is NULL for unit tests only. 36 // |extension()| is NULL for unit tests only.
30 if (extension() != NULL && 37 if (function_->extension() != NULL &&
31 !window_controller->IsVisibleToExtension(extension())) { 38 !window_controller->IsVisibleToExtension(function_->extension())) {
32 return false; 39 return false;
33 } 40 }
34 41
35 if (GetProfile() == window_controller->profile()) 42 if (GetProfile() == window_controller->profile())
36 return true; 43 return true;
37 44
38 if (!include_incognito()) 45 if (!function_->include_incognito())
39 return false; 46 return false;
40 47
41 return GetProfile()->HasOffTheRecordProfile() && 48 return GetProfile()->HasOffTheRecordProfile() &&
42 GetProfile()->GetOffTheRecordProfile() == window_controller->profile(); 49 GetProfile()->GetOffTheRecordProfile() == window_controller->profile();
43 } 50 }
44 51
45 // TODO(stevenjb): Replace this with GetExtensionWindowController(). 52 // TODO(stevenjb): Replace this with GetExtensionWindowController().
46 Browser* ChromeUIThreadExtensionFunction::GetCurrentBrowser() { 53 Browser* ChromeExtensionFunctionDetails::GetCurrentBrowser() const {
47 // If the delegate has an associated browser, return it. 54 // If the delegate has an associated browser, return it.
48 if (dispatcher()) { 55 if (function_->dispatcher()) {
49 extensions::WindowController* window_controller = 56 extensions::WindowController* window_controller =
50 dispatcher()->delegate()->GetExtensionWindowController(); 57 function_->dispatcher()->delegate()->GetExtensionWindowController();
51 if (window_controller) { 58 if (window_controller) {
52 Browser* browser = window_controller->GetBrowser(); 59 Browser* browser = window_controller->GetBrowser();
53 if (browser) 60 if (browser)
54 return browser; 61 return browser;
55 } 62 }
56 } 63 }
57 64
58 // Otherwise, try to default to a reasonable browser. If |include_incognito_| 65 // Otherwise, try to default to a reasonable browser. If |include_incognito_|
59 // is true, we will also search browsers in the incognito version of this 66 // is true, we will also search browsers in the incognito version of this
60 // profile. Note that the profile may already be incognito, in which case 67 // profile. Note that the profile may already be incognito, in which case
61 // we will search the incognito version only, regardless of the value of 68 // we will search the incognito version only, regardless of the value of
62 // |include_incognito|. Look only for browsers on the active desktop as it is 69 // |include_incognito|. Look only for browsers on the active desktop as it is
63 // preferable to pretend no browser is open then to return a browser on 70 // preferable to pretend no browser is open then to return a browser on
64 // another desktop. 71 // another desktop.
65 if (render_view_host_) { 72 if (function_->render_view_host()) {
66 Profile* profile = Profile::FromBrowserContext( 73 Profile* profile = Profile::FromBrowserContext(
67 render_view_host_->GetProcess()->GetBrowserContext()); 74 function_->render_view_host()->GetProcess()->GetBrowserContext());
68 Browser* browser = chrome::FindAnyBrowser( 75 Browser* browser = chrome::FindAnyBrowser(
69 profile, include_incognito_, chrome::GetActiveDesktop()); 76 profile, function_->include_incognito(), chrome::GetActiveDesktop());
70 if (browser) 77 if (browser)
71 return browser; 78 return browser;
72 } 79 }
73 80
74 // NOTE(rafaelw): This can return NULL in some circumstances. In particular, 81 // NOTE(rafaelw): This can return NULL in some circumstances. In particular,
75 // a background_page onload chrome.tabs api call can make it into here 82 // a background_page onload chrome.tabs api call can make it into here
76 // before the browser is sufficiently initialized to return here, or 83 // before the browser is sufficiently initialized to return here, or
77 // all of this profile's browser windows may have been closed. 84 // all of this profile's browser windows may have been closed.
78 // A similar situation may arise during shutdown. 85 // A similar situation may arise during shutdown.
79 // TODO(rafaelw): Delay creation of background_page until the browser 86 // TODO(rafaelw): Delay creation of background_page until the browser
80 // is available. http://code.google.com/p/chromium/issues/detail?id=13284 87 // is available. http://code.google.com/p/chromium/issues/detail?id=13284
81 return NULL; 88 return NULL;
82 } 89 }
83 90
84 extensions::WindowController* 91 extensions::WindowController*
85 ChromeUIThreadExtensionFunction::GetExtensionWindowController() { 92 ChromeExtensionFunctionDetails::GetExtensionWindowController() const {
86 // If the delegate has an associated window controller, return it. 93 // If the delegate has an associated window controller, return it.
87 if (dispatcher()) { 94 if (function_->dispatcher()) {
88 extensions::WindowController* window_controller = 95 extensions::WindowController* window_controller =
89 dispatcher()->delegate()->GetExtensionWindowController(); 96 function_->dispatcher()->delegate()->GetExtensionWindowController();
90 if (window_controller) 97 if (window_controller)
91 return window_controller; 98 return window_controller;
92 } 99 }
93 100
94 return extensions::WindowControllerList::GetInstance() 101 return extensions::WindowControllerList::GetInstance()
95 ->CurrentWindowForFunction(this); 102 ->CurrentWindowForFunction(*this);
96 } 103 }
97 104
98 content::WebContents* 105 content::WebContents*
99 ChromeUIThreadExtensionFunction::GetAssociatedWebContents() { 106 ChromeExtensionFunctionDetails::GetAssociatedWebContents() {
100 content::WebContents* web_contents = 107 content::WebContents* web_contents = function_->GetAssociatedWebContents();
101 UIThreadExtensionFunction::GetAssociatedWebContents();
102 if (web_contents) 108 if (web_contents)
103 return web_contents; 109 return web_contents;
104 110
105 Browser* browser = GetCurrentBrowser(); 111 Browser* browser = GetCurrentBrowser();
106 if (!browser) 112 if (!browser)
107 return NULL; 113 return NULL;
108 return browser->tab_strip_model()->GetActiveWebContents(); 114 return browser->tab_strip_model()->GetActiveWebContents();
109 } 115 }
110
111 ChromeUIThreadExtensionFunction::~ChromeUIThreadExtensionFunction() {
112 }
113
114 ChromeAsyncExtensionFunction::ChromeAsyncExtensionFunction() {
115 }
116
117 ChromeAsyncExtensionFunction::~ChromeAsyncExtensionFunction() {}
118
119 ExtensionFunction::ResponseAction ChromeAsyncExtensionFunction::Run() {
120 return RunAsync() ? RespondLater() : RespondNow(Error(error_));
121 }
122
123 // static
124 bool ChromeAsyncExtensionFunction::ValidationFailure(
125 ChromeAsyncExtensionFunction* function) {
126 return false;
127 }
128
129 ChromeSyncExtensionFunction::ChromeSyncExtensionFunction() {
130 }
131
132 ChromeSyncExtensionFunction::~ChromeSyncExtensionFunction() {}
133
134 ExtensionFunction::ResponseAction ChromeSyncExtensionFunction::Run() {
135 return RespondNow(RunSync() ? ArgumentList(results_.Pass()) : Error(error_));
136 }
137
138 // static
139 bool ChromeSyncExtensionFunction::ValidationFailure(
140 ChromeSyncExtensionFunction* function) {
141 return false;
142 }
OLDNEW
« no previous file with comments | « chrome/browser/extensions/chrome_extension_function_details.h ('k') | chrome/browser/extensions/window_controller_list.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698