Index: chrome/test/base/test_tab_strip_model_observer.cc |
diff --git a/chrome/test/base/test_tab_strip_model_observer.cc b/chrome/test/base/test_tab_strip_model_observer.cc |
index e61311688b57f15a11d50750a56bd8c69bb70f04..53917b14a8989091f79adb66aa86827533ee4970 100644 |
--- a/chrome/test/base/test_tab_strip_model_observer.cc |
+++ b/chrome/test/base/test_tab_strip_model_observer.cc |
@@ -8,14 +8,42 @@ |
#include "base/message_loop.h" |
#include "chrome/browser/printing/print_preview_dialog_controller.h" |
#include "chrome/browser/ui/tabs/tab_strip_model.h" |
+#include "content/public/browser/notification_service.h" |
#include "content/public/browser/notification_source.h" |
+#include "content/public/browser/notification_types.h" |
+#include "content/public/browser/render_view_host_observer.h" |
#include "content/public/browser/web_contents.h" |
+#include "content/public/test/js_injection_ready_observer.h" |
+ |
+class TestTabStripModelObserver::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); |
+}; |
TestTabStripModelObserver::TestTabStripModelObserver( |
TabStripModel* tab_strip_model, |
content::JsInjectionReadyObserver* js_injection_ready_observer) |
- : TestNavigationObserver(js_injection_ready_observer, 1), |
- tab_strip_model_(tab_strip_model) { |
+ : TestNavigationObserver(1), |
+ tab_strip_model_(tab_strip_model), |
+ injection_observer_(js_injection_ready_observer) { |
+ registrar_.Add(this, content::NOTIFICATION_RENDER_VIEW_HOST_CREATED, |
+ content::NotificationService::AllSources()); |
+ |
tab_strip_model_->AddObserver(this); |
} |
@@ -23,6 +51,20 @@ TestTabStripModelObserver::~TestTabStripModelObserver() { |
tab_strip_model_->RemoveObserver(this); |
} |
+void TestTabStripModelObserver::Observe( |
+ int type, |
+ const content::NotificationSource& source, |
+ const content::NotificationDetails& details) { |
+ if (type == content::NOTIFICATION_RENDER_VIEW_HOST_CREATED) { |
+ rvh_observer_.reset( |
+ new RenderViewHostInitializedObserver( |
+ content::Source<content::RenderViewHost>(source).ptr(), |
+ injection_observer_)); |
+ } else { |
+ content::TestNavigationObserver::Observe(type, source, details); |
+ } |
+} |
+ |
void TestTabStripModelObserver::TabBlockedStateChanged( |
content::WebContents* contents, int index) { |
// Need to do this later - the print preview dialog has not been created yet. |