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

Unified 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, 6 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 side-by-side diff with in-line comments
Download patch
Index: chrome/browser/extensions/api/tabs/tabs_test.cc
diff --git a/chrome/browser/extensions/api/tabs/tabs_test.cc b/chrome/browser/extensions/api/tabs/tabs_test.cc
index e45f3074b1ca6694966b0d772b35e508b8a5aa69..c7410452d9c81f43dfbb54b921e7cc0d82fdcf63 100644
--- a/chrome/browser/extensions/api/tabs/tabs_test.cc
+++ b/chrome/browser/extensions/api/tabs/tabs_test.cc
@@ -5,12 +5,15 @@
#include <string>
+#include "base/json/json_writer.h"
#include "base/memory/ref_counted.h"
#include "base/memory/scoped_ptr.h"
#include "base/prefs/pref_service.h"
+#include "base/strings/string_number_conversions.h"
#include "base/strings/string_util.h"
#include "base/strings/stringprintf.h"
#include "base/values.h"
+#include "chrome/browser/apps/app_browsertest_util.h"
#include "chrome/browser/devtools/devtools_window_testing.h"
#include "chrome/browser/extensions/api/tabs/tabs_api.h"
#include "chrome/browser/extensions/api/tabs/tabs_constants.h"
@@ -41,7 +44,7 @@ namespace keys = tabs_constants;
namespace utils = extension_function_test_utils;
namespace {
-using ExtensionTabsTest = InProcessBrowserTest;
+using ExtensionTabsTest = PlatformAppBrowserTest;
class ExtensionWindowCreateTest : public InProcessBrowserTest {
public:
@@ -203,6 +206,10 @@ IN_PROC_BROWSER_TEST_F(ExtensionTabsTest, GetAllWindows) {
window_ids.insert(ExtensionTabUtil::GetWindowId(new_browser));
}
+ // Application windows should not be accessible without the
+ // windows.global permission.
+ AppWindow* app_window = CreateTestAppWindow("{}");
+
// Undocked DevTools window should not be accessible.
DevToolsWindow* devtools = DevToolsWindowTesting::OpenDevToolsWindowSync(
browser()->tab_strip_model()->GetWebContentsAt(0), false /* is_docked */);
@@ -252,6 +259,79 @@ IN_PROC_BROWSER_TEST_F(ExtensionTabsTest, GetAllWindows) {
EXPECT_EQ(window_ids, result_ids);
DevToolsWindowTesting::CloseDevToolsWindowSync(devtools);
+
+ CloseAppWindow(app_window);
+}
+
+IN_PROC_BROWSER_TEST_F(ExtensionTabsTest, GetAllWindowsGlobal) {
+ 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.
+ std::set<int> window_ids;
+ std::set<int> result_ids;
+ window_ids.insert(ExtensionTabUtil::GetWindowId(browser()));
+
+ for (size_t i = 0; i < NUM_WINDOWS - 1; ++i) {
+ Browser* new_browser = CreateBrowser(browser()->profile());
+ window_ids.insert(ExtensionTabUtil::GetWindowId(new_browser));
+ }
+
+ // Application windows should be visible with the windows.global
+ // permission.
+ AppWindow* app_window = CreateTestAppWindow("{}");
+ window_ids.insert(app_window->session_id().id());
+
+ // Undocked DevTools window should not be accessible.
+ DevToolsWindow* devtools = DevToolsWindowTesting::OpenDevToolsWindowSync(
+ browser()->tab_strip_model()->GetWebContentsAt(0), false /* is_docked */);
+
+ scoped_refptr<WindowsGetAllFunction> function = new WindowsGetAllFunction();
+ scoped_ptr<base::DictionaryValue> global_extension_value(
+ api_test_utils::ParseDictionary(
+ "{\"name\": \"Global\", \"version\": \"1.0\", \"permissions\": "
+ "[\"windows.global\"]}"));
+ scoped_refptr<Extension> extension(
+ api_test_utils::CreateExtension(global_extension_value.get()));
+ function->set_extension(extension.get());
+ scoped_ptr<base::ListValue> result(
+ utils::ToList(utils::RunFunctionAndReturnSingleResult(function.get(),
+ "[]", browser())));
+
+ base::ListValue* windows = result.get();
+ EXPECT_EQ(NUM_WINDOWS + 1, windows->GetSize());
+ for (size_t i = 0; i < result->GetSize(); ++i) {
+ base::DictionaryValue* result_window = NULL;
+ EXPECT_TRUE(windows->GetDictionary(i, &result_window));
+ result_ids.insert(api_test_utils::GetInteger(result_window, "id"));
+
+ // "populate" was not passed in so tabs are not populated.
+ base::ListValue* tabs = NULL;
+ EXPECT_FALSE(result_window->GetList(keys::kTabsKey, &tabs));
+ }
+ // The returned ids should contain all the current browser instance ids.
+ EXPECT_EQ(window_ids, result_ids);
+
+ result_ids.clear();
+ function = new WindowsGetAllFunction();
+ function->set_extension(extension.get());
+ result.reset(utils::ToList(utils::RunFunctionAndReturnSingleResult(
+ function.get(), "[{\"populate\": true}]", browser())));
+
+ windows = result.get();
+ EXPECT_EQ(NUM_WINDOWS + 1, windows->GetSize());
+ for (size_t i = 0; i < windows->GetSize(); ++i) {
+ base::DictionaryValue* result_window = NULL;
+ EXPECT_TRUE(windows->GetDictionary(i, &result_window));
+ result_ids.insert(api_test_utils::GetInteger(result_window, "id"));
+
+ // "populate" was enabled so tabs should be populated.
+ base::ListValue* tabs = NULL;
+ EXPECT_TRUE(result_window->GetList(keys::kTabsKey, &tabs));
+ }
+ // The returned ids should contain all the current browser instance ids.
+ EXPECT_EQ(window_ids, result_ids);
+
+ DevToolsWindowTesting::CloseDevToolsWindowSync(devtools);
+
+ CloseAppWindow(app_window);
}
IN_PROC_BROWSER_TEST_F(ExtensionTabsTest, UpdateNoPermissions) {
@@ -573,6 +653,59 @@ IN_PROC_BROWSER_TEST_F(ExtensionTabsTest, InvalidUpdateWindowState) {
keys::kInvalidWindowStateError));
}
+IN_PROC_BROWSER_TEST_F(ExtensionTabsTest, UpdateAppWindowSizeConstraint) {
+ AppWindow* app_window = CreateTestAppWindow(
+ "{\"outerBounds\": "
+ "{\"width\": 300, \"height\": 300,"
+ " \"minWidth\": 200, \"minHeight\": 200,"
+ " \"maxWidth\": 400, \"maxHeight\": 400}}");
+
+ scoped_refptr<WindowsGetFunction> get_function = new WindowsGetFunction();
+ scoped_ptr<base::DictionaryValue> extension_value(
+ api_test_utils::ParseDictionary(
+ "{\"name\": \"Global\", \"version\": \"1.0\", \"permissions\": "
+ "[\"windows.global\"]}"));
+ scoped_refptr<Extension> extension(
+ api_test_utils::CreateExtension(extension_value.get()));
+ get_function->set_extension(extension.get());
+ scoped_ptr<base::DictionaryValue> result(
+ utils::ToDictionary(utils::RunFunctionAndReturnSingleResult(
+ get_function.get(),
+ base::StringPrintf("[%u]", app_window->session_id().id()),
+ browser())));
+
+ EXPECT_EQ(300, api_test_utils::GetInteger(result.get(), "width"));
+ EXPECT_EQ(300, api_test_utils::GetInteger(result.get(), "height"));
+
+ // Verify the min width/height of the application window are
+ // respected.
+ scoped_refptr<WindowsUpdateFunction> update_min_function =
+ new WindowsUpdateFunction();
+ result.reset(utils::ToDictionary(utils::RunFunctionAndReturnSingleResult(
+ update_min_function.get(),
+ base::StringPrintf("[%u, {\"width\": 100, \"height\": 100}]",
+ app_window->session_id().id()),
+ browser())));
+
+ EXPECT_EQ(200, api_test_utils::GetInteger(result.get(), "width"));
+ EXPECT_EQ(200, api_test_utils::GetInteger(result.get(), "height"));
+
+ // Verify the max width/height of the application window are
+ // respected.
+ scoped_refptr<WindowsUpdateFunction> update_max_function =
+ new WindowsUpdateFunction();
+ result.reset(utils::ToDictionary(utils::RunFunctionAndReturnSingleResult(
+ update_max_function.get(),
+ base::StringPrintf("[%u, {\"width\": 500, \"height\": 500}]",
+ app_window->session_id().id()),
+ browser())));
+
+ EXPECT_EQ(400, api_test_utils::GetInteger(result.get(), "width"));
+ EXPECT_EQ(400, api_test_utils::GetInteger(result.get(), "height"));
+
+ CloseAppWindow(app_window);
+}
+
IN_PROC_BROWSER_TEST_F(ExtensionWindowCreateTest, AcceptState) {
scoped_refptr<WindowsCreateFunction> function(new WindowsCreateFunction());
scoped_refptr<Extension> extension(test_util::CreateEmptyExtension());

Powered by Google App Engine
This is Rietveld 408576698