blob: b52cb27f4b2f224c0f855452b99a317996b30f62 [file] [log] [blame]
// Copyright 2014 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 "extensions/browser/guest_view/test_guest_view_manager.h"
#include "base/path_service.h"
#include "base/strings/stringprintf.h"
#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/extension_host.h"
#include "extensions/browser/process_manager.h"
#include "extensions/common/extension.h"
#include "extensions/common/extension_paths.h"
#include "extensions/shell/browser/shell_extension_system.h"
#include "extensions/shell/test/shell_test.h"
#include "extensions/test/extension_test_message_listener.h"
namespace extensions {
TestGuestViewManager::TestGuestViewManager(content::BrowserContext* context)
: GuestViewManager(context) {
}
TestGuestViewManager::~TestGuestViewManager() {
}
int TestGuestViewManager::GetNumGuests() const {
return guest_web_contents_by_instance_id_.size();
}
content::WebContents* TestGuestViewManager::GetLastGuestCreated() {
content::WebContents* web_contents = nullptr;
for (int i = current_instance_id_; i >= 0; i--) {
web_contents = GetGuestByInstanceID(i);
if (web_contents) {
break;
}
}
return web_contents;
}
void TestGuestViewManager::WaitForAllGuestsDeleted() {
// Make sure that every guest that was created have been removed.
for (auto& watcher : guest_web_contents_watchers_)
watcher->Wait();
}
void TestGuestViewManager::WaitForGuestCreated() {
created_message_loop_runner_ = new content::MessageLoopRunner;
created_message_loop_runner_->Run();
}
content::WebContents* TestGuestViewManager::WaitForSingleGuestCreated() {
if (GetNumGuests() == 0)
WaitForGuestCreated();
return GetLastGuestCreated();
}
void TestGuestViewManager::AddGuest(int guest_instance_id,
content::WebContents* guest_web_contents) {
GuestViewManager::AddGuest(guest_instance_id, guest_web_contents);
guest_web_contents_watchers_.push_back(
linked_ptr<content::WebContentsDestroyedWatcher>(
new content::WebContentsDestroyedWatcher(guest_web_contents)));
if (created_message_loop_runner_.get())
created_message_loop_runner_->Quit();
}
void TestGuestViewManager::RemoveGuest(int guest_instance_id) {
GuestViewManager::RemoveGuest(guest_instance_id);
}
// Test factory for creating test instances of GuestViewManager.
TestGuestViewManagerFactory::TestGuestViewManagerFactory()
: test_guest_view_manager_(NULL) {
}
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);
return test_guest_view_manager_;
}
} // namespace extensions