| Index: content/browser/browser_plugin/test_browser_plugin_guest_delegate.cc
|
| diff --git a/content/browser/browser_plugin/test_browser_plugin_guest_delegate.cc b/content/browser/browser_plugin/test_browser_plugin_guest_delegate.cc
|
| index 9621ba927d3f105b8afc260f6f6d56ab03adfef8..41aa7fed44cf35f053cda66e5f102b611a4517f8 100644
|
| --- a/content/browser/browser_plugin/test_browser_plugin_guest_delegate.cc
|
| +++ b/content/browser/browser_plugin/test_browser_plugin_guest_delegate.cc
|
| @@ -11,14 +11,43 @@
|
|
|
| namespace content {
|
|
|
| +// This observer ensures that the TestBrowserPluginGuestDelegate destroys itself
|
| +// when its embedder goes away.
|
| +class TestBrowserPluginGuestDelegate::EmbedderWebContentsObserver :
|
| + public WebContentsObserver {
|
| + public:
|
| + explicit EmbedderWebContentsObserver(TestBrowserPluginGuestDelegate* guest)
|
| + : WebContentsObserver(guest->GetEmbedderWebContents()),
|
| + guest_(guest) {
|
| + }
|
| +
|
| + virtual ~EmbedderWebContentsObserver() {
|
| + }
|
| +
|
| + // WebContentsObserver implementation.
|
| + virtual void WebContentsDestroyed() OVERRIDE {
|
| + guest_->Destroy();
|
| + }
|
| +
|
| + private:
|
| + TestBrowserPluginGuestDelegate* guest_;
|
| +
|
| + DISALLOW_COPY_AND_ASSIGN(EmbedderWebContentsObserver);
|
| +};
|
| +
|
| TestBrowserPluginGuestDelegate::TestBrowserPluginGuestDelegate(
|
| BrowserPluginGuest* guest) :
|
| + WebContentsObserver(guest->GetWebContents()),
|
| guest_(guest) {
|
| }
|
|
|
| TestBrowserPluginGuestDelegate::~TestBrowserPluginGuestDelegate() {
|
| }
|
|
|
| +WebContents* TestBrowserPluginGuestDelegate::GetEmbedderWebContents() const {
|
| + return guest_->embedder_web_contents();
|
| +}
|
| +
|
| void TestBrowserPluginGuestDelegate::LoadURLWithParams(
|
| const GURL& url,
|
| const Referrer& referrer,
|
| @@ -31,9 +60,19 @@ void TestBrowserPluginGuestDelegate::LoadURLWithParams(
|
| web_contents->GetController().LoadURLWithParams(load_url_params);
|
| }
|
|
|
| +void TestBrowserPluginGuestDelegate::WebContentsDestroyed() {
|
| + delete this;
|
| +}
|
| +
|
| +void TestBrowserPluginGuestDelegate::DidAttach() {
|
| + embedder_web_contents_observer_.reset(
|
| + new EmbedderWebContentsObserver(this));
|
| +
|
| +}
|
| +
|
| void TestBrowserPluginGuestDelegate::Destroy() {
|
| if (!destruction_callback_.is_null())
|
| - destruction_callback_.Run(guest_->GetWebContents());
|
| + destruction_callback_.Run();
|
| delete guest_->GetWebContents();
|
| }
|
|
|
|
|