Chromium Code Reviews| Index: chrome/browser/apps/guest_view/web_view_interactive_browsertest.cc |
| diff --git a/chrome/browser/apps/guest_view/web_view_interactive_browsertest.cc b/chrome/browser/apps/guest_view/web_view_interactive_browsertest.cc |
| index 89a60997976470f8c1fc120b2984a3ea84c76637..216a8e3a3b93a9c2a2d2ca69fe1a395bef838d04 100644 |
| --- a/chrome/browser/apps/guest_view/web_view_interactive_browsertest.cc |
| +++ b/chrome/browser/apps/guest_view/web_view_interactive_browsertest.cc |
| @@ -23,9 +23,11 @@ |
| #include "content/public/test/browser_test_utils.h" |
| #include "extensions/browser/app_window/app_window.h" |
| #include "extensions/browser/app_window/app_window_registry.h" |
| +#include "extensions/browser/guest_view/extensions_guest_view_manager_delegate.h" |
| #include "extensions/browser/guest_view/guest_view_base.h" |
| #include "extensions/browser/guest_view/guest_view_manager.h" |
| #include "extensions/browser/guest_view/guest_view_manager_factory.h" |
| +#include "extensions/browser/guest_view/test_guest_view_manager.h" |
| #include "extensions/test/extension_test_message_listener.h" |
| #include "net/test/embedded_test_server/embedded_test_server.h" |
| #include "ui/base/ime/composition_text.h" |
| @@ -34,88 +36,9 @@ |
| #include "ui/events/keycodes/keyboard_codes.h" |
| using extensions::AppWindow; |
| - |
| -class TestGuestViewManager : public extensions::GuestViewManager { |
| - public: |
| - explicit TestGuestViewManager(content::BrowserContext* context) |
| - : GuestViewManager(context), |
| - guest_add_count_(0), |
| - guest_remove_count_(0), |
| - web_contents_(NULL) {} |
| - |
| - content::WebContents* WaitForGuestAdded() { |
| - if (web_contents_) |
| - return web_contents_; |
| - |
| - add_message_loop_runner_ = new content::MessageLoopRunner; |
| - add_message_loop_runner_->Run(); |
| - return web_contents_; |
| - } |
| - |
| - // Waits so that at least |expected_remove_count| guests' creation |
| - // has been seen by this manager. |
| - void WaitForGuestRemoved(size_t expected_remove_count) { |
| - if (guest_remove_count_ >= expected_remove_count) |
| - return; |
| - |
| - remove_message_loop_runner_ = new content::MessageLoopRunner; |
| - remove_message_loop_runner_->Run(); |
| - } |
| - |
| - size_t guest_add_count() { return guest_add_count_; } |
| - |
| - private: |
| - // GuestViewManager override: |
| - void AddGuest(int guest_instance_id, |
| - content::WebContents* guest_web_contents) override { |
| - GuestViewManager::AddGuest(guest_instance_id, guest_web_contents); |
| - web_contents_ = guest_web_contents; |
| - ++guest_add_count_; |
| - |
| - if (add_message_loop_runner_.get()) |
| - add_message_loop_runner_->Quit(); |
| - } |
| - |
| - void RemoveGuest(int guest_instance_id) override { |
| - GuestViewManager::RemoveGuest(guest_instance_id); |
| - ++guest_remove_count_; |
| - |
| - if (remove_message_loop_runner_.get()) |
| - remove_message_loop_runner_->Quit(); |
| - } |
| - |
| - size_t guest_add_count_; |
| - size_t guest_remove_count_; |
| - content::WebContents* web_contents_; |
| - scoped_refptr<content::MessageLoopRunner> add_message_loop_runner_; |
| - scoped_refptr<content::MessageLoopRunner> remove_message_loop_runner_; |
| -}; |
| - |
| -// Test factory for creating test instances of GuestViewManager. |
| -class TestGuestViewManagerFactory : public extensions::GuestViewManagerFactory { |
| - public: |
| - TestGuestViewManagerFactory() : |
| - test_guest_view_manager_(NULL) {} |
| - |
| - ~TestGuestViewManagerFactory() override {} |
| - |
| - extensions::GuestViewManager* CreateGuestViewManager( |
| - content::BrowserContext* context) override { |
| - return GetManager(context); |
| - } |
| - |
| - TestGuestViewManager* GetManager(content::BrowserContext* context) { |
| - if (!test_guest_view_manager_) { |
| - test_guest_view_manager_ = new TestGuestViewManager(context); |
| - } |
| - return test_guest_view_manager_; |
| - } |
| - |
| - private: |
| - TestGuestViewManager* test_guest_view_manager_; |
| - |
| - DISALLOW_COPY_AND_ASSIGN(TestGuestViewManagerFactory); |
| -}; |
| +using extensions::ExtensionsGuestViewManagerDelegate; |
| +using extensions::GuestViewManager; |
| +using extensions::TestGuestViewManager; |
| class WebViewInteractiveTest |
| : public extensions::PlatformAppBrowserTest { |
| @@ -129,8 +52,25 @@ class WebViewInteractiveTest |
| extensions::GuestViewManager::set_factory_for_testing(&factory_); |
| } |
| + void RunTestOnMainThreadLoop() override { |
| + extensions::PlatformAppBrowserTest::RunTestOnMainThreadLoop(); |
| + GetGuestViewManager()->WaitForAllGuestsDeleted(); |
|
Fady Samuel
2015/04/24 01:31:24
Note to self: browser() may be undefined at this p
Fady Samuel
2015/04/24 04:37:48
Done.
|
| + } |
| + |
| TestGuestViewManager* GetGuestViewManager() { |
| - return factory_.GetManager(browser()->profile()); |
| + TestGuestViewManager* manager = static_cast<TestGuestViewManager*>( |
| + TestGuestViewManager::FromBrowserContext(browser()->profile())); |
| + // TestGuestViewManager::WaitForSingleGuestCreated may and will get called |
| + // before a guest is created. |
| + if (!manager) { |
| + manager = static_cast<TestGuestViewManager*>( |
| + GuestViewManager::CreateWithDelegate( |
| + browser()->profile(), |
| + scoped_ptr<guestview::GuestViewManagerDelegate>( |
| + new ExtensionsGuestViewManagerDelegate( |
| + browser()->profile())))); |
| + } |
| + return manager; |
| } |
| void MoveMouseInsideWindowWithListener(gfx::Point point, |
| @@ -284,11 +224,9 @@ class WebViewInteractiveTest |
| ASSERT_TRUE(done_listener); |
| ASSERT_TRUE(done_listener->WaitUntilSatisfied()); |
| - guest_web_contents_ = GetGuestViewManager()->WaitForGuestAdded(); |
| + guest_web_contents_ = GetGuestViewManager()->WaitForSingleGuestCreated(); |
| } |
| - void RunTest(const std::string& app_name) { |
| - } |
| void SetupTest(const std::string& app_name, |
| const std::string& guest_url_spec) { |
| ASSERT_TRUE(StartEmbeddedTestServer()); |
| @@ -547,7 +485,7 @@ class WebViewInteractiveTest |
| } |
| protected: |
| - TestGuestViewManagerFactory factory_; |
| + extensions::TestGuestViewManagerFactory factory_; |
| content::WebContents* guest_web_contents_; |
| content::WebContents* embedder_web_contents_; |
| gfx::Point corner_; |
| @@ -900,13 +838,13 @@ IN_PROC_BROWSER_TEST_F(WebViewInteractiveTest, |
| TestHelper("testNewWindowOpenerDestroyedWhileUnattached", |
| "web_view/newwindow", |
| NEEDS_TEST_SERVER); |
| - ASSERT_EQ(2u, GetGuestViewManager()->guest_add_count()); |
| + ASSERT_EQ(2, GetGuestViewManager()->num_guests_created()); |
| // We have two guests in this test, one is the intial one, the other |
| // is the newwindow one. |
| // Before the embedder goes away, both the guests should go away. |
| // This ensures that unattached guests are gone if opener is gone. |
| - GetGuestViewManager()->WaitForGuestRemoved(2u); |
| + GetGuestViewManager()->WaitForAllGuestsDeleted(); |
| } |
| IN_PROC_BROWSER_TEST_F(WebViewInteractiveTest, ExecuteCode) { |