Index: extensions/browser/guest_view/test_guest_view_manager.cc |
diff --git a/extensions/browser/guest_view/test_guest_view_manager.cc b/extensions/browser/guest_view/test_guest_view_manager.cc |
index ce7b12525bae6dff2f2fa04c46d2f98f35e359c4..dc81ec377dd49ab8910177ca7515c97adda74b26 100644 |
--- a/extensions/browser/guest_view/test_guest_view_manager.cc |
+++ b/extensions/browser/guest_view/test_guest_view_manager.cc |
@@ -10,6 +10,7 @@ |
#include "extensions/browser/app_window/app_window.h" |
#include "extensions/browser/app_window/app_window_registry.h" |
#include "extensions/browser/extension_host.h" |
+#include "extensions/browser/guest_view/extensions_guest_view_manager_delegate.h" |
#include "extensions/browser/process_manager.h" |
#include "extensions/common/extension.h" |
#include "extensions/common/extension_paths.h" |
@@ -17,16 +18,21 @@ |
#include "extensions/shell/test/shell_test.h" |
#include "extensions/test/extension_test_message_listener.h" |
+using guestview::GuestViewManagerDelegate; |
+ |
namespace extensions { |
-TestGuestViewManager::TestGuestViewManager(content::BrowserContext* context) |
- : GuestViewManager(context) { |
+TestGuestViewManager::TestGuestViewManager( |
+ content::BrowserContext* context, |
+ scoped_ptr<GuestViewManagerDelegate> delegate) |
+ : GuestViewManager(context, delegate.Pass()), |
+ num_guests_created_(0) { |
} |
TestGuestViewManager::~TestGuestViewManager() { |
} |
-int TestGuestViewManager::GetNumGuests() const { |
+int TestGuestViewManager::GetNumGuestsActive() const { |
return guest_web_contents_by_instance_id_.size(); |
} |
@@ -53,8 +59,12 @@ void TestGuestViewManager::WaitForGuestCreated() { |
} |
content::WebContents* TestGuestViewManager::WaitForSingleGuestCreated() { |
- if (GetNumGuests() == 0) |
+ if (!GetNumGuestsActive()) { |
+ // Guests have been created and subsequently destroyed. |
+ if (num_guests_created() > 0) |
+ return nullptr; |
WaitForGuestCreated(); |
+ } |
return GetLastGuestCreated(); |
} |
@@ -67,6 +77,8 @@ void TestGuestViewManager::AddGuest(int guest_instance_id, |
linked_ptr<content::WebContentsDestroyedWatcher>( |
new content::WebContentsDestroyedWatcher(guest_web_contents))); |
+ ++num_guests_created_; |
+ |
if (created_message_loop_runner_.get()) |
created_message_loop_runner_->Quit(); |
} |
@@ -84,17 +96,12 @@ TestGuestViewManagerFactory::~TestGuestViewManagerFactory() { |
} |
GuestViewManager* TestGuestViewManagerFactory::CreateGuestViewManager( |
- content::BrowserContext* context) { |
- return GetManager(context); |
-} |
- |
-// This function gets called from GuestViewManager::FromBrowserContext(), |
-// where test_guest_view_manager_ is assigned to a linked_ptr that takes care |
-// of deleting it. |
-TestGuestViewManager* TestGuestViewManagerFactory::GetManager( |
- content::BrowserContext* context) { |
- DCHECK(!test_guest_view_manager_); |
- test_guest_view_manager_ = new TestGuestViewManager(context); |
+ content::BrowserContext* context, |
+ scoped_ptr<guestview::GuestViewManagerDelegate> delegate) { |
+ if (!test_guest_view_manager_) { |
+ test_guest_view_manager_ = |
+ new TestGuestViewManager(context, delegate.Pass()); |
+ } |
return test_guest_view_manager_; |
} |