Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(192)

Side by Side Diff: chrome/test/test_navigation_observer.cc

Issue 8586009: Allow WebUI Tests to use preLoad in HtmlDialogUI. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Addressed James' comments. Created 9 years ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « chrome/test/test_navigation_observer.h ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
(Empty)
1 // Copyright (c) 2011 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4
5 #include "chrome/test/test_navigation_observer.h"
6
7 #include "chrome/test/base/ui_test_utils.h"
8 #include "content/browser/renderer_host/render_view_host_observer.h"
9 #include "content/public/browser/notification_service.h"
10 #include "content/public/browser/notification_types.h"
11 #include "testing/gtest/include/gtest/gtest.h"
12
13 // This class observes |rvh| and calls OnJsInjectionReady() of
14 // |js_injection_ready_observer| when the time is right to inject
15 // JavaScript into the page.
16 class TestNavigationObserver::RVHOSendJS : public RenderViewHostObserver {
17 public:
18 RVHOSendJS(RenderViewHost* rvh,
19 JsInjectionReadyObserver* js_injection_ready_observer)
20 : RenderViewHostObserver(rvh),
21 js_injection_ready_observer_(js_injection_ready_observer) {
22 }
23
24 private:
25 // RenderViewHostObserver implementation.
26 virtual void RenderViewHostInitialized() OVERRIDE {
27 if (js_injection_ready_observer_)
28 js_injection_ready_observer_->OnJsInjectionReady(render_view_host());
29 }
30
31 JsInjectionReadyObserver* js_injection_ready_observer_;
32
33 DISALLOW_COPY_AND_ASSIGN(RVHOSendJS);
34 };
35
36 TestNavigationObserver::JsInjectionReadyObserver::JsInjectionReadyObserver() {
37 }
38
39 TestNavigationObserver::JsInjectionReadyObserver::~JsInjectionReadyObserver() {
40 }
41
42 TestNavigationObserver::TestNavigationObserver(
43 const content::NotificationSource& source,
44 TestNavigationObserver::JsInjectionReadyObserver*
45 js_injection_ready_observer,
46 int number_of_navigations)
47 : navigation_started_(false),
48 navigations_completed_(0),
49 number_of_navigations_(number_of_navigations),
50 js_injection_ready_observer_(js_injection_ready_observer),
51 done_(false),
52 running_(false) {
53 // When we need to do javascript injection, register for RVH creation.
54 if (js_injection_ready_observer_) {
55 registrar_.Add(this, content::NOTIFICATION_RENDER_VIEW_HOST_CREATED,
56 content::NotificationService::AllSources());
57 }
58 RegisterAsObserver(source);
59 }
60
61 TestNavigationObserver::~TestNavigationObserver() {
62 }
63
64 void TestNavigationObserver::WaitForObservation() {
65 if (!done_) {
66 EXPECT_FALSE(running_);
67 running_ = true;
68 ui_test_utils::RunMessageLoop();
69 }
70 }
71
72 TestNavigationObserver::TestNavigationObserver(
73 TestNavigationObserver::JsInjectionReadyObserver*
74 js_injection_ready_observer,
75 int number_of_navigations)
76 : navigation_started_(false),
77 navigations_completed_(0),
78 number_of_navigations_(number_of_navigations),
79 js_injection_ready_observer_(js_injection_ready_observer),
80 done_(false),
81 running_(false) {
82 // When we need to do javascript injection, register for RVH creation.
83 if (js_injection_ready_observer_) {
84 registrar_.Add(this, content::NOTIFICATION_RENDER_VIEW_HOST_CREATED,
85 content::NotificationService::AllSources());
86 }
87 }
88
89 void TestNavigationObserver::RegisterAsObserver(
90 const content::NotificationSource& source) {
91 // Register for events to know when we've finished loading the page and are
92 // ready to quit the current message loop to return control back to the
93 // waiting test.
94 registrar_.Add(this, content::NOTIFICATION_NAV_ENTRY_COMMITTED, source);
95 registrar_.Add(this, content::NOTIFICATION_LOAD_START, source);
96 registrar_.Add(this, content::NOTIFICATION_LOAD_STOP, source);
97 }
98
99 void TestNavigationObserver::Observe(
100 int type, const content::NotificationSource& source,
101 const content::NotificationDetails& details) {
102 switch (type) {
103 case content::NOTIFICATION_NAV_ENTRY_COMMITTED:
104 case content::NOTIFICATION_LOAD_START:
105 navigation_started_ = true;
106 break;
107 case content::NOTIFICATION_LOAD_STOP:
108 if (navigation_started_ &&
109 ++navigations_completed_ == number_of_navigations_) {
110 navigation_started_ = false;
111 done_ = true;
112 if (running_)
113 MessageLoopForUI::current()->Quit();
114 }
115 break;
116 case content::NOTIFICATION_RENDER_VIEW_HOST_CREATED:
117 rvho_send_js_.reset(new RVHOSendJS(
118 content::Source<RenderViewHost>(source).ptr(),
119 js_injection_ready_observer_));
120 break;
121 default:
122 NOTREACHED();
123 }
124 }
OLDNEW
« no previous file with comments | « chrome/test/test_navigation_observer.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698