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

Unified Diff: chrome/browser/ui/browser_finder_chromeos_unittest.cc

Issue 1198313003: Fix the browser match rules. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: 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/ui/browser_finder_chromeos_unittest.cc
diff --git a/chrome/browser/ui/browser_finder_chromeos_unittest.cc b/chrome/browser/ui/browser_finder_chromeos_unittest.cc
new file mode 100644
index 0000000000000000000000000000000000000000..6057f05f4828051fb071a12cc03c13a6a68373a4
--- /dev/null
+++ b/chrome/browser/ui/browser_finder_chromeos_unittest.cc
@@ -0,0 +1,194 @@
+// Copyright (c) 2015 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "chrome/browser/ui/browser_finder.h"
+
+#include "chrome/browser/chromeos/login/users/fake_chrome_user_manager.h"
msw 2015/06/30 18:42:33 This doesn't appear to be used/needed.
xdai1 2015/07/01 01:06:20 Removed.
+#include "chrome/browser/chromeos/login/users/wallpaper/wallpaper_manager.h"
+#include "chrome/browser/ui/ash/multi_user/multi_user_window_manager.h"
+#include "chrome/browser/ui/ash/multi_user/multi_user_window_manager_chromeos.h"
+#include "chrome/browser/ui/browser.h"
+#include "chrome/browser/ui/browser_list.h"
msw 2015/06/30 18:42:33 This doesn't appear to be used/needed.
xdai1 2015/07/01 01:06:20 Removed.
+#include "chrome/browser/ui/browser_window.h"
+#include "chrome/test/base/browser_with_test_window_test.h"
+#include "chrome/test/base/testing_browser_process.h"
+#include "chrome/test/base/testing_profile_manager.h"
+
+namespace test {
+
+namespace {
+
+const char kTestAccount1[] = "user1@test.com";
+const char kTestAccount2[] = "user2@test.com";
+
+class TestBrowserWindowAura : public TestBrowserWindow {
msw 2015/06/30 18:42:33 Should this file include chrome/test/base/test_bro
xdai1 2015/07/01 01:06:20 It has been included in "chrome/test/base/browser_
+ public:
+ // |native_window| is owned by the caller.
+ explicit TestBrowserWindowAura(aura::Window* native_window)
+ : native_window_(native_window) {}
+ ~TestBrowserWindowAura() override {}
+
+ // TestBrowserWindow override.
+ aura::Window* GetNativeWindow() const override {
+ return native_window_.get();
+ }
+
+ Browser* browser() { return browser_.get(); }
+
+ void CreateBrowser(const Browser::CreateParams& params) {
+ Browser::CreateParams create_params = params;
+ create_params.window = this;
+ browser_.reset(new Browser(create_params));
+ }
+
+ private:
+ scoped_ptr<Browser> browser_;
+ scoped_ptr<aura::Window> native_window_;
+
+ DISALLOW_COPY_AND_ASSIGN(TestBrowserWindowAura);
+};
+
+} // namespace
+
+class BrowserFinderChromeOSTest : public BrowserWithTestWindowTest {
+ protected:
+ BrowserFinderChromeOSTest() : multi_user_window_manager_(NULL) {}
msw 2015/06/30 18:42:34 nit: nullptr
xdai1 2015/07/01 01:06:20 Done.
+
+ TestingProfile* CreateMultiUserProfile(const std::string& user_email) {
msw 2015/06/30 18:42:33 Why not inline this in the CreateProfile override
xdai1 2015/07/01 01:06:20 CreateProfile() is override from BrowserWithTestWi
+ TestingProfile* profile =
+ profile_manager()->CreateTestingProfile(user_email);
msw 2015/06/30 18:42:34 nit: use profile_manager_ and remove the accessor.
xdai1 2015/07/01 01:06:20 Done.
+ created_profiles_[profile] = user_email;
+ GetUserWindowManager()->AddUser(profile);
+ return profile;
+ }
+
+ scoped_ptr<TestBrowserWindowAura> CreateBrowserWindowWithProfile(
msw 2015/06/30 18:42:33 This and TestBrowserWindowAura seem very odd to me
xdai1 2015/07/01 01:06:21 In BrowserWithTestWindowTest, the |window_| is usu
+ Profile* profile,
+ bool is_incognito) {
+ // Create a window.
+ aura::Window* window = new aura::Window(NULL);
+ window->set_id(0);
+ window->SetType(ui::wm::WINDOW_TYPE_NORMAL);
+ window->Init(ui::LAYER_TEXTURED);
+ window->Show();
+
+ scoped_ptr<TestBrowserWindowAura> browser_window(
+ new TestBrowserWindowAura(window));
+ if (is_incognito) {
+ Browser::CreateParams params(profile->GetOffTheRecordProfile(),
+ chrome::HOST_DESKTOP_TYPE_ASH);
+ browser_window->CreateBrowser(params);
+ } else {
+ Browser::CreateParams params(profile->GetOriginalProfile(),
+ chrome::HOST_DESKTOP_TYPE_ASH);
+ browser_window->CreateBrowser(params);
+ }
+ return browser_window.Pass();
+ }
+
+ chrome::MultiUserWindowManagerChromeOS* GetUserWindowManager() {
+ if (!multi_user_window_manager_) {
+ multi_user_window_manager_ =
+ new chrome::MultiUserWindowManagerChromeOS(kTestAccount1);
+ multi_user_window_manager_->Init();
+ chrome::MultiUserWindowManager::SetInstanceForTest(
+ multi_user_window_manager_,
+ chrome::MultiUserWindowManager::MULTI_PROFILE_MODE_SEPARATED);
+ }
+ return multi_user_window_manager_;
+ }
+
+ private:
+ void SetUp() override {
+ profile_manager_.reset(
+ new TestingProfileManager(TestingBrowserProcess::GetGlobal()));
+ ASSERT_TRUE(profile_manager_->SetUp());
+ profile_manager_->SetLoggedIn(true);
+ chromeos::WallpaperManager::Initialize();
msw 2015/06/30 18:42:33 q: why do we need this?
xdai1 2015/07/01 01:06:20 This will be used in CreateMultiUserProfile() func
+ BrowserWithTestWindowTest::SetUp();
+ }
+
+ void TearDown() override {
+ chrome::MultiUserWindowManager::DeleteInstance();
+ BrowserWithTestWindowTest::TearDown();
+ chromeos::WallpaperManager::Shutdown();
+ for (ProfileToNameMap::iterator it = created_profiles_.begin();
+ it != created_profiles_.end(); ++it) {
+ profile_manager_->DeleteTestingProfile(it->second);
+ }
+ }
+
+ TestingProfileManager* profile_manager() { return profile_manager_.get(); }
+
+ // Override BrowserWithTestWindowTest.
+ TestingProfile* CreateProfile() override {
+ return CreateMultiUserProfile(kTestAccount1);
+ }
+ void DestroyProfile(TestingProfile* profile) override {
+ ProfileToNameMap::iterator it = created_profiles_.find(profile);
+ DCHECK(it != created_profiles_.end());
+ profile_manager_->DeleteTestingProfile(it->second);
+ created_profiles_.erase(it);
+ }
+
+ scoped_ptr<TestingProfileManager> profile_manager_;
+ chrome::MultiUserWindowManagerChromeOS* multi_user_window_manager_;
+
+ typedef std::map<Profile*, std::string> ProfileToNameMap;
msw 2015/06/30 18:42:33 Why is this needed? Can't you just use GetProfileU
xdai1 2015/07/01 01:06:20 Removed this and maintained a raw pointer of the s
+ ProfileToNameMap created_profiles_;
+};
+
+// Test the matching rules for incognito browser.
msw 2015/06/30 18:42:33 nit: this comment doesn't add much value, remove i
xdai1 2015/07/01 01:06:21 Done.
+TEST_F(BrowserFinderChromeOSTest, IncognitoBrowserMatchTest) {
+ // GetBrowserCount() use kMatchAll to find all browser windows for profile().
+ EXPECT_EQ(1u,
+ chrome::GetBrowserCount(profile(), chrome::HOST_DESKTOP_TYPE_ASH));
+ EXPECT_TRUE(
+ chrome::FindAnyBrowser(profile(), true, chrome::HOST_DESKTOP_TYPE_ASH));
+ EXPECT_TRUE(
+ chrome::FindAnyBrowser(profile(), false, chrome::HOST_DESKTOP_TYPE_ASH));
+ set_browser(nullptr);
+
+ scoped_ptr<TestBrowserWindowAura> incognito_browser_window =
+ CreateBrowserWindowWithProfile(profile(), true);
+ // Incognito windows are excluded in GetBrowserCount() because kMatchAll
+ // doesn't match original profile of the browser with the given profile.
+ EXPECT_EQ(0u,
+ chrome::GetBrowserCount(profile(), chrome::HOST_DESKTOP_TYPE_ASH));
+ EXPECT_TRUE(
+ chrome::FindAnyBrowser(profile(), true, chrome::HOST_DESKTOP_TYPE_ASH));
+ EXPECT_FALSE(
+ chrome::FindAnyBrowser(profile(), false, chrome::HOST_DESKTOP_TYPE_ASH));
+}
+
+TEST_F(BrowserFinderChromeOSTest, MultiProfileBrowserMatchTest) {
msw 2015/06/30 18:42:33 nit: name this test something like "FindBrowserOwn
xdai1 2015/07/01 01:06:20 Done.
+ set_browser(nullptr);
+
+ // Add another profile.
+ CreateMultiUserProfile(kTestAccount2);
+
+ scoped_ptr<TestBrowserWindowAura> browser_window =
+ CreateBrowserWindowWithProfile(profile(), false);
+ GetUserWindowManager()->SetWindowOwner(browser_window->GetNativeWindow(),
+ kTestAccount1);
+ EXPECT_EQ(1u,
+ chrome::GetBrowserCount(profile(), chrome::HOST_DESKTOP_TYPE_ASH));
+ EXPECT_TRUE(
+ chrome::FindAnyBrowser(profile(), true, chrome::HOST_DESKTOP_TYPE_ASH));
+ EXPECT_TRUE(
+ chrome::FindAnyBrowser(profile(), false, chrome::HOST_DESKTOP_TYPE_ASH));
+
+ // Move the browser window to another user's desktop. Then no window should
+ // be avaiable for the current profile.
msw 2015/06/30 18:42:33 nit: available
xdai1 2015/07/01 01:06:21 Done.
+ GetUserWindowManager()->ShowWindowForUser(browser_window->GetNativeWindow(),
+ kTestAccount2);
+ EXPECT_EQ(0u,
+ chrome::GetBrowserCount(profile(), chrome::HOST_DESKTOP_TYPE_ASH));
+ EXPECT_FALSE(
+ chrome::FindAnyBrowser(profile(), true, chrome::HOST_DESKTOP_TYPE_ASH));
+ EXPECT_FALSE(
+ chrome::FindAnyBrowser(profile(), false, chrome::HOST_DESKTOP_TYPE_ASH));
+}
+
+} // namespace test

Powered by Google App Engine
This is Rietveld 408576698