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

Side by Side Diff: content/public/test/web_contents_observer_sanity_checker.cc

Issue 921443003: Fix RenderFrameCreated and RenderFrameDeleted WebContentsObserver methods (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Delete pending callbacks in ManifestManagerHost destructor. Created 5 years, 10 months 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
OLDNEW
1 // Copyright 2014 The Chromium Authors. All rights reserved. 1 // Copyright 2014 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "content/public/test/web_contents_observer_sanity_checker.h" 5 #include "content/public/test/web_contents_observer_sanity_checker.h"
6 6
7 #include "base/debug/stack_trace.h"
7 #include "base/strings/stringprintf.h" 8 #include "base/strings/stringprintf.h"
9 #include "content/common/frame_messages.h"
8 #include "content/public/browser/render_frame_host.h" 10 #include "content/public/browser/render_frame_host.h"
9 #include "content/public/browser/render_process_host.h" 11 #include "content/public/browser/render_process_host.h"
10 #include "content/public/browser/site_instance.h" 12 #include "content/public/browser/site_instance.h"
11 #include "content/public/browser/web_contents.h" 13 #include "content/public/browser/web_contents.h"
12 #include "content/public/browser/web_contents_observer.h" 14 #include "content/public/browser/web_contents_observer.h"
13 15
14 namespace content { 16 namespace content {
15 17
16 namespace { 18 namespace {
17 19
(...skipping 10 matching lines...) Expand all
28 new WebContentsObserverSanityChecker(web_contents)); 30 new WebContentsObserverSanityChecker(web_contents));
29 } 31 }
30 32
31 void WebContentsObserverSanityChecker::RenderFrameCreated( 33 void WebContentsObserverSanityChecker::RenderFrameCreated(
32 RenderFrameHost* render_frame_host) { 34 RenderFrameHost* render_frame_host) {
33 CHECK(!web_contents_destroyed_); 35 CHECK(!web_contents_destroyed_);
34 std::pair<int, int> routing_pair = 36 std::pair<int, int> routing_pair =
35 std::make_pair(render_frame_host->GetProcess()->GetID(), 37 std::make_pair(render_frame_host->GetProcess()->GetID(),
36 render_frame_host->GetRoutingID()); 38 render_frame_host->GetRoutingID());
37 bool frame_exists = !live_routes_.insert(routing_pair).second; 39 bool frame_exists = !live_routes_.insert(routing_pair).second;
38 bool dead_already = deleted_routes_.count(routing_pair) != 0; 40 deleted_routes_.erase(routing_pair);
39 41
40 if (frame_exists) { 42 if (frame_exists) {
41 // TODO(nick): Disabled because of http://crbug.com/425397
42 #if 0
43 CHECK(false) << "RenderFrameCreated called more than once for routing pair:" 43 CHECK(false) << "RenderFrameCreated called more than once for routing pair:"
44 << Format(render_frame_host); 44 << Format(render_frame_host);
45 #endif
46 } else if (dead_already) {
47 CHECK(false) << "RenderFrameCreated called for routing pair that was "
48 << "previously deleted: " << Format(render_frame_host);
49 } 45 }
50 } 46 }
51 47
52 void WebContentsObserverSanityChecker::RenderFrameDeleted( 48 void WebContentsObserverSanityChecker::RenderFrameDeleted(
53 RenderFrameHost* render_frame_host) { 49 RenderFrameHost* render_frame_host) {
54 CHECK(!web_contents_destroyed_); 50 CHECK(!web_contents_destroyed_);
55 std::pair<int, int> routing_pair = 51 std::pair<int, int> routing_pair =
56 std::make_pair(render_frame_host->GetProcess()->GetID(), 52 std::make_pair(render_frame_host->GetProcess()->GetID(),
57 render_frame_host->GetRoutingID()); 53 render_frame_host->GetRoutingID());
58 bool was_live = !!live_routes_.erase(routing_pair); 54 bool was_live = !!live_routes_.erase(routing_pair);
(...skipping 16 matching lines...) Expand all
75 71
76 void WebContentsObserverSanityChecker::RenderFrameForInterstitialPageCreated( 72 void WebContentsObserverSanityChecker::RenderFrameForInterstitialPageCreated(
77 RenderFrameHost* render_frame_host) { 73 RenderFrameHost* render_frame_host) {
78 // TODO(nick): Record this. 74 // TODO(nick): Record this.
79 } 75 }
80 76
81 void WebContentsObserverSanityChecker::RenderFrameHostChanged( 77 void WebContentsObserverSanityChecker::RenderFrameHostChanged(
82 RenderFrameHost* old_host, 78 RenderFrameHost* old_host,
83 RenderFrameHost* new_host) { 79 RenderFrameHost* new_host) {
84 CHECK(new_host); 80 CHECK(new_host);
85 if (old_host) 81 CHECK_NE(new_host, old_host);
86 AssertFrameExists(old_host); 82
87 AssertFrameExists(new_host); 83 // TODO(nasko): Implement consistency checking for RenderFrameHostChanged
84 // in follow up CL.
88 } 85 }
89 86
90 void WebContentsObserverSanityChecker::FrameDeleted( 87 void WebContentsObserverSanityChecker::FrameDeleted(
91 RenderFrameHost* render_frame_host) { 88 RenderFrameHost* render_frame_host) {
92 AssertFrameExists(render_frame_host); 89 // A frame can be deleted before RenderFrame in the renderer process is
90 // created, so there is not much that can be enforced here.
91 CHECK(!web_contents_destroyed_);
93 } 92 }
94 93
95 void WebContentsObserverSanityChecker::DidStartProvisionalLoadForFrame( 94 void WebContentsObserverSanityChecker::DidStartProvisionalLoadForFrame(
96 RenderFrameHost* render_frame_host, 95 RenderFrameHost* render_frame_host,
97 const GURL& validated_url, 96 const GURL& validated_url,
98 bool is_error_page, 97 bool is_error_page,
99 bool is_iframe_srcdoc) { 98 bool is_iframe_srcdoc) {
100 AssertFrameExists(render_frame_host); 99 AssertRenderFrameExists(render_frame_host);
101 } 100 }
102 101
103 void WebContentsObserverSanityChecker::DidCommitProvisionalLoadForFrame( 102 void WebContentsObserverSanityChecker::DidCommitProvisionalLoadForFrame(
104 RenderFrameHost* render_frame_host, 103 RenderFrameHost* render_frame_host,
105 const GURL& url, 104 const GURL& url,
106 ui::PageTransition transition_type) { 105 ui::PageTransition transition_type) {
107 AssertFrameExists(render_frame_host); 106 AssertRenderFrameExists(render_frame_host);
108 } 107 }
109 108
110 void WebContentsObserverSanityChecker::DidFailProvisionalLoad( 109 void WebContentsObserverSanityChecker::DidFailProvisionalLoad(
111 RenderFrameHost* render_frame_host, 110 RenderFrameHost* render_frame_host,
112 const GURL& validated_url, 111 const GURL& validated_url,
113 int error_code, 112 int error_code,
114 const base::string16& error_description) { 113 const base::string16& error_description) {
115 AssertFrameExists(render_frame_host); 114 AssertRenderFrameExists(render_frame_host);
116 } 115 }
117 116
118 void WebContentsObserverSanityChecker::DidNavigateMainFrame( 117 void WebContentsObserverSanityChecker::DidNavigateMainFrame(
119 const LoadCommittedDetails& details, 118 const LoadCommittedDetails& details,
120 const FrameNavigateParams& params) { 119 const FrameNavigateParams& params) {
121 AssertMainFrameExists(); 120 AssertMainFrameExists();
122 } 121 }
123 122
124 void WebContentsObserverSanityChecker::DidNavigateAnyFrame( 123 void WebContentsObserverSanityChecker::DidNavigateAnyFrame(
125 RenderFrameHost* render_frame_host, 124 RenderFrameHost* render_frame_host,
126 const LoadCommittedDetails& details, 125 const LoadCommittedDetails& details,
127 const FrameNavigateParams& params) { 126 const FrameNavigateParams& params) {
128 AssertFrameExists(render_frame_host); 127 AssertRenderFrameExists(render_frame_host);
129 } 128 }
130 129
131 void WebContentsObserverSanityChecker::DocumentAvailableInMainFrame() { 130 void WebContentsObserverSanityChecker::DocumentAvailableInMainFrame() {
132 AssertMainFrameExists(); 131 AssertMainFrameExists();
133 } 132 }
134 133
135 void WebContentsObserverSanityChecker::DocumentOnLoadCompletedInMainFrame() { 134 void WebContentsObserverSanityChecker::DocumentOnLoadCompletedInMainFrame() {
136 AssertMainFrameExists(); 135 AssertMainFrameExists();
137 } 136 }
138 137
139 void WebContentsObserverSanityChecker::DocumentLoadedInFrame( 138 void WebContentsObserverSanityChecker::DocumentLoadedInFrame(
140 RenderFrameHost* render_frame_host) { 139 RenderFrameHost* render_frame_host) {
141 AssertFrameExists(render_frame_host); 140 AssertRenderFrameExists(render_frame_host);
142 } 141 }
143 142
144 void WebContentsObserverSanityChecker::DidFinishLoad( 143 void WebContentsObserverSanityChecker::DidFinishLoad(
145 RenderFrameHost* render_frame_host, 144 RenderFrameHost* render_frame_host,
146 const GURL& validated_url) { 145 const GURL& validated_url) {
147 AssertFrameExists(render_frame_host); 146 AssertRenderFrameExists(render_frame_host);
148 } 147 }
149 148
150 void WebContentsObserverSanityChecker::DidFailLoad( 149 void WebContentsObserverSanityChecker::DidFailLoad(
151 RenderFrameHost* render_frame_host, 150 RenderFrameHost* render_frame_host,
152 const GURL& validated_url, 151 const GURL& validated_url,
153 int error_code, 152 int error_code,
154 const base::string16& error_description) { 153 const base::string16& error_description) {
155 AssertFrameExists(render_frame_host); 154 AssertRenderFrameExists(render_frame_host);
156 } 155 }
157 156
158 void WebContentsObserverSanityChecker::DidGetRedirectForResourceRequest( 157 void WebContentsObserverSanityChecker::DidGetRedirectForResourceRequest(
159 RenderFrameHost* render_frame_host, 158 RenderFrameHost* render_frame_host,
160 const ResourceRedirectDetails& details) { 159 const ResourceRedirectDetails& details) {
161 AssertFrameExists(render_frame_host); 160 AssertRenderFrameExists(render_frame_host);
162 } 161 }
163 162
164 void WebContentsObserverSanityChecker::DidOpenRequestedURL( 163 void WebContentsObserverSanityChecker::DidOpenRequestedURL(
165 WebContents* new_contents, 164 WebContents* new_contents,
166 RenderFrameHost* source_render_frame_host, 165 RenderFrameHost* source_render_frame_host,
167 const GURL& url, 166 const GURL& url,
168 const Referrer& referrer, 167 const Referrer& referrer,
169 WindowOpenDisposition disposition, 168 WindowOpenDisposition disposition,
170 ui::PageTransition transition) { 169 ui::PageTransition transition) {
171 AssertFrameExists(source_render_frame_host); 170 AssertRenderFrameExists(source_render_frame_host);
172 } 171 }
173 172
174 bool WebContentsObserverSanityChecker::OnMessageReceived( 173 bool WebContentsObserverSanityChecker::OnMessageReceived(
175 const IPC::Message& message, 174 const IPC::Message& message,
176 RenderFrameHost* render_frame_host) { 175 RenderFrameHost* render_frame_host) {
176 // TODO(nasko): FrameHostMsg_RenderProcessGone is delivered to
177 // WebContentsObserver since RenderFrameHost allows the delegate to handle
178 // the message first. This shouldn't happen, but for now handle it here.
179 // https://crbug.com/450799
180 if (message.type() == FrameHostMsg_RenderProcessGone::ID)
181 return false;
182
177 #if !defined(OS_MACOSX) 183 #if !defined(OS_MACOSX)
178 // TODO(avi): Disabled because of http://crbug.com/445054 184 // TODO(avi): Disabled because of http://crbug.com/445054
179 AssertFrameExists(render_frame_host); 185 AssertRenderFrameExists(render_frame_host);
180 #endif 186 #endif
181 return false; 187 return false;
182 } 188 }
183 189
184 void WebContentsObserverSanityChecker::WebContentsDestroyed() { 190 void WebContentsObserverSanityChecker::WebContentsDestroyed() {
185 CHECK(!web_contents_destroyed_); 191 CHECK(!web_contents_destroyed_);
186 web_contents_destroyed_ = true; 192 web_contents_destroyed_ = true;
187 } 193 }
188 194
189 WebContentsObserverSanityChecker::WebContentsObserverSanityChecker( 195 WebContentsObserverSanityChecker::WebContentsObserverSanityChecker(
190 WebContents* web_contents) 196 WebContents* web_contents)
191 : WebContentsObserver(web_contents), web_contents_destroyed_(false) { 197 : WebContentsObserver(web_contents), web_contents_destroyed_(false) {
192 // Prime the pump with the initial objects. 198 // Prime the pump with the initial objects.
199 // TODO(nasko): Investigate why this is needed.
193 RenderViewCreated(web_contents->GetRenderViewHost()); 200 RenderViewCreated(web_contents->GetRenderViewHost());
194 RenderFrameCreated(web_contents->GetMainFrame());
195 } 201 }
196 202
197 WebContentsObserverSanityChecker::~WebContentsObserverSanityChecker() { 203 WebContentsObserverSanityChecker::~WebContentsObserverSanityChecker() {
198 CHECK(web_contents_destroyed_); 204 CHECK(web_contents_destroyed_);
199 } 205 }
200 206
201 void WebContentsObserverSanityChecker::AssertFrameExists( 207 void WebContentsObserverSanityChecker::AssertRenderFrameExists(
202 RenderFrameHost* render_frame_host) { 208 RenderFrameHost* render_frame_host) {
203 CHECK(!web_contents_destroyed_); 209 CHECK(!web_contents_destroyed_);
204 std::pair<int, int> routing_pair = 210 std::pair<int, int> routing_pair =
205 std::make_pair(render_frame_host->GetProcess()->GetID(), 211 std::make_pair(render_frame_host->GetProcess()->GetID(),
206 render_frame_host->GetRoutingID()); 212 render_frame_host->GetRoutingID());
213
207 bool render_frame_created_happened = live_routes_.count(routing_pair) != 0; 214 bool render_frame_created_happened = live_routes_.count(routing_pair) != 0;
208 bool render_frame_deleted_happened = deleted_routes_.count(routing_pair) != 0; 215 bool render_frame_deleted_happened = deleted_routes_.count(routing_pair) != 0;
209 216
210 CHECK(render_frame_created_happened) 217 CHECK(render_frame_created_happened)
211 << "A RenderFrameHost pointer was passed to a WebContentsObserver " 218 << "A RenderFrameHost pointer was passed to a WebContentsObserver "
212 << "method, but WebContentsObserver::RenderFrameCreated was never called " 219 << "method, but WebContentsObserver::RenderFrameCreated was never called "
213 << "for that RenderFrameHost: " << Format(render_frame_host); 220 << "for that RenderFrameHost: " << Format(render_frame_host);
214 CHECK(!render_frame_deleted_happened) 221 CHECK(!render_frame_deleted_happened)
215 << "A RenderFrameHost pointer was passed to a WebContentsObserver " 222 << "A RenderFrameHost pointer was passed to a WebContentsObserver "
216 << "method, but WebContentsObserver::RenderFrameDeleted had already been " 223 << "method, but WebContentsObserver::RenderFrameDeleted had already been "
217 << "called on that frame:" << Format(render_frame_host); 224 << "called on that frame:" << Format(render_frame_host);
218 } 225 }
219 226
220 void WebContentsObserverSanityChecker::AssertMainFrameExists() { 227 void WebContentsObserverSanityChecker::AssertMainFrameExists() {
221 AssertFrameExists(web_contents()->GetMainFrame()); 228 AssertRenderFrameExists(web_contents()->GetMainFrame());
222 } 229 }
223 230
224 std::string WebContentsObserverSanityChecker::Format( 231 std::string WebContentsObserverSanityChecker::Format(
225 RenderFrameHost* render_frame_host) { 232 RenderFrameHost* render_frame_host) {
226 return base::StringPrintf( 233 return base::StringPrintf(
227 "(%d, %d -> %s )", render_frame_host->GetProcess()->GetID(), 234 "(%d, %d -> %s)", render_frame_host->GetProcess()->GetID(),
228 render_frame_host->GetRoutingID(), 235 render_frame_host->GetRoutingID(),
229 render_frame_host->GetSiteInstance()->GetSiteURL().spec().c_str()); 236 render_frame_host->GetSiteInstance()->GetSiteURL().spec().c_str());
230 } 237 }
231 238
232 } // namespace content 239 } // namespace content
OLDNEW
« no previous file with comments | « content/public/test/web_contents_observer_sanity_checker.h ('k') | content/test/test_render_frame_host.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698