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

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: nit Created 5 years, 4 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 6bb27097ff2a4817d707f5c5335dbab8fbc120f9..3d86ad114dec65448299d3e1d28b139f7fd07961 100644
--- a/chrome/browser/extensions/api/tabs/tabs_test.cc
+++ b/chrome/browser/extensions/api/tabs/tabs_test.cc
@@ -13,6 +13,7 @@
#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"
@@ -26,6 +27,7 @@
#include "chrome/browser/ui/browser_commands.h"
#include "chrome/browser/ui/browser_window.h"
#include "chrome/browser/ui/tabs/tab_strip_model.h"
+#include "chrome/browser/ui/views/frame/browser_view.h"
#include "chrome/browser/ui/zoom/chrome_zoom_level_prefs.h"
#include "chrome/test/base/ui_test_utils.h"
#include "content/public/browser/browser_context.h"
@@ -33,12 +35,17 @@
#include "content/public/common/page_zoom.h"
#include "content/public/common/url_constants.h"
#include "extensions/browser/api_test_utils.h"
+#include "extensions/browser/app_window/app_window.h"
+#include "extensions/browser/app_window/app_window_registry.h"
+#include "extensions/browser/app_window/native_app_window.h"
#include "extensions/common/manifest_constants.h"
#include "extensions/common/test_util.h"
#include "extensions/test/extension_test_message_listener.h"
#include "extensions/test/result_catcher.h"
#include "net/test/spawned_test_server/spawned_test_server.h"
#include "ui/gfx/geometry/rect.h"
+#include "ui/views/widget/widget.h"
+#include "ui/views/widget/widget_observer.h"
namespace extensions {
@@ -46,7 +53,7 @@ namespace keys = tabs_constants;
namespace utils = extension_function_test_utils;
namespace {
-using ExtensionTabsTest = ExtensionApiTest;
+using ExtensionTabsTest = PlatformAppBrowserTest;
class ExtensionWindowCreateTest : public InProcessBrowserTest {
public:
@@ -84,26 +91,6 @@ int GetWindowId(base::DictionaryValue* window) {
} // namespace
-IN_PROC_BROWSER_TEST_F(ExtensionTabsTest, WindowTypes) {
- Browser* normal_browser = new Browser(Browser::CreateParams(
- browser()->profile(), browser()->host_desktop_type()));
- EXPECT_EQ(keys::kWindowTypeValueNormal,
- normal_browser->extension_window_controller()->GetWindowTypeText());
-
- Browser* popup_browser = new Browser(
- Browser::CreateParams(Browser::TYPE_POPUP, browser()->profile(),
- browser()->host_desktop_type()));
- EXPECT_EQ(keys::kWindowTypeValuePopup,
- popup_browser->extension_window_controller()->GetWindowTypeText());
-
- DevToolsWindow* devtools = DevToolsWindowTesting::OpenDevToolsWindowSync(
- browser()->tab_strip_model()->GetWebContentsAt(0), false /* is_docked */);
- EXPECT_EQ(keys::kWindowTypeValueDevTools, DevToolsWindowTesting::Get(devtools)
- ->browser()
- ->extension_window_controller()
- ->GetWindowTypeText());
-}
-
IN_PROC_BROWSER_TEST_F(ExtensionTabsTest, GetWindow) {
int window_id = ExtensionTabUtil::GetWindowId(browser());
@@ -203,6 +190,22 @@ IN_PROC_BROWSER_TEST_F(ExtensionTabsTest, GetWindow) {
browser(),
utils::INCLUDE_INCOGNITO)));
EXPECT_TRUE(api_test_utils::GetBoolean(result.get(), "incognito"));
+
+ // DevTools window.
+ DevToolsWindow* devtools = DevToolsWindowTesting::OpenDevToolsWindowSync(
+ browser()->tab_strip_model()->GetWebContentsAt(0), false /* is_docked */);
+
+ function = new WindowsGetFunction();
+ function->set_extension(extension.get());
+ result.reset(utils::ToDictionary(utils::RunFunctionAndReturnSingleResult(
+ function.get(),
+ base::StringPrintf("[%u, {\"windowTypes\": [\"devtools\"]}]",
+ ExtensionTabUtil::GetWindowId(
+ DevToolsWindowTesting::Get(devtools)->browser())),
+ browser(), utils::INCLUDE_INCOGNITO)));
+ EXPECT_EQ("devtools", api_test_utils::GetString(result.get(), "type"));
+
+ DevToolsWindowTesting::CloseDevToolsWindowSync(devtools);
}
IN_PROC_BROWSER_TEST_F(ExtensionTabsTest, GetCurrentWindow) {
@@ -257,7 +260,12 @@ IN_PROC_BROWSER_TEST_F(ExtensionTabsTest, GetAllWindows) {
window_ids.insert(ExtensionTabUtil::GetWindowId(new_browser));
}
- // Undocked DevTools window should not be accessible.
+ // Application windows should not be accessible, unless allWindowTypes is set
+ // to true.
+ AppWindow* app_window = CreateTestAppWindow("{}");
+
+ // Undocked DevTools window should not be accessible, unless allWindowTypes is
+ // set to true.
DevToolsWindow* devtools = DevToolsWindowTesting::OpenDevToolsWindowSync(
browser()->tab_strip_model()->GetWebContentsAt(0), false /* is_docked */);
@@ -270,8 +278,8 @@ IN_PROC_BROWSER_TEST_F(ExtensionTabsTest, GetAllWindows) {
browser())));
base::ListValue* windows = result.get();
- EXPECT_EQ(NUM_WINDOWS, windows->GetSize());
- for (size_t i = 0; i < NUM_WINDOWS; ++i) {
+ EXPECT_EQ(window_ids.size(), windows->GetSize());
+ for (size_t i = 0; i < windows->GetSize(); ++i) {
base::DictionaryValue* result_window = nullptr;
EXPECT_TRUE(windows->GetDictionary(i, &result_window));
result_ids.insert(GetWindowId(result_window));
@@ -292,7 +300,7 @@ IN_PROC_BROWSER_TEST_F(ExtensionTabsTest, GetAllWindows) {
browser())));
windows = result.get();
- EXPECT_EQ(NUM_WINDOWS, windows->GetSize());
+ EXPECT_EQ(window_ids.size(), windows->GetSize());
for (size_t i = 0; i < windows->GetSize(); ++i) {
base::DictionaryValue* result_window = nullptr;
EXPECT_TRUE(windows->GetDictionary(i, &result_window));
@@ -302,10 +310,88 @@ IN_PROC_BROWSER_TEST_F(ExtensionTabsTest, GetAllWindows) {
base::ListValue* tabs = nullptr;
EXPECT_TRUE(result_window->GetList(keys::kTabsKey, &tabs));
}
- // The returned ids should contain all the current browser instance ids.
+ // The returned ids should contain all the current app, browser and
+ // devtools instance ids.
EXPECT_EQ(window_ids, result_ids);
DevToolsWindowTesting::CloseDevToolsWindowSync(devtools);
+
+ CloseAppWindow(app_window);
+}
+
+IN_PROC_BROWSER_TEST_F(ExtensionTabsTest, GetAllWindowsAllTypes) {
+ const size_t NUM_WINDOWS = 5;
+ 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 accessible.
+ AppWindow* app_window = CreateTestAppWindow("{}");
+ window_ids.insert(app_window->session_id().id());
+
+ // Undocked DevTools window should be accessible too.
+ DevToolsWindow* devtools = DevToolsWindowTesting::OpenDevToolsWindowSync(
+ browser()->tab_strip_model()->GetWebContentsAt(0), false /* is_docked */);
+ window_ids.insert(ExtensionTabUtil::GetWindowId(
+ DevToolsWindowTesting::Get(devtools)->browser()));
+
+ scoped_refptr<WindowsGetAllFunction> function = new WindowsGetAllFunction();
+ scoped_refptr<Extension> extension(test_util::CreateEmptyExtension());
+ function->set_extension(extension.get());
+ scoped_ptr<base::ListValue> result(
+ utils::ToList(utils::RunFunctionAndReturnSingleResult(
+ function.get(),
+ "[{\"windowTypes\": [\"app\", \"devtools\", \"normal\", \"panel\", "
+ "\"popup\"]}]",
+ browser())));
+
+ base::ListValue* windows = result.get();
+ EXPECT_EQ(window_ids.size(), windows->GetSize());
+ for (size_t i = 0; i < windows->GetSize(); ++i) {
+ base::DictionaryValue* result_window = nullptr;
+ EXPECT_TRUE(windows->GetDictionary(i, &result_window));
+ result_ids.insert(GetWindowId(result_window));
+
+ // "populate" was not passed in so tabs are not populated.
+ base::ListValue* tabs = nullptr;
+ EXPECT_FALSE(result_window->GetList(keys::kTabsKey, &tabs));
+ }
+ // The returned ids should contain all the current app, browser and
+ // devtools 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, \"windowTypes\": [\"app\", \"devtools\", "
+ "\"normal\", \"panel\", \"popup\"]}]",
+ browser())));
+
+ windows = result.get();
+ EXPECT_EQ(window_ids.size(), windows->GetSize());
+ for (size_t i = 0; i < windows->GetSize(); ++i) {
+ base::DictionaryValue* result_window = nullptr;
+ EXPECT_TRUE(windows->GetDictionary(i, &result_window));
+ result_ids.insert(GetWindowId(result_window));
+
+ // "populate" was enabled so tabs should be populated.
+ base::ListValue* tabs = nullptr;
+ EXPECT_TRUE(result_window->GetList(keys::kTabsKey, &tabs));
+ }
+ // The returned ids should contain all the current app, browser and
+ // devtools instance ids.
+ EXPECT_EQ(window_ids, result_ids);
+
+ DevToolsWindowTesting::CloseDevToolsWindowSync(devtools);
+
+ CloseAppWindow(app_window);
}
IN_PROC_BROWSER_TEST_F(ExtensionTabsTest, UpdateNoPermissions) {
@@ -614,6 +700,354 @@ 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_refptr<Extension> extension(test_util::CreateEmptyExtension().get());
+ get_function->set_extension(extension.get());
+ scoped_ptr<base::DictionaryValue> result(
+ utils::ToDictionary(utils::RunFunctionAndReturnSingleResult(
+ get_function.get(),
+ base::StringPrintf("[%u, {\"windowTypes\": [\"app\"]}]",
+ 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(ExtensionTabsTest, UpdateDevToolsWindow) {
+ DevToolsWindow* devtools = DevToolsWindowTesting::OpenDevToolsWindowSync(
+ browser()->tab_strip_model()->GetWebContentsAt(0), false /* is_docked */);
+
+ scoped_refptr<WindowsGetFunction> get_function = new WindowsGetFunction();
+ scoped_refptr<Extension> extension(test_util::CreateEmptyExtension().get());
+ get_function->set_extension(extension.get());
+ scoped_ptr<base::DictionaryValue> result(
+ utils::ToDictionary(utils::RunFunctionAndReturnSingleResult(
+ get_function.get(),
+ base::StringPrintf(
+ "[%u, {\"windowTypes\": [\"devtools\"]}]",
+ ExtensionTabUtil::GetWindowId(
+ DevToolsWindowTesting::Get(devtools)->browser())),
+ browser())));
+
+ // Verify the updating width/height works.
+ int32_t new_width = api_test_utils::GetInteger(result.get(), "width") - 50;
+ int32_t new_height = api_test_utils::GetInteger(result.get(), "height") - 50;
+
+ scoped_refptr<WindowsUpdateFunction> update_function =
+ new WindowsUpdateFunction();
+ result.reset(utils::ToDictionary(utils::RunFunctionAndReturnSingleResult(
+ update_function.get(),
+ base::StringPrintf("[%u, {\"width\": %d, \"height\": %d}]",
+ ExtensionTabUtil::GetWindowId(
+ DevToolsWindowTesting::Get(devtools)->browser()),
+ new_width, new_height),
+ browser())));
+
+ EXPECT_EQ(new_width, api_test_utils::GetInteger(result.get(), "width"));
+ EXPECT_EQ(new_height, api_test_utils::GetInteger(result.get(), "height"));
+
+ DevToolsWindowTesting::CloseDevToolsWindowSync(devtools);
+}
+
+// TODO(llandwerlin): Activating a browser window and waiting for the
+// action to happen requires views::Widget which is not available on
+// MacOSX. Deactivate for now.
+#if !defined(OS_MACOSX)
+class ExtensionWindowLastFocusedTest : public ExtensionTabsTest {
+ public:
+ void SetUpOnMainThread() override;
+
+ void ActivateAppWindow(AppWindow* app_window);
+
+ void ActivateBrowserWindow(Browser* browser);
+
+ Browser* CreateBrowserWithEmptyTab(bool as_popup);
+
+ int GetTabId(const base::DictionaryValue* value) const;
+
+ base::Value* RunFunction(UIThreadExtensionFunction* function,
+ const std::string& params);
+
+ private:
+ // A helper class to wait for an AppWindow to become activated. On
+ // window system like X11, for a NativeWidget to be activated, we
+ // need to wait for the round trip communication with the X server.
+ class AppWindowActivatedWaiter : public AppWindowRegistry::Observer {
+ public:
+ AppWindowActivatedWaiter(AppWindow* app_window,
+ content::BrowserContext* browser_context)
+ : app_window_(app_window),
+ browser_context_(browser_context),
+ waiting_(false) {
+ AppWindowRegistry::Get(browser_context_)->AddObserver(this);
+ }
+ ~AppWindowActivatedWaiter() override {
+ AppWindowRegistry::Get(browser_context_)->RemoveObserver(this);
+ }
+
+ void ActivateAndWait() {
+ app_window_->GetBaseWindow()->Activate();
+ if (!app_window_->GetBaseWindow()->IsActive()) {
+ waiting_ = true;
+ content::RunMessageLoop();
+ }
+ }
+
+ // AppWindowRegistry::Observer:
+ void OnAppWindowActivated(AppWindow* app_window) override {
+ if (app_window_ == app_window && waiting_) {
+ base::MessageLoopForUI::current()->Quit();
+ waiting_ = false;
+ }
+ }
+
+ private:
+ AppWindow* app_window_;
+ content::BrowserContext* browser_context_;
+ bool waiting_;
+ };
+
+ // A helper class to wait for an views::Widget to become activated.
+ class WidgetActivatedWaiter : public views::WidgetObserver {
+ public:
+ explicit WidgetActivatedWaiter(views::Widget* widget)
+ : widget_(widget), waiting_(false) {
+ widget_->AddObserver(this);
+ }
+ ~WidgetActivatedWaiter() override { widget_->RemoveObserver(this); }
+
+ void ActivateAndWait() {
+ widget_->Activate();
+ if (!widget_->IsActive()) {
+ waiting_ = true;
+ content::RunMessageLoop();
+ }
+ }
+
+ // views::WidgetObserver:
+ void OnWidgetActivationChanged(views::Widget* widget,
+ bool active) override {
+ if (widget_ == widget && waiting_) {
+ base::MessageLoopForUI::current()->Quit();
+ waiting_ = false;
+ }
+ }
+
+ private:
+ views::Widget* widget_;
+ bool waiting_;
+ };
+
+ scoped_refptr<Extension> extension_;
+};
+
+void ExtensionWindowLastFocusedTest::SetUpOnMainThread() {
+ ExtensionTabsTest::SetUpOnMainThread();
+ extension_ = test_util::CreateEmptyExtension();
+}
+
+void ExtensionWindowLastFocusedTest::ActivateAppWindow(AppWindow* app_window) {
+ AppWindowActivatedWaiter waiter(app_window, browser()->profile());
+ waiter.ActivateAndWait();
+}
+
+void ExtensionWindowLastFocusedTest::ActivateBrowserWindow(Browser* browser) {
+ BrowserView* view = BrowserView::GetBrowserViewForBrowser(browser);
+ EXPECT_NE(nullptr, view);
+ views::Widget* widget = view->frame();
+ EXPECT_NE(nullptr, widget);
+ WidgetActivatedWaiter waiter(widget);
+ waiter.ActivateAndWait();
+}
+
+Browser* ExtensionWindowLastFocusedTest::CreateBrowserWithEmptyTab(
+ bool as_popup) {
+ Browser* new_browser;
+ if (as_popup)
+ new_browser = new Browser(
+ Browser::CreateParams(Browser::TYPE_POPUP, browser()->profile(),
+ browser()->host_desktop_type()));
+ else
+ new_browser = new Browser(Browser::CreateParams(
+ browser()->profile(), browser()->host_desktop_type()));
+ AddBlankTabAndShow(new_browser);
+ return new_browser;
+}
+
+int ExtensionWindowLastFocusedTest::GetTabId(
+ const base::DictionaryValue* value) const {
+ const base::ListValue* tabs = NULL;
+ if (!value->GetList(keys::kTabsKey, &tabs))
+ return -2;
+ const base::Value* tab = NULL;
+ if (!tabs->Get(0, &tab))
+ return -2;
+ const base::DictionaryValue* tab_dict = NULL;
+ if (!tab->GetAsDictionary(&tab_dict))
+ return -2;
+ int tab_id = 0;
+ if (!tab_dict->GetInteger(keys::kIdKey, &tab_id))
+ return -2;
+ return tab_id;
+}
+
+base::Value* ExtensionWindowLastFocusedTest::RunFunction(
+ UIThreadExtensionFunction* function,
+ const std::string& params) {
+ function->set_extension(extension_.get());
+ return utils::RunFunctionAndReturnSingleResult(function, params, browser());
+}
+
+IN_PROC_BROWSER_TEST_F(ExtensionWindowLastFocusedTest,
+ NoDevtoolsAndAppWindows) {
+ DevToolsWindow* devtools = DevToolsWindowTesting::OpenDevToolsWindowSync(
+ browser()->tab_strip_model()->GetWebContentsAt(0), false /* is_docked */);
+ {
+ int devtools_window_id = ExtensionTabUtil::GetWindowId(
+ DevToolsWindowTesting::Get(devtools)->browser());
+ ActivateBrowserWindow(DevToolsWindowTesting::Get(devtools)->browser());
+
+ scoped_refptr<WindowsGetLastFocusedFunction> function =
+ new WindowsGetLastFocusedFunction();
+ scoped_ptr<base::DictionaryValue> result(utils::ToDictionary(
+ RunFunction(function.get(), "[{\"populate\": true}]")));
+ EXPECT_NE(devtools_window_id,
+ api_test_utils::GetInteger(result.get(), "id"));
+ }
+
+ AppWindow* app_window = CreateTestAppWindow(
+ "{\"outerBounds\": "
+ "{\"width\": 300, \"height\": 300,"
+ " \"minWidth\": 200, \"minHeight\": 200,"
+ " \"maxWidth\": 400, \"maxHeight\": 400}}");
+ {
+ ActivateAppWindow(app_window);
+
+ scoped_refptr<WindowsGetLastFocusedFunction> get_current_app_function =
+ new WindowsGetLastFocusedFunction();
+ scoped_ptr<base::DictionaryValue> result(utils::ToDictionary(
+ RunFunction(get_current_app_function.get(), "[{\"populate\": true}]")));
+ int app_window_id = app_window->session_id().id();
+ EXPECT_NE(app_window_id, api_test_utils::GetInteger(result.get(), "id"));
+ }
+
+ DevToolsWindowTesting::CloseDevToolsWindowSync(devtools);
+ CloseAppWindow(app_window);
+}
+
+IN_PROC_BROWSER_TEST_F(ExtensionWindowLastFocusedTest,
+ NoTabIdForDevToolsAndAppWindows) {
+ Browser* normal_browser = CreateBrowserWithEmptyTab(false);
+ {
+ ActivateBrowserWindow(normal_browser);
+
+ scoped_refptr<WindowsGetLastFocusedFunction> function =
+ new WindowsGetLastFocusedFunction();
+ scoped_ptr<base::DictionaryValue> result(utils::ToDictionary(
+ RunFunction(function.get(), "[{\"populate\": true}]")));
+ int normal_browser_window_id =
+ ExtensionTabUtil::GetWindowId(normal_browser);
+ EXPECT_EQ(normal_browser_window_id,
+ api_test_utils::GetInteger(result.get(), "id"));
+ EXPECT_NE(-1, GetTabId(result.get()));
+ EXPECT_EQ("normal", api_test_utils::GetString(result.get(), "type"));
+ }
+
+ Browser* popup_browser = CreateBrowserWithEmptyTab(true);
+ {
+ ActivateBrowserWindow(popup_browser);
+
+ scoped_refptr<WindowsGetLastFocusedFunction> function =
+ new WindowsGetLastFocusedFunction();
+ scoped_ptr<base::DictionaryValue> result(utils::ToDictionary(
+ RunFunction(function.get(), "[{\"populate\": true}]")));
+ int popup_browser_window_id = ExtensionTabUtil::GetWindowId(popup_browser);
+ EXPECT_EQ(popup_browser_window_id,
+ api_test_utils::GetInteger(result.get(), "id"));
+ EXPECT_NE(-1, GetTabId(result.get()));
+ EXPECT_EQ("popup", api_test_utils::GetString(result.get(), "type"));
+ }
+
+ DevToolsWindow* devtools = DevToolsWindowTesting::OpenDevToolsWindowSync(
+ browser()->tab_strip_model()->GetWebContentsAt(0), false /* is_docked */);
+ {
+ ActivateBrowserWindow(DevToolsWindowTesting::Get(devtools)->browser());
+
+ scoped_refptr<WindowsGetLastFocusedFunction> function =
+ new WindowsGetLastFocusedFunction();
+ scoped_ptr<base::DictionaryValue> result(utils::ToDictionary(RunFunction(
+ function.get(),
+ "[{\"populate\": true, \"windowTypes\": [ \"devtools\" ]}]")));
+ int devtools_window_id = ExtensionTabUtil::GetWindowId(
+ DevToolsWindowTesting::Get(devtools)->browser());
+ EXPECT_EQ(devtools_window_id,
+ api_test_utils::GetInteger(result.get(), "id"));
+ EXPECT_EQ(-1, GetTabId(result.get()));
+ EXPECT_EQ("devtools", api_test_utils::GetString(result.get(), "type"));
+ }
+
+ AppWindow* app_window = CreateTestAppWindow(
+ "{\"outerBounds\": "
+ "{\"width\": 300, \"height\": 300,"
+ " \"minWidth\": 200, \"minHeight\": 200,"
+ " \"maxWidth\": 400, \"maxHeight\": 400}}");
+ {
+ ActivateAppWindow(app_window);
+
+ scoped_refptr<WindowsGetLastFocusedFunction> get_current_app_function =
+ new WindowsGetLastFocusedFunction();
+ scoped_ptr<base::DictionaryValue> result(utils::ToDictionary(
+ RunFunction(get_current_app_function.get(),
+ "[{\"populate\": true, \"windowTypes\": [ \"app\" ]}]")));
+ int app_window_id = app_window->session_id().id();
+ EXPECT_EQ(app_window_id, api_test_utils::GetInteger(result.get(), "id"));
+ EXPECT_EQ(-1, GetTabId(result.get()));
+ EXPECT_EQ("app", api_test_utils::GetString(result.get(), "type"));
+ }
+
+ chrome::CloseWindow(normal_browser);
+ chrome::CloseWindow(popup_browser);
+ DevToolsWindowTesting::CloseDevToolsWindowSync(devtools);
+ CloseAppWindow(app_window);
+}
+#endif // !defined(OS_MACOSX)
+
IN_PROC_BROWSER_TEST_F(ExtensionWindowCreateTest, AcceptState) {
scoped_refptr<WindowsCreateFunction> function(new WindowsCreateFunction());
scoped_refptr<Extension> extension(test_util::CreateEmptyExtension());
@@ -773,7 +1207,8 @@ IN_PROC_BROWSER_TEST_F(ExtensionTabsTest, DuplicateTabNoPermission) {
IN_PROC_BROWSER_TEST_F(ExtensionTabsTest, NoTabsEventOnDevTools) {
extensions::ResultCatcher catcher;
ExtensionTestMessageListener listener("ready", true);
- ASSERT_TRUE(LoadExtension(test_data_dir_.AppendASCII("tabs/no_events")));
+ ASSERT_TRUE(
+ LoadExtension(test_data_dir_.AppendASCII("api_test/tabs/no_events")));
ASSERT_TRUE(listener.WaitUntilSatisfied());
DevToolsWindow* devtools = DevToolsWindowTesting::OpenDevToolsWindowSync(
@@ -786,6 +1221,64 @@ IN_PROC_BROWSER_TEST_F(ExtensionTabsTest, NoTabsEventOnDevTools) {
DevToolsWindowTesting::CloseDevToolsWindowSync(devtools);
}
+IN_PROC_BROWSER_TEST_F(ExtensionTabsTest, NoTabsAppWindow) {
+ extensions::ResultCatcher catcher;
+ ExtensionTestMessageListener listener("ready", true);
+ ASSERT_TRUE(
+ LoadExtension(test_data_dir_.AppendASCII("api_test/tabs/no_events")));
+ ASSERT_TRUE(listener.WaitUntilSatisfied());
+
+ AppWindow* app_window = CreateTestAppWindow(
+ "{\"outerBounds\": "
+ "{\"width\": 300, \"height\": 300,"
+ " \"minWidth\": 200, \"minHeight\": 200,"
+ " \"maxWidth\": 400, \"maxHeight\": 400}}");
+
+ listener.Reply("stop");
+
+ ASSERT_TRUE(catcher.GetNextResult());
+
+ CloseAppWindow(app_window);
+}
+
+IN_PROC_BROWSER_TEST_F(ExtensionTabsTest, FilteredEvents) {
+ extensions::ResultCatcher catcher;
+ ExtensionTestMessageListener listener("ready", true);
+ ASSERT_TRUE(
+ LoadExtension(test_data_dir_.AppendASCII("api_test/windows/events")));
+ ASSERT_TRUE(listener.WaitUntilSatisfied());
+
+ AppWindow* app_window = CreateTestAppWindow(
+ "{\"outerBounds\": "
+ "{\"width\": 300, \"height\": 300,"
+ " \"minWidth\": 200, \"minHeight\": 200,"
+ " \"maxWidth\": 400, \"maxHeight\": 400}}");
+
+ Browser* browser_window = new Browser(Browser::CreateParams(
+ browser()->profile(), browser()->host_desktop_type()));
+ AddBlankTabAndShow(browser_window);
+
+ DevToolsWindow* devtools_window =
+ DevToolsWindowTesting::OpenDevToolsWindowSync(
+ browser()->tab_strip_model()->GetWebContentsAt(0),
+ false /* is_docked */);
+
+ chrome::CloseWindow(browser_window);
+ DevToolsWindowTesting::CloseDevToolsWindowSync(devtools_window);
+ CloseAppWindow(app_window);
+
+ // TODO(llandwerlin): It seems creating an app window on MacOSX
+ // won't create an activation event whereas it does on all other
+ // platform. Disable focus event tests for now.
+#if defined(OS_MACOSX)
+ listener.Reply("");
+#else
+ listener.Reply("focus");
+#endif
+
+ ASSERT_TRUE(catcher.GetNextResult());
+}
+
IN_PROC_BROWSER_TEST_F(ExtensionTabsTest, ExecuteScriptOnDevTools) {
scoped_ptr<base::DictionaryValue> test_extension_value(
api_test_utils::ParseDictionary(
« no previous file with comments | « chrome/browser/extensions/api/tabs/tabs_constants.cc ('k') | chrome/browser/extensions/api/tabs/windows_event_router.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698