// 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 "content/browser/browser_plugin/test_guest_manager_delegate.h" #include "base/logging.h" #include "base/memory/singleton.h" #include "content/public/browser/site_instance.h" #include "content/public/browser/web_contents.h" namespace content { TestGuestManagerDelegate::TestGuestManagerDelegate() : next_instance_id_(0) { } TestGuestManagerDelegate::~TestGuestManagerDelegate() { } // static. TestGuestManagerDelegate* TestGuestManagerDelegate::GetInstance() { return Singleton<TestGuestManagerDelegate>::get(); } int TestGuestManagerDelegate::GetNextInstanceID() { return ++next_instance_id_; } void TestGuestManagerDelegate::AddGuest( int guest_instance_id, WebContents* guest_web_contents) { DCHECK(guest_web_contents_by_instance_id_.find(guest_instance_id) == guest_web_contents_by_instance_id_.end()); guest_web_contents_by_instance_id_[guest_instance_id] = guest_web_contents; } void TestGuestManagerDelegate::RemoveGuest( int guest_instance_id) { GuestInstanceMap::iterator it = guest_web_contents_by_instance_id_.find(guest_instance_id); DCHECK(it != guest_web_contents_by_instance_id_.end()); guest_web_contents_by_instance_id_.erase(it); } void TestGuestManagerDelegate::MaybeGetGuestByInstanceIDOrKill( int guest_instance_id, int embedder_render_process_id, const GuestByInstanceIDCallback& callback) { GuestInstanceMap::const_iterator it = guest_web_contents_by_instance_id_.find(guest_instance_id); if (it == guest_web_contents_by_instance_id_.end()) { callback.Run(NULL); return; } callback.Run(it->second); } SiteInstance* TestGuestManagerDelegate::GetGuestSiteInstance( const GURL& guest_site) { for (GuestInstanceMap::const_iterator it = guest_web_contents_by_instance_id_.begin(); it != guest_web_contents_by_instance_id_.end(); ++it) { if (it->second->GetSiteInstance()->GetSiteURL() == guest_site) return it->second->GetSiteInstance(); } return NULL; } bool TestGuestManagerDelegate::ForEachGuest( WebContents* embedder_web_contents, const GuestCallback& callback) { for (GuestInstanceMap::iterator it = guest_web_contents_by_instance_id_.begin(); it != guest_web_contents_by_instance_id_.end(); ++it) { WebContents* guest = it->second; if (embedder_web_contents != guest->GetEmbedderWebContents()) continue; if (callback.Run(guest)) return true; } return false; } } // namespace content