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

Side by Side Diff: chrome/browser/extensions/api/tabs/tabs.cc

Issue 10735061: Move ExtensionWindowController and related into extensions namespace (Closed) Base URL: http://git.chromium.org/chromium/src.git@master
Patch Set: Latest master for cq Created 8 years, 5 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/extensions/api/tabs/tabs.h" 5 #include "chrome/browser/extensions/api/tabs/tabs.h"
6 6
7 #include <algorithm> 7 #include <algorithm>
8 #include <limits> 8 #include <limits>
9 #include <vector> 9 #include <vector>
10 10
11 #include "base/base64.h" 11 #include "base/base64.h"
12 #include "base/bind.h" 12 #include "base/bind.h"
13 #include "base/logging.h" 13 #include "base/logging.h"
14 #include "base/memory/ref_counted_memory.h" 14 #include "base/memory/ref_counted_memory.h"
15 #include "base/message_loop.h" 15 #include "base/message_loop.h"
16 #include "base/stl_util.h" 16 #include "base/stl_util.h"
17 #include "base/string16.h" 17 #include "base/string16.h"
18 #include "base/string_number_conversions.h" 18 #include "base/string_number_conversions.h"
19 #include "base/string_util.h" 19 #include "base/string_util.h"
20 #include "base/stringprintf.h" 20 #include "base/stringprintf.h"
21 #include "base/utf_string_conversions.h" 21 #include "base/utf_string_conversions.h"
22 #include "chrome/browser/extensions/api/tabs/tabs_constants.h" 22 #include "chrome/browser/extensions/api/tabs/tabs_constants.h"
23 #include "chrome/browser/extensions/extension_function_dispatcher.h" 23 #include "chrome/browser/extensions/extension_function_dispatcher.h"
24 #include "chrome/browser/extensions/extension_function_util.h" 24 #include "chrome/browser/extensions/extension_function_util.h"
25 #include "chrome/browser/extensions/extension_host.h" 25 #include "chrome/browser/extensions/extension_host.h"
26 #include "chrome/browser/extensions/extension_service.h" 26 #include "chrome/browser/extensions/extension_service.h"
27 #include "chrome/browser/extensions/tab_helper.h" 27 #include "chrome/browser/extensions/tab_helper.h"
28 #include "chrome/browser/extensions/extension_tab_util.h" 28 #include "chrome/browser/extensions/extension_tab_util.h"
29 #include "chrome/browser/extensions/extension_window_controller.h"
30 #include "chrome/browser/extensions/extension_window_list.h"
31 #include "chrome/browser/extensions/script_executor.h" 29 #include "chrome/browser/extensions/script_executor.h"
30 #include "chrome/browser/extensions/window_controller.h"
31 #include "chrome/browser/extensions/window_controller_list.h"
32 #include "chrome/browser/prefs/incognito_mode_prefs.h" 32 #include "chrome/browser/prefs/incognito_mode_prefs.h"
33 #include "chrome/browser/profiles/profile.h" 33 #include "chrome/browser/profiles/profile.h"
34 #include "chrome/browser/sessions/restore_tab_helper.h" 34 #include "chrome/browser/sessions/restore_tab_helper.h"
35 #include "chrome/browser/translate/translate_tab_helper.h" 35 #include "chrome/browser/translate/translate_tab_helper.h"
36 #include "chrome/browser/ui/browser.h" 36 #include "chrome/browser/ui/browser.h"
37 #include "chrome/browser/ui/browser_commands.h" 37 #include "chrome/browser/ui/browser_commands.h"
38 #include "chrome/browser/ui/browser_finder.h" 38 #include "chrome/browser/ui/browser_finder.h"
39 #include "chrome/browser/ui/browser_list.h" 39 #include "chrome/browser/ui/browser_list.h"
40 #include "chrome/browser/ui/browser_navigator.h" 40 #include "chrome/browser/ui/browser_navigator.h"
41 #include "chrome/browser/ui/browser_tabstrip.h" 41 #include "chrome/browser/ui/browser_tabstrip.h"
(...skipping 48 matching lines...) Expand 10 before | Expand all | Expand 10 after
90 namespace errors = extension_manifest_errors; 90 namespace errors = extension_manifest_errors;
91 namespace keys = extensions::tabs_constants; 91 namespace keys = extensions::tabs_constants;
92 92
93 using content::NavigationController; 93 using content::NavigationController;
94 using content::NavigationEntry; 94 using content::NavigationEntry;
95 using content::OpenURLParams; 95 using content::OpenURLParams;
96 using content::Referrer; 96 using content::Referrer;
97 using content::RenderViewHost; 97 using content::RenderViewHost;
98 using content::WebContents; 98 using content::WebContents;
99 using extensions::ScriptExecutor; 99 using extensions::ScriptExecutor;
100 using extensions::WindowController;
101 using extensions::WindowControllerList;
100 102
101 const int CaptureVisibleTabFunction::kDefaultQuality = 90; 103 const int CaptureVisibleTabFunction::kDefaultQuality = 90;
102 104
103 namespace { 105 namespace {
104 106
105 // |error_message| can optionally be passed in a will be set with an appropriate 107 // |error_message| can optionally be passed in a will be set with an appropriate
106 // message if the window cannot be found by id. 108 // message if the window cannot be found by id.
107 Browser* GetBrowserInProfileWithId(Profile* profile, 109 Browser* GetBrowserInProfileWithId(Profile* profile,
108 const int window_id, 110 const int window_id,
109 bool include_incognito, 111 bool include_incognito,
(...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after
142 if (!*browser) { 144 if (!*browser) {
143 function->SetError(error); 145 function->SetError(error);
144 return false; 146 return false;
145 } 147 }
146 } 148 }
147 return true; 149 return true;
148 } 150 }
149 151
150 bool GetWindowFromWindowID(UIThreadExtensionFunction* function, 152 bool GetWindowFromWindowID(UIThreadExtensionFunction* function,
151 int window_id, 153 int window_id,
152 ExtensionWindowController** controller) { 154 WindowController** controller) {
153 if (window_id == extension_misc::kCurrentWindowId) { 155 if (window_id == extension_misc::kCurrentWindowId) {
154 ExtensionWindowController* extension_window_controller = 156 WindowController* extension_window_controller =
155 function->dispatcher()->delegate()->GetExtensionWindowController(); 157 function->dispatcher()->delegate()->GetExtensionWindowController();
156 // If there is a window controller associated with this extension, use that. 158 // If there is a window controller associated with this extension, use that.
157 if (extension_window_controller) { 159 if (extension_window_controller) {
158 *controller = extension_window_controller; 160 *controller = extension_window_controller;
159 } else { 161 } else {
160 // Otherwise get the focused or most recently added window. 162 // Otherwise get the focused or most recently added window.
161 *controller = ExtensionWindowList::GetInstance()-> 163 *controller = WindowControllerList::GetInstance()->
162 CurrentWindowForFunction(function); 164 CurrentWindowForFunction(function);
163 } 165 }
164 if (!(*controller)) { 166 if (!(*controller)) {
165 function->SetError(keys::kNoCurrentWindowError); 167 function->SetError(keys::kNoCurrentWindowError);
166 return false; 168 return false;
167 } 169 }
168 } else { 170 } else {
169 *controller = ExtensionWindowList::GetInstance()->FindWindowForFunctionById( 171 *controller = WindowControllerList::GetInstance()->
170 function, window_id); 172 FindWindowForFunctionById(function, window_id);
171 if (!(*controller)) { 173 if (!(*controller)) {
172 function->SetError(ExtensionErrorUtils::FormatErrorMessage( 174 function->SetError(ExtensionErrorUtils::FormatErrorMessage(
173 keys::kWindowNotFoundError, base::IntToString(window_id))); 175 keys::kWindowNotFoundError, base::IntToString(window_id)));
174 return false; 176 return false;
175 } 177 }
176 } 178 }
177 return true; 179 return true;
178 } 180 }
179 // |error_message| can optionally be passed in and will be set with an 181 // |error_message| can optionally be passed in and will be set with an
180 // appropriate message if the tab cannot be found by id. 182 // appropriate message if the tab cannot be found by id.
(...skipping 68 matching lines...) Expand 10 before | Expand all | Expand 10 after
249 // Windows --------------------------------------------------------------------- 251 // Windows ---------------------------------------------------------------------
250 252
251 bool GetWindowFunction::RunImpl() { 253 bool GetWindowFunction::RunImpl() {
252 scoped_ptr<Get::Params> params(Get::Params::Create(*args_)); 254 scoped_ptr<Get::Params> params(Get::Params::Create(*args_));
253 EXTENSION_FUNCTION_VALIDATE(params.get()); 255 EXTENSION_FUNCTION_VALIDATE(params.get());
254 256
255 bool populate_tabs = false; 257 bool populate_tabs = false;
256 if (params->get_info.get() && params->get_info->populate.get()) 258 if (params->get_info.get() && params->get_info->populate.get())
257 populate_tabs = *params->get_info->populate; 259 populate_tabs = *params->get_info->populate;
258 260
259 ExtensionWindowController* controller; 261 WindowController* controller;
260 if (!GetWindowFromWindowID(this, params->window_id, &controller)) 262 if (!GetWindowFromWindowID(this, params->window_id, &controller))
261 return false; 263 return false;
262 264
263 if (populate_tabs) 265 if (populate_tabs)
264 SetResult(controller->CreateWindowValueWithTabs()); 266 SetResult(controller->CreateWindowValueWithTabs());
265 else 267 else
266 SetResult(controller->CreateWindowValue()); 268 SetResult(controller->CreateWindowValue());
267 return true; 269 return true;
268 } 270 }
269 271
270 bool GetCurrentWindowFunction::RunImpl() { 272 bool GetCurrentWindowFunction::RunImpl() {
271 scoped_ptr<GetCurrent::Params> params(GetCurrent::Params::Create(*args_)); 273 scoped_ptr<GetCurrent::Params> params(GetCurrent::Params::Create(*args_));
272 EXTENSION_FUNCTION_VALIDATE(params.get()); 274 EXTENSION_FUNCTION_VALIDATE(params.get());
273 275
274 bool populate_tabs = false; 276 bool populate_tabs = false;
275 if (params->get_info.get() && params->get_info->populate.get()) 277 if (params->get_info.get() && params->get_info->populate.get())
276 populate_tabs = *params->get_info->populate; 278 populate_tabs = *params->get_info->populate;
277 279
278 ExtensionWindowController* controller; 280 WindowController* controller;
279 if (!GetWindowFromWindowID(this, 281 if (!GetWindowFromWindowID(this,
280 extension_misc::kCurrentWindowId, 282 extension_misc::kCurrentWindowId,
281 &controller)) { 283 &controller)) {
282 return false; 284 return false;
283 } 285 }
284 if (populate_tabs) 286 if (populate_tabs)
285 SetResult(controller->CreateWindowValueWithTabs()); 287 SetResult(controller->CreateWindowValueWithTabs());
286 else 288 else
287 SetResult(controller->CreateWindowValue()); 289 SetResult(controller->CreateWindowValue());
288 return true; 290 return true;
289 } 291 }
290 292
291 bool GetLastFocusedWindowFunction::RunImpl() { 293 bool GetLastFocusedWindowFunction::RunImpl() {
292 scoped_ptr<GetLastFocused::Params> params( 294 scoped_ptr<GetLastFocused::Params> params(
293 GetLastFocused::Params::Create(*args_)); 295 GetLastFocused::Params::Create(*args_));
294 EXTENSION_FUNCTION_VALIDATE(params.get()); 296 EXTENSION_FUNCTION_VALIDATE(params.get());
295 297
296 bool populate_tabs = false; 298 bool populate_tabs = false;
297 if (params->get_info.get() && params->get_info->populate.get()) 299 if (params->get_info.get() && params->get_info->populate.get())
298 populate_tabs = *params->get_info->populate; 300 populate_tabs = *params->get_info->populate;
299 301
300 // Note: currently this returns the last active browser. If we decide to 302 // Note: currently this returns the last active browser. If we decide to
301 // include other window types (e.g. panels), we will need to add logic to 303 // include other window types (e.g. panels), we will need to add logic to
302 // ExtensionWindowList that mirrors the active behavior of BrowserList. 304 // WindowControllerList that mirrors the active behavior of BrowserList.
303 Browser* browser = browser::FindAnyBrowser( 305 Browser* browser = browser::FindAnyBrowser(
304 profile(), include_incognito()); 306 profile(), include_incognito());
305 if (!browser || !browser->window()) { 307 if (!browser || !browser->window()) {
306 error_ = keys::kNoLastFocusedWindowError; 308 error_ = keys::kNoLastFocusedWindowError;
307 return false; 309 return false;
308 } 310 }
309 ExtensionWindowController* controller = 311 WindowController* controller =
310 browser->extension_window_controller(); 312 browser->extension_window_controller();
311 if (populate_tabs) 313 if (populate_tabs)
312 SetResult(controller->CreateWindowValueWithTabs()); 314 SetResult(controller->CreateWindowValueWithTabs());
313 else 315 else
314 SetResult(controller->CreateWindowValue()); 316 SetResult(controller->CreateWindowValue());
315 return true; 317 return true;
316 } 318 }
317 319
318 bool GetAllWindowsFunction::RunImpl() { 320 bool GetAllWindowsFunction::RunImpl() {
319 scoped_ptr<GetAll::Params> params(GetAll::Params::Create(*args_)); 321 scoped_ptr<GetAll::Params> params(GetAll::Params::Create(*args_));
320 EXTENSION_FUNCTION_VALIDATE(params.get()); 322 EXTENSION_FUNCTION_VALIDATE(params.get());
321 323
322 bool populate_tabs = false; 324 bool populate_tabs = false;
323 if (params->get_info.get() && params->get_info->populate.get()) 325 if (params->get_info.get() && params->get_info->populate.get())
324 populate_tabs = *params->get_info->populate; 326 populate_tabs = *params->get_info->populate;
325 327
326 ListValue* window_list = new ListValue(); 328 ListValue* window_list = new ListValue();
327 const ExtensionWindowList::WindowList& windows = 329 const WindowControllerList::ControllerList& windows =
328 ExtensionWindowList::GetInstance()->windows(); 330 WindowControllerList::GetInstance()->windows();
329 for (ExtensionWindowList::WindowList::const_iterator iter = 331 for (WindowControllerList::ControllerList::const_iterator iter =
330 windows.begin(); 332 windows.begin();
331 iter != windows.end(); ++iter) { 333 iter != windows.end(); ++iter) {
332 if (!this->CanOperateOnWindow(*iter)) 334 if (!this->CanOperateOnWindow(*iter))
333 continue; 335 continue;
334 if (populate_tabs) 336 if (populate_tabs)
335 window_list->Append((*iter)->CreateWindowValueWithTabs()); 337 window_list->Append((*iter)->CreateWindowValueWithTabs());
336 else 338 else
337 window_list->Append((*iter)->CreateWindowValue()); 339 window_list->Append((*iter)->CreateWindowValue());
338 } 340 }
339 SetResult(window_list); 341 SetResult(window_list);
(...skipping 303 matching lines...) Expand 10 before | Expand all | Expand 10 after
643 645
644 return true; 646 return true;
645 } 647 }
646 648
647 bool UpdateWindowFunction::RunImpl() { 649 bool UpdateWindowFunction::RunImpl() {
648 int window_id = extension_misc::kUnknownWindowId; 650 int window_id = extension_misc::kUnknownWindowId;
649 EXTENSION_FUNCTION_VALIDATE(args_->GetInteger(0, &window_id)); 651 EXTENSION_FUNCTION_VALIDATE(args_->GetInteger(0, &window_id));
650 DictionaryValue* update_props; 652 DictionaryValue* update_props;
651 EXTENSION_FUNCTION_VALIDATE(args_->GetDictionary(1, &update_props)); 653 EXTENSION_FUNCTION_VALIDATE(args_->GetDictionary(1, &update_props));
652 654
653 ExtensionWindowController* controller; 655 WindowController* controller;
654 if (!GetWindowFromWindowID(this, window_id, &controller)) 656 if (!GetWindowFromWindowID(this, window_id, &controller))
655 return false; 657 return false;
656 658
657 ui::WindowShowState show_state = ui::SHOW_STATE_DEFAULT; // No change. 659 ui::WindowShowState show_state = ui::SHOW_STATE_DEFAULT; // No change.
658 std::string state_str; 660 std::string state_str;
659 if (update_props->HasKey(keys::kShowStateKey)) { 661 if (update_props->HasKey(keys::kShowStateKey)) {
660 EXTENSION_FUNCTION_VALIDATE(update_props->GetString(keys::kShowStateKey, 662 EXTENSION_FUNCTION_VALIDATE(update_props->GetString(keys::kShowStateKey,
661 &state_str)); 663 &state_str));
662 if (state_str == keys::kShowStateValueNormal) { 664 if (state_str == keys::kShowStateValueNormal) {
663 show_state = ui::SHOW_STATE_NORMAL; 665 show_state = ui::SHOW_STATE_NORMAL;
(...skipping 113 matching lines...) Expand 10 before | Expand all | Expand 10 after
777 779
778 SetResult(controller->CreateWindowValue()); 780 SetResult(controller->CreateWindowValue());
779 781
780 return true; 782 return true;
781 } 783 }
782 784
783 bool RemoveWindowFunction::RunImpl() { 785 bool RemoveWindowFunction::RunImpl() {
784 int window_id = -1; 786 int window_id = -1;
785 EXTENSION_FUNCTION_VALIDATE(args_->GetInteger(0, &window_id)); 787 EXTENSION_FUNCTION_VALIDATE(args_->GetInteger(0, &window_id));
786 788
787 ExtensionWindowController* controller; 789 WindowController* controller;
788 if (!GetWindowFromWindowID(this, window_id, &controller)) 790 if (!GetWindowFromWindowID(this, window_id, &controller))
789 return false; 791 return false;
790 792
791 ExtensionWindowController::Reason reason; 793 WindowController::Reason reason;
792 if (!controller->CanClose(&reason)) { 794 if (!controller->CanClose(&reason)) {
793 if (reason == ExtensionWindowController::REASON_NOT_EDITABLE) 795 if (reason == WindowController::REASON_NOT_EDITABLE)
794 error_ = keys::kTabStripNotEditableError; 796 error_ = keys::kTabStripNotEditableError;
795 return false; 797 return false;
796 } 798 }
797 controller->window()->Close(); 799 controller->window()->Close();
798 return true; 800 return true;
799 } 801 }
800 802
801 // Tabs ------------------------------------------------------------------------ 803 // Tabs ------------------------------------------------------------------------
802 804
803 bool GetSelectedTabFunction::RunImpl() { 805 bool GetSelectedTabFunction::RunImpl() {
(...skipping 1005 matching lines...) Expand 10 before | Expand all | Expand 10 after
1809 // called for every API call the extension made. 1811 // called for every API call the extension made.
1810 GotLanguage(language); 1812 GotLanguage(language);
1811 } 1813 }
1812 1814
1813 void DetectTabLanguageFunction::GotLanguage(const std::string& language) { 1815 void DetectTabLanguageFunction::GotLanguage(const std::string& language) {
1814 SetResult(Value::CreateStringValue(language.c_str())); 1816 SetResult(Value::CreateStringValue(language.c_str()));
1815 SendResponse(true); 1817 SendResponse(true);
1816 1818
1817 Release(); // Balanced in Run() 1819 Release(); // Balanced in Run()
1818 } 1820 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698