| Index: chrome/test/base/web_ui_browsertest.cc
|
| diff --git a/chrome/test/base/web_ui_browsertest.cc b/chrome/test/base/web_ui_browsertest.cc
|
| index d868a4298cdcabd5ee560c7f9dcaf2c4de03852c..544bf84a3233d2122865b912ced1069213a9a7e7 100644
|
| --- a/chrome/test/base/web_ui_browsertest.cc
|
| +++ b/chrome/test/base/web_ui_browsertest.cc
|
| @@ -27,6 +27,11 @@
|
| #include "chrome/test/base/test_tab_strip_model_observer.h"
|
| #include "chrome/test/base/ui_test_utils.h"
|
| #include "content/public/browser/navigation_controller.h"
|
| +#include "content/public/browser/notification_observer.h"
|
| +#include "content/public/browser/notification_registrar.h"
|
| +#include "content/public/browser/notification_service.h"
|
| +#include "content/public/browser/notification_types.h"
|
| +#include "content/public/browser/render_view_host_observer.h"
|
| #include "content/public/browser/url_data_source.h"
|
| #include "content/public/browser/web_contents.h"
|
| #include "content/public/browser/web_ui_controller.h"
|
| @@ -70,6 +75,56 @@ bool LogHandler(int severity,
|
| return false;
|
| }
|
|
|
| +class RenderViewHostInitializedObserver
|
| + : public content::RenderViewHostObserver {
|
| + public:
|
| + RenderViewHostInitializedObserver(content::RenderViewHost* render_view_host,
|
| + content::JsInjectionReadyObserver* observer)
|
| + : content::RenderViewHostObserver(render_view_host),
|
| + injection_observer_(observer) {
|
| + }
|
| +
|
| + // content::RenderViewHostObserver:
|
| + virtual void RenderViewHostInitialized() OVERRIDE {
|
| + injection_observer_->OnJsInjectionReady(render_view_host());
|
| + }
|
| +
|
| + private:
|
| + content::JsInjectionReadyObserver* injection_observer_;
|
| +
|
| + DISALLOW_COPY_AND_ASSIGN(RenderViewHostInitializedObserver);
|
| +};
|
| +
|
| +class WebUIJsInjectionReadyObserver : public content::NotificationObserver {
|
| + public:
|
| + explicit WebUIJsInjectionReadyObserver(
|
| + content::JsInjectionReadyObserver* observer)
|
| + : injection_observer_(observer) {
|
| + registrar_.Add(this, content::NOTIFICATION_RENDER_VIEW_HOST_CREATED,
|
| + content::NotificationService::AllSources());
|
| + }
|
| +
|
| + // content::NotificationObserver:
|
| + virtual void Observe(int type,
|
| + const content::NotificationSource& source,
|
| + const content::NotificationDetails& details) OVERRIDE {
|
| + DCHECK_EQ(content::NOTIFICATION_RENDER_VIEW_HOST_CREATED, type);
|
| +
|
| + rvh_observer_.reset(new RenderViewHostInitializedObserver(
|
| + content::Source<content::RenderViewHost>(source).ptr(),
|
| + injection_observer_));
|
| + }
|
| +
|
| + private:
|
| + content::JsInjectionReadyObserver* injection_observer_;
|
| +
|
| + scoped_ptr<RenderViewHostInitializedObserver> rvh_observer_;
|
| +
|
| + content::NotificationRegistrar registrar_;
|
| +
|
| + DISALLOW_COPY_AND_ASSIGN(WebUIJsInjectionReadyObserver);
|
| +};
|
| +
|
| } // namespace
|
|
|
| WebUIBrowserTest::~WebUIBrowserTest() {}
|
| @@ -210,11 +265,12 @@ void WebUIBrowserTest::PreLoadJavascriptLibraries(
|
| }
|
|
|
| void WebUIBrowserTest::BrowsePreload(const GURL& browse_to) {
|
| + WebUIJsInjectionReadyObserver injection_observer(this);
|
| content::TestNavigationObserver navigation_observer(
|
| content::Source<NavigationController>(
|
| &browser()->tab_strip_model()->
|
| GetActiveWebContents()->GetController()),
|
| - this, 1);
|
| + 1);
|
| chrome::NavigateParams params(browser(), GURL(browse_to),
|
| content::PAGE_TRANSITION_TYPED);
|
| params.disposition = CURRENT_TAB;
|
|
|