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

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

Issue 1099553002: extensions: windows: list all windows from the current profile (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Add application windows resize constraint test Created 5 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 5
6 #include <string> 6 #include <string>
7 7
8 #include "base/json/json_writer.h"
8 #include "base/memory/ref_counted.h" 9 #include "base/memory/ref_counted.h"
9 #include "base/memory/scoped_ptr.h" 10 #include "base/memory/scoped_ptr.h"
10 #include "base/prefs/pref_service.h" 11 #include "base/prefs/pref_service.h"
12 #include "base/strings/string_number_conversions.h"
11 #include "base/strings/string_util.h" 13 #include "base/strings/string_util.h"
12 #include "base/strings/stringprintf.h" 14 #include "base/strings/stringprintf.h"
13 #include "base/values.h" 15 #include "base/values.h"
16 #include "chrome/browser/apps/app_browsertest_util.h"
14 #include "chrome/browser/devtools/devtools_window_testing.h" 17 #include "chrome/browser/devtools/devtools_window_testing.h"
15 #include "chrome/browser/extensions/api/tabs/tabs_api.h" 18 #include "chrome/browser/extensions/api/tabs/tabs_api.h"
16 #include "chrome/browser/extensions/api/tabs/tabs_constants.h" 19 #include "chrome/browser/extensions/api/tabs/tabs_constants.h"
17 #include "chrome/browser/extensions/extension_function_test_utils.h" 20 #include "chrome/browser/extensions/extension_function_test_utils.h"
18 #include "chrome/browser/extensions/extension_tab_util.h" 21 #include "chrome/browser/extensions/extension_tab_util.h"
19 #include "chrome/browser/prefs/incognito_mode_prefs.h" 22 #include "chrome/browser/prefs/incognito_mode_prefs.h"
20 #include "chrome/browser/profiles/profile.h" 23 #include "chrome/browser/profiles/profile.h"
21 #include "chrome/browser/ui/browser.h" 24 #include "chrome/browser/ui/browser.h"
22 #include "chrome/browser/ui/browser_commands.h" 25 #include "chrome/browser/ui/browser_commands.h"
23 #include "chrome/browser/ui/browser_window.h" 26 #include "chrome/browser/ui/browser_window.h"
(...skipping 10 matching lines...) Expand all
34 #include "extensions/common/test_util.h" 37 #include "extensions/common/test_util.h"
35 #include "net/test/spawned_test_server/spawned_test_server.h" 38 #include "net/test/spawned_test_server/spawned_test_server.h"
36 #include "ui/gfx/geometry/rect.h" 39 #include "ui/gfx/geometry/rect.h"
37 40
38 namespace extensions { 41 namespace extensions {
39 42
40 namespace keys = tabs_constants; 43 namespace keys = tabs_constants;
41 namespace utils = extension_function_test_utils; 44 namespace utils = extension_function_test_utils;
42 45
43 namespace { 46 namespace {
44 using ExtensionTabsTest = InProcessBrowserTest; 47 using ExtensionTabsTest = PlatformAppBrowserTest;
45 48
46 class ExtensionWindowCreateTest : public InProcessBrowserTest { 49 class ExtensionWindowCreateTest : public InProcessBrowserTest {
47 public: 50 public:
48 // Runs chrome.windows.create(), expecting an error. 51 // Runs chrome.windows.create(), expecting an error.
49 std::string RunCreateWindowExpectError(const std::string& args) { 52 std::string RunCreateWindowExpectError(const std::string& args) {
50 scoped_refptr<WindowsCreateFunction> function(new WindowsCreateFunction); 53 scoped_refptr<WindowsCreateFunction> function(new WindowsCreateFunction);
51 function->set_extension(test_util::CreateEmptyExtension().get()); 54 function->set_extension(test_util::CreateEmptyExtension().get());
52 return api_test_utils::RunFunctionAndReturnError(function.get(), args, 55 return api_test_utils::RunFunctionAndReturnError(function.get(), args,
53 browser()->profile()); 56 browser()->profile());
54 } 57 }
(...skipping 141 matching lines...) Expand 10 before | Expand all | Expand 10 after
196 const size_t NUM_WINDOWS = 5; 199 const size_t NUM_WINDOWS = 5;
197 std::set<int> window_ids; 200 std::set<int> window_ids;
198 std::set<int> result_ids; 201 std::set<int> result_ids;
199 window_ids.insert(ExtensionTabUtil::GetWindowId(browser())); 202 window_ids.insert(ExtensionTabUtil::GetWindowId(browser()));
200 203
201 for (size_t i = 0; i < NUM_WINDOWS - 1; ++i) { 204 for (size_t i = 0; i < NUM_WINDOWS - 1; ++i) {
202 Browser* new_browser = CreateBrowser(browser()->profile()); 205 Browser* new_browser = CreateBrowser(browser()->profile());
203 window_ids.insert(ExtensionTabUtil::GetWindowId(new_browser)); 206 window_ids.insert(ExtensionTabUtil::GetWindowId(new_browser));
204 } 207 }
205 208
209 // Application windows should not be accessible without the
210 // windows.global permission.
211 AppWindow* app_window = CreateTestAppWindow("{}");
212
206 // Undocked DevTools window should not be accessible. 213 // Undocked DevTools window should not be accessible.
207 DevToolsWindow* devtools = DevToolsWindowTesting::OpenDevToolsWindowSync( 214 DevToolsWindow* devtools = DevToolsWindowTesting::OpenDevToolsWindowSync(
208 browser()->tab_strip_model()->GetWebContentsAt(0), false /* is_docked */); 215 browser()->tab_strip_model()->GetWebContentsAt(0), false /* is_docked */);
209 216
210 scoped_refptr<WindowsGetAllFunction> function = new WindowsGetAllFunction(); 217 scoped_refptr<WindowsGetAllFunction> function = new WindowsGetAllFunction();
211 scoped_refptr<Extension> extension(test_util::CreateEmptyExtension()); 218 scoped_refptr<Extension> extension(test_util::CreateEmptyExtension());
212 function->set_extension(extension.get()); 219 function->set_extension(extension.get());
213 scoped_ptr<base::ListValue> result(utils::ToList( 220 scoped_ptr<base::ListValue> result(utils::ToList(
214 utils::RunFunctionAndReturnSingleResult(function.get(), 221 utils::RunFunctionAndReturnSingleResult(function.get(),
215 "[]", 222 "[]",
(...skipping 29 matching lines...) Expand all
245 result_ids.insert(api_test_utils::GetInteger(result_window, "id")); 252 result_ids.insert(api_test_utils::GetInteger(result_window, "id"));
246 253
247 // "populate" was enabled so tabs should be populated. 254 // "populate" was enabled so tabs should be populated.
248 base::ListValue* tabs = NULL; 255 base::ListValue* tabs = NULL;
249 EXPECT_TRUE(result_window->GetList(keys::kTabsKey, &tabs)); 256 EXPECT_TRUE(result_window->GetList(keys::kTabsKey, &tabs));
250 } 257 }
251 // The returned ids should contain all the current browser instance ids. 258 // The returned ids should contain all the current browser instance ids.
252 EXPECT_EQ(window_ids, result_ids); 259 EXPECT_EQ(window_ids, result_ids);
253 260
254 DevToolsWindowTesting::CloseDevToolsWindowSync(devtools); 261 DevToolsWindowTesting::CloseDevToolsWindowSync(devtools);
262
263 CloseAppWindow(app_window);
264 }
265
266 IN_PROC_BROWSER_TEST_F(ExtensionTabsTest, GetAllWindowsGlobal) {
267 const size_t NUM_WINDOWS = 5;
dcheng 2015/06/29 18:15:49 Nit: kNumWindows is the naming convention for cons
llandwerlin-old 2015/06/30 10:20:47 Done.
268 std::set<int> window_ids;
269 std::set<int> result_ids;
270 window_ids.insert(ExtensionTabUtil::GetWindowId(browser()));
271
272 for (size_t i = 0; i < NUM_WINDOWS - 1; ++i) {
273 Browser* new_browser = CreateBrowser(browser()->profile());
274 window_ids.insert(ExtensionTabUtil::GetWindowId(new_browser));
275 }
276
277 // Application windows should be visible with the windows.global
278 // permission.
279 AppWindow* app_window = CreateTestAppWindow("{}");
280 window_ids.insert(app_window->session_id().id());
281
282 // Undocked DevTools window should not be accessible.
283 DevToolsWindow* devtools = DevToolsWindowTesting::OpenDevToolsWindowSync(
284 browser()->tab_strip_model()->GetWebContentsAt(0), false /* is_docked */);
285
286 scoped_refptr<WindowsGetAllFunction> function = new WindowsGetAllFunction();
287 scoped_ptr<base::DictionaryValue> global_extension_value(
288 api_test_utils::ParseDictionary(
289 "{\"name\": \"Global\", \"version\": \"1.0\", \"permissions\": "
290 "[\"windows.global\"]}"));
291 scoped_refptr<Extension> extension(
292 api_test_utils::CreateExtension(global_extension_value.get()));
293 function->set_extension(extension.get());
294 scoped_ptr<base::ListValue> result(
295 utils::ToList(utils::RunFunctionAndReturnSingleResult(function.get(),
296 "[]", browser())));
297
298 base::ListValue* windows = result.get();
299 EXPECT_EQ(NUM_WINDOWS + 1, windows->GetSize());
300 for (size_t i = 0; i < result->GetSize(); ++i) {
301 base::DictionaryValue* result_window = NULL;
302 EXPECT_TRUE(windows->GetDictionary(i, &result_window));
303 result_ids.insert(api_test_utils::GetInteger(result_window, "id"));
304
305 // "populate" was not passed in so tabs are not populated.
306 base::ListValue* tabs = NULL;
307 EXPECT_FALSE(result_window->GetList(keys::kTabsKey, &tabs));
308 }
309 // The returned ids should contain all the current browser instance ids.
310 EXPECT_EQ(window_ids, result_ids);
311
312 result_ids.clear();
313 function = new WindowsGetAllFunction();
314 function->set_extension(extension.get());
315 result.reset(utils::ToList(utils::RunFunctionAndReturnSingleResult(
316 function.get(), "[{\"populate\": true}]", browser())));
317
318 windows = result.get();
319 EXPECT_EQ(NUM_WINDOWS + 1, windows->GetSize());
320 for (size_t i = 0; i < windows->GetSize(); ++i) {
321 base::DictionaryValue* result_window = NULL;
322 EXPECT_TRUE(windows->GetDictionary(i, &result_window));
323 result_ids.insert(api_test_utils::GetInteger(result_window, "id"));
324
325 // "populate" was enabled so tabs should be populated.
326 base::ListValue* tabs = NULL;
327 EXPECT_TRUE(result_window->GetList(keys::kTabsKey, &tabs));
328 }
329 // The returned ids should contain all the current browser instance ids.
330 EXPECT_EQ(window_ids, result_ids);
331
332 DevToolsWindowTesting::CloseDevToolsWindowSync(devtools);
333
334 CloseAppWindow(app_window);
255 } 335 }
256 336
257 IN_PROC_BROWSER_TEST_F(ExtensionTabsTest, UpdateNoPermissions) { 337 IN_PROC_BROWSER_TEST_F(ExtensionTabsTest, UpdateNoPermissions) {
258 // The test empty extension has no permissions, therefore it should not get 338 // The test empty extension has no permissions, therefore it should not get
259 // tab data in the function result. 339 // tab data in the function result.
260 scoped_refptr<TabsUpdateFunction> update_tab_function( 340 scoped_refptr<TabsUpdateFunction> update_tab_function(
261 new TabsUpdateFunction()); 341 new TabsUpdateFunction());
262 scoped_refptr<Extension> empty_extension(test_util::CreateEmptyExtension()); 342 scoped_refptr<Extension> empty_extension(test_util::CreateEmptyExtension());
263 update_tab_function->set_extension(empty_extension.get()); 343 update_tab_function->set_extension(empty_extension.get());
264 // Without a callback the function will not generate a result. 344 // Without a callback the function will not generate a result.
(...skipping 301 matching lines...) Expand 10 before | Expand all | Expand 10 after
566 function = new WindowsUpdateFunction(); 646 function = new WindowsUpdateFunction();
567 function->set_extension(extension.get()); 647 function->set_extension(extension.get());
568 EXPECT_TRUE(MatchPattern( 648 EXPECT_TRUE(MatchPattern(
569 utils::RunFunctionAndReturnError( 649 utils::RunFunctionAndReturnError(
570 function.get(), 650 function.get(),
571 base::StringPrintf(kArgsMaximizedWithBounds, window_id), 651 base::StringPrintf(kArgsMaximizedWithBounds, window_id),
572 browser()), 652 browser()),
573 keys::kInvalidWindowStateError)); 653 keys::kInvalidWindowStateError));
574 } 654 }
575 655
656 IN_PROC_BROWSER_TEST_F(ExtensionTabsTest, UpdateAppWindowSizeConstraint) {
657 AppWindow* app_window = CreateTestAppWindow(
658 "{\"outerBounds\": "
659 "{\"width\": 300, \"height\": 300,"
660 " \"minWidth\": 200, \"minHeight\": 200,"
661 " \"maxWidth\": 400, \"maxHeight\": 400}}");
662
663 scoped_refptr<WindowsGetFunction> get_function = new WindowsGetFunction();
664 scoped_ptr<base::DictionaryValue> extension_value(
665 api_test_utils::ParseDictionary(
666 "{\"name\": \"Global\", \"version\": \"1.0\", \"permissions\": "
667 "[\"windows.global\"]}"));
668 scoped_refptr<Extension> extension(
669 api_test_utils::CreateExtension(extension_value.get()));
670 get_function->set_extension(extension.get());
671 scoped_ptr<base::DictionaryValue> result(
672 utils::ToDictionary(utils::RunFunctionAndReturnSingleResult(
673 get_function.get(),
674 base::StringPrintf("[%u]", app_window->session_id().id()),
675 browser())));
676
677 EXPECT_EQ(300, api_test_utils::GetInteger(result.get(), "width"));
678 EXPECT_EQ(300, api_test_utils::GetInteger(result.get(), "height"));
679
680 // Verify the min width/height of the application window are
681 // respected.
682 scoped_refptr<WindowsUpdateFunction> update_min_function =
683 new WindowsUpdateFunction();
684 result.reset(utils::ToDictionary(utils::RunFunctionAndReturnSingleResult(
685 update_min_function.get(),
686 base::StringPrintf("[%u, {\"width\": 100, \"height\": 100}]",
687 app_window->session_id().id()),
688 browser())));
689
690 EXPECT_EQ(200, api_test_utils::GetInteger(result.get(), "width"));
691 EXPECT_EQ(200, api_test_utils::GetInteger(result.get(), "height"));
692
693 // Verify the max width/height of the application window are
694 // respected.
695 scoped_refptr<WindowsUpdateFunction> update_max_function =
696 new WindowsUpdateFunction();
697 result.reset(utils::ToDictionary(utils::RunFunctionAndReturnSingleResult(
698 update_max_function.get(),
699 base::StringPrintf("[%u, {\"width\": 500, \"height\": 500}]",
700 app_window->session_id().id()),
701 browser())));
702
703 EXPECT_EQ(400, api_test_utils::GetInteger(result.get(), "width"));
704 EXPECT_EQ(400, api_test_utils::GetInteger(result.get(), "height"));
705
706 CloseAppWindow(app_window);
707 }
708
576 IN_PROC_BROWSER_TEST_F(ExtensionWindowCreateTest, AcceptState) { 709 IN_PROC_BROWSER_TEST_F(ExtensionWindowCreateTest, AcceptState) {
577 scoped_refptr<WindowsCreateFunction> function(new WindowsCreateFunction()); 710 scoped_refptr<WindowsCreateFunction> function(new WindowsCreateFunction());
578 scoped_refptr<Extension> extension(test_util::CreateEmptyExtension()); 711 scoped_refptr<Extension> extension(test_util::CreateEmptyExtension());
579 function->set_extension(extension.get()); 712 function->set_extension(extension.get());
580 713
581 scoped_ptr<base::DictionaryValue> result( 714 scoped_ptr<base::DictionaryValue> result(
582 utils::ToDictionary(utils::RunFunctionAndReturnSingleResult( 715 utils::ToDictionary(utils::RunFunctionAndReturnSingleResult(
583 function.get(), "[{\"state\": \"minimized\"}]", browser(), 716 function.get(), "[{\"state\": \"minimized\"}]", browser(),
584 utils::INCLUDE_INCOGNITO))); 717 utils::INCLUDE_INCOGNITO)));
585 int window_id = api_test_utils::GetInteger(result.get(), "id"); 718 int window_id = api_test_utils::GetInteger(result.get(), "id");
(...skipping 579 matching lines...) Expand 10 before | Expand all | Expand 10 after
1165 // Test chrome.tabs.setZoom(). 1298 // Test chrome.tabs.setZoom().
1166 error = RunSetZoomExpectError(tab_id, 3.14159); 1299 error = RunSetZoomExpectError(tab_id, 3.14159);
1167 EXPECT_TRUE(MatchPattern(error, manifest_errors::kCannotAccessChromeUrl)); 1300 EXPECT_TRUE(MatchPattern(error, manifest_errors::kCannotAccessChromeUrl));
1168 1301
1169 // chrome.tabs.setZoomSettings(). 1302 // chrome.tabs.setZoomSettings().
1170 error = RunSetZoomSettingsExpectError(tab_id, "manual", "per-tab"); 1303 error = RunSetZoomSettingsExpectError(tab_id, "manual", "per-tab");
1171 EXPECT_TRUE(MatchPattern(error, manifest_errors::kCannotAccessChromeUrl)); 1304 EXPECT_TRUE(MatchPattern(error, manifest_errors::kCannotAccessChromeUrl));
1172 } 1305 }
1173 1306
1174 } // namespace extensions 1307 } // namespace extensions
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698