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

Side by Side Diff: webkit/glue/webframeloaderclient_impl.cc

Issue 200054: Hook up WebFrameClient, replacing many WebViewDelegate methods.... (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src/
Patch Set: '' Created 11 years, 3 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 | Annotate | Revision Log
« no previous file with comments | « webkit/glue/webframeloaderclient_impl.h ('k') | webkit/glue/webview.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2006-2009 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2006-2009 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 "config.h" 5 #include "config.h"
6 6
7 #include <string> 7 #include <string>
8 #include <vector> 8 #include <vector>
9 9
10 #include "Chrome.h" 10 #include "Chrome.h"
(...skipping 14 matching lines...) Expand all
25 #include "StringExtras.h" 25 #include "StringExtras.h"
26 #include "WindowFeatures.h" 26 #include "WindowFeatures.h"
27 #undef LOG 27 #undef LOG
28 28
29 #include "base/basictypes.h" 29 #include "base/basictypes.h"
30 #include "base/logging.h" 30 #include "base/logging.h"
31 #include "base/string_util.h" 31 #include "base/string_util.h"
32 #include "net/base/mime_util.h" 32 #include "net/base/mime_util.h"
33 #include "net/base/net_errors.h" 33 #include "net/base/net_errors.h"
34 #include "webkit/api/public/WebForm.h" 34 #include "webkit/api/public/WebForm.h"
35 #include "webkit/api/public/WebFrameClient.h"
35 #include "webkit/api/public/WebPlugin.h" 36 #include "webkit/api/public/WebPlugin.h"
36 #include "webkit/api/public/WebPluginParams.h" 37 #include "webkit/api/public/WebPluginParams.h"
37 #include "webkit/api/public/WebURL.h" 38 #include "webkit/api/public/WebURL.h"
38 #include "webkit/api/public/WebURLError.h" 39 #include "webkit/api/public/WebURLError.h"
39 #include "webkit/api/public/WebVector.h" 40 #include "webkit/api/public/WebVector.h"
40 #include "webkit/api/src/WebDataSourceImpl.h" 41 #include "webkit/api/src/WebDataSourceImpl.h"
41 #include "webkit/api/src/WebPluginContainerImpl.h" 42 #include "webkit/api/src/WebPluginContainerImpl.h"
42 #include "webkit/api/src/WebPluginLoadObserver.h" 43 #include "webkit/api/src/WebPluginLoadObserver.h"
43 #include "webkit/api/src/WrappedResourceRequest.h" 44 #include "webkit/api/src/WrappedResourceRequest.h"
44 #include "webkit/api/src/WrappedResourceResponse.h" 45 #include "webkit/api/src/WrappedResourceResponse.h"
(...skipping 58 matching lines...) Expand 10 before | Expand all | Expand 10 after
103 // When the WebFrame was created, it had an extra reference given to it on 104 // When the WebFrame was created, it had an extra reference given to it on
104 // behalf of the Frame. Since the WebFrame owns us, this extra ref also 105 // behalf of the Frame. Since the WebFrame owns us, this extra ref also
105 // serves to keep us alive until the FrameLoader is done with us. The 106 // serves to keep us alive until the FrameLoader is done with us. The
106 // FrameLoader calls this method when it's going away. Therefore, we balance 107 // FrameLoader calls this method when it's going away. Therefore, we balance
107 // out that extra reference, which may cause 'this' to be deleted. 108 // out that extra reference, which may cause 'this' to be deleted.
108 webframe_->Closing(); 109 webframe_->Closing();
109 webframe_->Release(); 110 webframe_->Release();
110 } 111 }
111 112
112 void WebFrameLoaderClient::windowObjectCleared() { 113 void WebFrameLoaderClient::windowObjectCleared() {
114 if (webframe_->client())
115 webframe_->client()->didClearWindowObject(webframe_);
116
113 WebViewImpl* webview = webframe_->GetWebViewImpl(); 117 WebViewImpl* webview = webframe_->GetWebViewImpl();
114 WebViewDelegate* d = webview->delegate(); 118 if (webview) {
115 if (d) 119 WebDevToolsAgentImpl* tools_agent = webview->GetWebDevToolsAgentImpl();
116 d->WindowObjectCleared(webframe_); 120 if (tools_agent)
117 121 tools_agent->WindowObjectCleared(webframe_);
118 WebDevToolsAgentImpl* tools_agent = webview->GetWebDevToolsAgentImpl(); 122 }
119 if (tools_agent)
120 tools_agent->WindowObjectCleared(webframe_);
121 } 123 }
122 124
123 void WebFrameLoaderClient::documentElementAvailable() { 125 void WebFrameLoaderClient::documentElementAvailable() {
124 WebViewImpl* webview = webframe_->GetWebViewImpl(); 126 if (webframe_->client())
125 WebViewDelegate* d = webview->delegate(); 127 webframe_->client()->didCreateDocumentElement(webframe_);
126 if (d)
127 d->DocumentElementAvailable(webframe_);
128 } 128 }
129 129
130 void WebFrameLoaderClient::didCreateScriptContextForFrame() { 130 void WebFrameLoaderClient::didCreateScriptContextForFrame() {
131 WebViewImpl* webview = webframe_->GetWebViewImpl(); 131 WebViewImpl* webview = webframe_->GetWebViewImpl();
132 WebViewDelegate* d = webview->delegate(); 132 WebViewDelegate* d = webview->delegate();
133 if (d) 133 if (d)
134 d->DidCreateScriptContextForFrame(webframe_); 134 d->DidCreateScriptContextForFrame(webframe_);
135 } 135 }
136 136
137 void WebFrameLoaderClient::didDestroyScriptContextForFrame() { 137 void WebFrameLoaderClient::didDestroyScriptContextForFrame() {
(...skipping 51 matching lines...) Expand 10 before | Expand all | Expand 10 after
189 } 189 }
190 190
191 void WebFrameLoaderClient::detachedFromParent3() { 191 void WebFrameLoaderClient::detachedFromParent3() {
192 // Close down the proxy. The purpose of this change is to make the 192 // Close down the proxy. The purpose of this change is to make the
193 // call to ScriptController::clearWindowShell a no-op when called from 193 // call to ScriptController::clearWindowShell a no-op when called from
194 // Frame::pageDestroyed. Without this change, this call to clearWindowShell 194 // Frame::pageDestroyed. Without this change, this call to clearWindowShell
195 // will cause a crash. If you remove/modify this, just ensure that you can 195 // will cause a crash. If you remove/modify this, just ensure that you can
196 // go to a page and then navigate to a new page without getting any asserts 196 // go to a page and then navigate to a new page without getting any asserts
197 // or crashes. 197 // or crashes.
198 webframe_->frame()->script()->proxy()->clearForClose(); 198 webframe_->frame()->script()->proxy()->clearForClose();
199
200 // Drop any reference to the client since it may shortly become invalid.
201 webframe_->drop_client();
199 } 202 }
200 203
201 // This function is responsible for associating the |identifier| with a given 204 // This function is responsible for associating the |identifier| with a given
202 // subresource load. The following functions that accept an |identifier| are 205 // subresource load. The following functions that accept an |identifier| are
203 // called for each subresource, so they should not be dispatched to the 206 // called for each subresource, so they should not be dispatched to the
204 // WebFrame. 207 // WebFrame.
205 void WebFrameLoaderClient::assignIdentifierToInitialRequest( 208 void WebFrameLoaderClient::assignIdentifierToInitialRequest(
206 unsigned long identifier, DocumentLoader* loader, 209 unsigned long identifier, DocumentLoader* loader,
207 const ResourceRequest& request) { 210 const ResourceRequest& request) {
208 WebViewDelegate* d = webframe_->GetWebViewImpl()->delegate(); 211 if (webframe_->client()) {
209 if (d) {
210 WrappedResourceRequest webreq(request); 212 WrappedResourceRequest webreq(request);
211 d->AssignIdentifierToRequest(webframe_, identifier, webreq); 213 webframe_->client()->assignIdentifierToRequest(
214 webframe_, identifier, webreq);
212 } 215 }
213 } 216 }
214 217
215 // Determines whether the request being loaded by |loader| is a frame or a 218 // Determines whether the request being loaded by |loader| is a frame or a
216 // subresource. A subresource in this context is anything other than a frame -- 219 // subresource. A subresource in this context is anything other than a frame --
217 // this includes images and xmlhttp requests. It is important to note that a 220 // this includes images and xmlhttp requests. It is important to note that a
218 // subresource is NOT limited to stuff loaded through the frame's subresource 221 // subresource is NOT limited to stuff loaded through the frame's subresource
219 // loader. Synchronous xmlhttp requests for example, do not go through the 222 // loader. Synchronous xmlhttp requests for example, do not go through the
220 // subresource loader, but we still label them as TargetIsSubResource. 223 // subresource loader, but we still label them as TargetIsSubResource.
221 // 224 //
(...skipping 21 matching lines...) Expand all
243 request.setTargetType(DetermineTargetTypeFromLoader(loader)); 246 request.setTargetType(DetermineTargetTypeFromLoader(loader));
244 } 247 }
245 248
246 // FrameLoader::loadEmptyDocumentSynchronously() creates an empty document 249 // FrameLoader::loadEmptyDocumentSynchronously() creates an empty document
247 // with no URL. We don't like that, so we'll rename it to about:blank. 250 // with no URL. We don't like that, so we'll rename it to about:blank.
248 if (request.url().isEmpty()) 251 if (request.url().isEmpty())
249 request.setURL(KURL(ParsedURLString, "about:blank")); 252 request.setURL(KURL(ParsedURLString, "about:blank"));
250 if (request.firstPartyForCookies().isEmpty()) 253 if (request.firstPartyForCookies().isEmpty())
251 request.setFirstPartyForCookies(KURL(ParsedURLString, "about:blank")); 254 request.setFirstPartyForCookies(KURL(ParsedURLString, "about:blank"));
252 255
253 // Give the delegate a crack at the request. 256 // Give the WebFrameClient a crack at the request.
254 WebViewDelegate* d = webframe_->GetWebViewImpl()->delegate(); 257 if (webframe_->client()) {
255 if (d) {
256 WrappedResourceRequest webreq(request); 258 WrappedResourceRequest webreq(request);
257 WrappedResourceResponse webresp(redirect_response); 259 WrappedResourceResponse webresp(redirect_response);
258 d->WillSendRequest(webframe_, identifier, &webreq, webresp); 260 webframe_->client()->willSendRequest(
261 webframe_, identifier, webreq, webresp);
259 } 262 }
260 } 263 }
261 264
262 bool WebFrameLoaderClient::shouldUseCredentialStorage(DocumentLoader*, 265 bool WebFrameLoaderClient::shouldUseCredentialStorage(DocumentLoader*,
263 unsigned long identifier) { 266 unsigned long identifier) {
264 // FIXME 267 // FIXME
265 // Intended to pass through to a method on the resource load delegate. 268 // Intended to pass through to a method on the resource load delegate.
266 // If implemented, that method controls whether the browser should ask the 269 // If implemented, that method controls whether the browser should ask the
267 // networking layer for a stored default credential for the page (say from 270 // networking layer for a stored default credential for the page (say from
268 // the Mac OS keychain). If the method returns false, the user should be 271 // the Mac OS keychain). If the method returns false, the user should be
(...skipping 11 matching lines...) Expand all
280 } 283 }
281 284
282 void WebFrameLoaderClient::dispatchDidCancelAuthenticationChallenge( 285 void WebFrameLoaderClient::dispatchDidCancelAuthenticationChallenge(
283 DocumentLoader*, unsigned long identifier, const AuthenticationChallenge&) { 286 DocumentLoader*, unsigned long identifier, const AuthenticationChallenge&) {
284 // FIXME 287 // FIXME
285 } 288 }
286 289
287 void WebFrameLoaderClient::dispatchDidReceiveResponse(DocumentLoader* loader, 290 void WebFrameLoaderClient::dispatchDidReceiveResponse(DocumentLoader* loader,
288 unsigned long identifier, 291 unsigned long identifier,
289 const ResourceResponse& re sponse) { 292 const ResourceResponse& re sponse) {
290 WebViewDelegate* d = webframe_->GetWebViewImpl()->delegate(); 293 if (webframe_->client()) {
291 if (d) {
292 WrappedResourceResponse webresp(response); 294 WrappedResourceResponse webresp(response);
293 d->DidReceiveResponse(webframe_, identifier, webresp); 295 webframe_->client()->didReceiveResponse(webframe_, identifier, webresp);
294 } 296 }
295 } 297 }
296 298
297 void WebFrameLoaderClient::dispatchDidReceiveContentLength( 299 void WebFrameLoaderClient::dispatchDidReceiveContentLength(
298 DocumentLoader* loader, 300 DocumentLoader* loader,
299 unsigned long identifier, 301 unsigned long identifier,
300 int length_received) { 302 int length_received) {
301 } 303 }
302 304
303 // Called when a particular resource load completes 305 // Called when a particular resource load completes
304 void WebFrameLoaderClient::dispatchDidFinishLoading(DocumentLoader* loader, 306 void WebFrameLoaderClient::dispatchDidFinishLoading(DocumentLoader* loader,
305 unsigned long identifier) { 307 unsigned long identifier) {
306 WebViewDelegate* d = webframe_->GetWebViewImpl()->delegate(); 308 if (webframe_->client())
307 if (d) 309 webframe_->client()->didFinishResourceLoad(webframe_, identifier);
308 d->DidFinishLoading(webframe_, identifier);
309 } 310 }
310 311
311 void WebFrameLoaderClient::dispatchDidFailLoading(DocumentLoader* loader, 312 void WebFrameLoaderClient::dispatchDidFailLoading(DocumentLoader* loader,
312 unsigned long identifier, 313 unsigned long identifier,
313 const ResourceError& error) { 314 const ResourceError& error) {
314 WebViewImpl* webview = webframe_->GetWebViewImpl(); 315 if (webframe_->client()) {
315 if (webview && webview->delegate()) { 316 webframe_->client()->didFailResourceLoad(
316 webview->delegate()->DidFailLoadingWithError(
317 webframe_, identifier, webkit_glue::ResourceErrorToWebURLError(error)); 317 webframe_, identifier, webkit_glue::ResourceErrorToWebURLError(error));
318 } 318 }
319 } 319 }
320 320
321 void WebFrameLoaderClient::dispatchDidFinishDocumentLoad() { 321 void WebFrameLoaderClient::dispatchDidFinishDocumentLoad() {
322 WebViewImpl* webview = webframe_->GetWebViewImpl();
323 DocumentLoader* documentLoader =
324 webframe_->frame()->loader()->activeDocumentLoader();
325 WebDataSourceImpl* data_source =
326 WebDataSourceImpl::fromDocumentLoader(documentLoader);
327
328 // A frame may be reused. This call ensures we don't hold on to our password 322 // A frame may be reused. This call ensures we don't hold on to our password
329 // listeners and their associated HTMLInputElements. 323 // listeners and their associated HTMLInputElements.
330 webframe_->ClearPasswordListeners(); 324 webframe_->ClearPasswordListeners();
331 325
332 if (webview && webview->delegate()) 326 if (webframe_->client())
333 webview->delegate()->DidFinishDocumentLoadForFrame(webview, webframe_); 327 webframe_->client()->didFinishDocumentLoad(webframe_);
334 } 328 }
335 329
336 bool WebFrameLoaderClient::dispatchDidLoadResourceFromMemoryCache( 330 bool WebFrameLoaderClient::dispatchDidLoadResourceFromMemoryCache(
337 DocumentLoader* loader, 331 DocumentLoader* loader,
338 const ResourceRequest& request, 332 const ResourceRequest& request,
339 const ResourceResponse& response, 333 const ResourceResponse& response,
340 int length) { 334 int length) {
341 WebViewImpl* webview = webframe_->GetWebViewImpl(); 335 if (webframe_->client()) {
342 WebViewDelegate* d = webview->delegate();
343
344 bool result = false;
345 if (d) {
346 WrappedResourceRequest webreq(request); 336 WrappedResourceRequest webreq(request);
347 WrappedResourceResponse webresp(response); 337 WrappedResourceResponse webresp(response);
348 result = d->DidLoadResourceFromMemoryCache(webview, webreq, webresp, 338 webframe_->client()->didLoadResourceFromMemoryCache(
349 webframe_); 339 webframe_, webreq, webresp);
350 } 340 }
351 return result; 341 return false; // Do not suppress remaining notifications
352 } 342 }
353 343
354 void WebFrameLoaderClient::dispatchDidLoadResourceByXMLHttpRequest( 344 void WebFrameLoaderClient::dispatchDidLoadResourceByXMLHttpRequest(
355 unsigned long identifier, 345 unsigned long identifier,
356 const ScriptString& source) { 346 const ScriptString& source) {
357 } 347 }
358 348
359 void WebFrameLoaderClient::dispatchDidHandleOnloadEvents() { 349 void WebFrameLoaderClient::dispatchDidHandleOnloadEvents() {
360 // During the onload event of a subframe, the subframe can be removed. In 350 if (webframe_->client())
361 // that case, it has no page. This is covered by 351 webframe_->client()->didHandleOnloadEvents(webframe_);
362 // LayoutTests/fast/dom/replaceChild.html
363 if (!webframe_->frame()->page())
364 return;
365 WebViewImpl* webview = webframe_->GetWebViewImpl();
366 WebViewDelegate* d = webview->delegate();
367 if (d)
368 d->DidHandleOnloadEventsForFrame(webview, webframe_);
369 } 352 }
370 353
371 // Redirect Tracking 354 // Redirect Tracking
372 // ================= 355 // =================
373 // We want to keep track of the chain of redirects that occur during page 356 // We want to keep track of the chain of redirects that occur during page
374 // loading. There are two types of redirects, server redirects which are HTTP 357 // loading. There are two types of redirects, server redirects which are HTTP
375 // response codes, and client redirects which are document.location= and meta 358 // response codes, and client redirects which are document.location= and meta
376 // refreshes. 359 // refreshes.
377 // 360 //
378 // This outlines the callbacks that we get in different redirect situations, 361 // This outlines the callbacks that we get in different redirect situations,
(...skipping 83 matching lines...) Expand 10 before | Expand all | Expand 10 after
462 // A provisional load should have started already, which should have put an 445 // A provisional load should have started already, which should have put an
463 // entry in our redirect chain. 446 // entry in our redirect chain.
464 DCHECK(ds->hasRedirectChain()); 447 DCHECK(ds->hasRedirectChain());
465 448
466 // The URL of the destination is on the provisional data source. We also need 449 // The URL of the destination is on the provisional data source. We also need
467 // to update the redirect chain to account for this addition (we do this 450 // to update the redirect chain to account for this addition (we do this
468 // before the callback so the callback can look at the redirect chain to see 451 // before the callback so the callback can look at the redirect chain to see
469 // what happened). 452 // what happened).
470 ds->appendRedirect(ds->request().url()); 453 ds->appendRedirect(ds->request().url());
471 454
472 // Dispatch callback 455 if (webframe_->client())
473 WebViewImpl* webview = webframe_->GetWebViewImpl(); 456 webframe_->client()->didReceiveServerRedirectForProvisionalLoad(webframe_);
474 WebViewDelegate* d = webview->delegate();
475 if (d)
476 d->DidReceiveProvisionalLoadServerRedirect(webview, webframe_);
477 } 457 }
478 458
479 // Called on both success and failure of a client redirect. 459 // Called on both success and failure of a client redirect.
480 void WebFrameLoaderClient::dispatchDidCancelClientRedirect() { 460 void WebFrameLoaderClient::dispatchDidCancelClientRedirect() {
481 // No longer expecting a client redirect. 461 // No longer expecting a client redirect.
482 WebViewImpl* webview = webframe_->GetWebViewImpl(); 462 if (webframe_->client()) {
483 WebViewDelegate* d = webview ? webview->delegate() : NULL;
484 if (d) {
485 expected_client_redirect_src_ = GURL(); 463 expected_client_redirect_src_ = GURL();
486 expected_client_redirect_dest_ = GURL(); 464 expected_client_redirect_dest_ = GURL();
487 465 webframe_->client()->didCancelClientRedirect(webframe_);
488 d->DidCancelClientRedirect(webview, webframe_);
489 } 466 }
490 467
491 // No need to clear the redirect chain, since that data source has already 468 // No need to clear the redirect chain, since that data source has already
492 // been deleted by the time this function is called. 469 // been deleted by the time this function is called.
493 } 470 }
494 471
495 void WebFrameLoaderClient::dispatchWillPerformClientRedirect(const KURL& url, 472 void WebFrameLoaderClient::dispatchWillPerformClientRedirect(
496 double interval, 473 const KURL& url,
497 double fire_date) { 474 double interval,
475 double fire_date) {
498 // Tells dispatchDidStartProvisionalLoad that if it sees this item it is a 476 // Tells dispatchDidStartProvisionalLoad that if it sees this item it is a
499 // redirect and the source item should be added as the start of the chain. 477 // redirect and the source item should be added as the start of the chain.
500 WebViewImpl* webview = webframe_->GetWebViewImpl(); 478 if (webframe_->client()) {
501 WebViewDelegate* d = webview ? webview->delegate() : NULL;
502 if (d) {
503 expected_client_redirect_src_ = webframe_->url(); 479 expected_client_redirect_src_ = webframe_->url();
504 expected_client_redirect_dest_ = webkit_glue::KURLToGURL(url); 480 expected_client_redirect_dest_ = webkit_glue::KURLToGURL(url);
505 481
506 // TODO(timsteele): bug 1135512. Webkit does not properly notify us of 482 // TODO(timsteele): bug 1135512. Webkit does not properly notify us of
507 // cancelling http > file client redirects. Since the FrameLoader's policy 483 // cancelling http > file client redirects. Since the FrameLoader's policy
508 // is to never carry out such a navigation anyway, the best thing we can do 484 // is to never carry out such a navigation anyway, the best thing we can do
509 // for now to not get confused is ignore this notification. 485 // for now to not get confused is ignore this notification.
510 if (expected_client_redirect_dest_.SchemeIsFile() && 486 if (expected_client_redirect_dest_.SchemeIsFile() &&
511 (expected_client_redirect_src_.SchemeIs("http") || 487 (expected_client_redirect_src_.SchemeIs("http") ||
512 expected_client_redirect_src_.SchemeIsSecure())) { 488 expected_client_redirect_src_.SchemeIsSecure())) {
513 expected_client_redirect_src_ = GURL(); 489 expected_client_redirect_src_ = GURL();
514 expected_client_redirect_dest_ = GURL(); 490 expected_client_redirect_dest_ = GURL();
515 return; 491 return;
516 } 492 }
517 493
518 d->WillPerformClientRedirect(webview, 494 webframe_->client()->willPerformClientRedirect(
519 webframe_, 495 webframe_,
520 expected_client_redirect_src_, 496 expected_client_redirect_src_,
521 expected_client_redirect_dest_, 497 expected_client_redirect_dest_,
522 static_cast<unsigned int>(interval), 498 static_cast<unsigned int>(interval),
523 static_cast<unsigned int>(fire_date)); 499 static_cast<unsigned int>(fire_date));
524 } 500 }
525 } 501 }
526 502
527 void WebFrameLoaderClient::dispatchDidChangeLocationWithinPage() { 503 void WebFrameLoaderClient::dispatchDidChangeLocationWithinPage() {
528 // Anchor fragment navigations are not normal loads, so we need to synthesize 504 // Anchor fragment navigations are not normal loads, so we need to synthesize
529 // some events for our delegate. 505 // some events for our delegate.
530 WebViewImpl* webview = webframe_->GetWebViewImpl(); 506 WebViewImpl* webview = webframe_->GetWebViewImpl();
531 WebViewDelegate* d = webview->delegate(); 507 WebViewDelegate* d = webview->delegate();
532 if (d) 508 if (d)
533 d->DidStartLoading(webview); 509 d->DidStartLoading(webview);
534 510
535 WebDataSourceImpl* ds = webframe_->GetDataSourceImpl(); 511 WebDataSourceImpl* ds = webframe_->GetDataSourceImpl();
536 DCHECK(ds) << "DataSource NULL when navigating to reference fragment"; 512 DCHECK(ds) << "DataSource NULL when navigating to reference fragment";
537 if (ds) { 513 if (ds) {
538 GURL url = ds->request().url(); 514 GURL url = ds->request().url();
539 GURL chain_end = ds->endOfRedirectChain(); 515 GURL chain_end = ds->endOfRedirectChain();
540 ds->clearRedirectChain(); 516 ds->clearRedirectChain();
541 517
542 // Figure out if this location change is because of a JS-initiated client 518 // Figure out if this location change is because of a JS-initiated client
543 // redirect (e.g onload/setTimeout document.location.href=). 519 // redirect (e.g onload/setTimeout document.location.href=).
544 // TODO(timsteele): (bugs 1085325, 1046841) We don't get proper redirect 520 // TODO(timsteele): (bugs 1085325, 1046841) We don't get proper redirect
545 // performed/cancelled notifications across anchor navigations, so the 521 // performed/cancelled notifications across anchor navigations, so the
546 // other redirect-tracking code in this class (see dispatch*ClientRedirect() 522 // other redirect-tracking code in this class (see dispatch*ClientRedirect()
547 // and dispatchDidStartProvisionalLoad) is insufficient to catch and 523 // and dispatchDidStartProvisionalLoad) is insufficient to catch and
548 // properly flag these transitions. Once a proper fix for this bug is 524 // properly flag these transitions. Once a proper fix for this bug is
549 // identified and applied the following block may no longer be required. 525 // identified and applied the following block may no longer be required.
550 bool was_client_redirect = 526 bool was_client_redirect =
551 ((url == expected_client_redirect_dest_) && 527 (url == expected_client_redirect_dest_ &&
552 (chain_end == expected_client_redirect_src_)) || 528 chain_end == expected_client_redirect_src_) ||
553 (NavigationGestureForLastLoad() == NavigationGestureAuto); 529 !webframe_->isProcessingUserGesture();
554 530
555 if (was_client_redirect) { 531 if (was_client_redirect) {
556 if (d) 532 if (webframe_->client())
557 d->DidCompleteClientRedirect(webview, webframe_, chain_end); 533 webframe_->client()->didCompleteClientRedirect(webframe_, chain_end);
558 ds->appendRedirect(chain_end); 534 ds->appendRedirect(chain_end);
559 // Make sure we clear the expected redirect since we just effectively 535 // Make sure we clear the expected redirect since we just effectively
560 // completed it. 536 // completed it.
561 expected_client_redirect_src_ = GURL(); 537 expected_client_redirect_src_ = GURL();
562 expected_client_redirect_dest_ = GURL(); 538 expected_client_redirect_dest_ = GURL();
563 } 539 }
564 540
565 // Regardless of how we got here, we are navigating to a URL so we need to 541 // Regardless of how we got here, we are navigating to a URL so we need to
566 // add it to the redirect chain. 542 // add it to the redirect chain.
567 ds->appendRedirect(url); 543 ds->appendRedirect(url);
568 } 544 }
569 545
570 bool is_new_navigation; 546 bool is_new_navigation;
571 webview->DidCommitLoad(&is_new_navigation); 547 webview->DidCommitLoad(&is_new_navigation);
572 if (d) { 548 if (webframe_->client()) {
573 d->DidChangeLocationWithinPageForFrame(webview, webframe_, 549 webframe_->client()->didChangeLocationWithinPage(
574 is_new_navigation); 550 webframe_, is_new_navigation);
575 } 551 }
576 552
577 if (d) 553 if (d)
578 d->DidStopLoading(webview); 554 d->DidStopLoading(webview);
579 } 555 }
580 556
581 void WebFrameLoaderClient::dispatchWillClose() { 557 void WebFrameLoaderClient::dispatchWillClose() {
582 WebViewImpl* webview = webframe_->GetWebViewImpl(); 558 if (webframe_->client())
583 WebViewDelegate* d = webview->delegate(); 559 webframe_->client()->willClose(webframe_);
584 if (d)
585 d->WillCloseFrame(webview, webframe_);
586 } 560 }
587 561
588 void WebFrameLoaderClient::dispatchDidReceiveIcon() { 562 void WebFrameLoaderClient::dispatchDidReceiveIcon() {
589 WebViewImpl* webview = webframe_->GetWebViewImpl(); 563 WebViewImpl* webview = webframe_->GetWebViewImpl();
590 WebViewDelegate* d = webview->delegate(); 564 WebViewDelegate* d = webview->delegate();
591 if (d) 565 if (d)
592 d->DidReceiveIconForFrame(webview, webframe_); 566 d->DidReceiveIconForFrame(webview, webframe_);
593 } 567 }
594 568
595 void WebFrameLoaderClient::dispatchDidStartProvisionalLoad() { 569 void WebFrameLoaderClient::dispatchDidStartProvisionalLoad() {
596 // In case a redirect occurs, we need this to be set so that the redirect 570 // In case a redirect occurs, we need this to be set so that the redirect
597 // handling code can tell where the redirect came from. Server redirects 571 // handling code can tell where the redirect came from. Server redirects
598 // will occur on the provisional load, so we need to keep track of the most 572 // will occur on the provisional load, so we need to keep track of the most
599 // recent provisional load URL. 573 // recent provisional load URL.
600 // See dispatchDidReceiveServerRedirectForProvisionalLoad. 574 // See dispatchDidReceiveServerRedirectForProvisionalLoad.
601 WebDataSourceImpl* ds = webframe_->GetProvisionalDataSourceImpl(); 575 WebDataSourceImpl* ds = webframe_->GetProvisionalDataSourceImpl();
602 if (!ds) { 576 if (!ds) {
603 NOTREACHED() << "Attempting to provisional load but there isn't one"; 577 NOTREACHED() << "Attempting to provisional load but there isn't one";
604 return; 578 return;
605 } 579 }
606 GURL url = ds->request().url(); 580 GURL url = ds->request().url();
607 581
608 // Since the provisional load just started, we should have not gotten 582 // Since the provisional load just started, we should have not gotten
609 // any redirects yet. 583 // any redirects yet.
610 DCHECK(!ds->hasRedirectChain()); 584 DCHECK(!ds->hasRedirectChain());
611 585
612 WebViewImpl* webview = webframe_->GetWebViewImpl();
613 WebViewDelegate* d = webview->delegate();
614 // If this load is what we expected from a client redirect, treat it as a 586 // If this load is what we expected from a client redirect, treat it as a
615 // redirect from that original page. The expected redirect urls will be 587 // redirect from that original page. The expected redirect urls will be
616 // cleared by DidCancelClientRedirect. 588 // cleared by DidCancelClientRedirect.
617 bool completing_client_redirect = false; 589 bool completing_client_redirect = false;
618 if (expected_client_redirect_src_.is_valid()) { 590 if (expected_client_redirect_src_.is_valid()) {
619 // expected_client_redirect_dest_ could be something like 591 // expected_client_redirect_dest_ could be something like
620 // "javascript:history.go(-1)" thus we need to exclude url starts with 592 // "javascript:history.go(-1)" thus we need to exclude url starts with
621 // "javascript:". See bug: 1080873 593 // "javascript:". See bug: 1080873
622 DCHECK(expected_client_redirect_dest_.SchemeIs("javascript") || 594 DCHECK(expected_client_redirect_dest_.SchemeIs("javascript") ||
623 expected_client_redirect_dest_ == url); 595 expected_client_redirect_dest_ == url);
624 ds->appendRedirect(expected_client_redirect_src_); 596 ds->appendRedirect(expected_client_redirect_src_);
625 completing_client_redirect = true; 597 completing_client_redirect = true;
626 } 598 }
627 ds->appendRedirect(url); 599 ds->appendRedirect(url);
628 600
629 if (d) { 601 if (webframe_->client()) {
630 // As the comment for DidCompleteClientRedirect in webview_delegate.h 602 // As the comment for DidCompleteClientRedirect in webview_delegate.h
631 // points out, whatever information its invocation contains should only 603 // points out, whatever information its invocation contains should only
632 // be considered relevant until the next provisional load has started. 604 // be considered relevant until the next provisional load has started.
633 // So we first tell the delegate that the load started, and then tell it 605 // So we first tell the delegate that the load started, and then tell it
634 // about the client redirect the load is responsible for completing. 606 // about the client redirect the load is responsible for completing.
635 d->DidStartProvisionalLoadForFrame(webview, webframe_, 607 webframe_->client()->didStartProvisionalLoad(webframe_);
636 NavigationGestureForLastLoad());
637 if (completing_client_redirect) 608 if (completing_client_redirect)
638 d->DidCompleteClientRedirect(webview, webframe_, 609 webframe_->client()->didCompleteClientRedirect(
639 expected_client_redirect_src_); 610 webframe_, expected_client_redirect_src_);
640 } 611 }
641 } 612 }
642 613
643 void WebFrameLoaderClient::dispatchDidReceiveTitle(const String& title) { 614 void WebFrameLoaderClient::dispatchDidReceiveTitle(const String& title) {
644 WebViewImpl* webview = webframe_->GetWebViewImpl(); 615 if (webframe_->client()) {
645 WebViewDelegate* d = webview->delegate(); 616 webframe_->client()->didReceiveTitle(
646 if (d) { 617 webframe_, webkit_glue::StringToWebString(title));
647 d->DidReceiveTitle(webview, webkit_glue::StringToStdWString(title),
648 webframe_);
649 } 618 }
650 } 619 }
651 620
652 void WebFrameLoaderClient::dispatchDidCommitLoad() { 621 void WebFrameLoaderClient::dispatchDidCommitLoad() {
653 WebViewImpl* webview = webframe_->GetWebViewImpl(); 622 WebViewImpl* webview = webframe_->GetWebViewImpl();
654 bool is_new_navigation; 623 bool is_new_navigation;
655 webview->DidCommitLoad(&is_new_navigation); 624 webview->DidCommitLoad(&is_new_navigation);
656 WebViewDelegate* d = webview->delegate(); 625
657 if (d) 626 if (webframe_->client()) {
658 d->DidCommitLoadForFrame(webview, webframe_, is_new_navigation); 627 webframe_->client()->didCommitProvisionalLoad(
628 webframe_, is_new_navigation);
629 }
659 630
660 WebDevToolsAgentImpl* tools_agent = webview->GetWebDevToolsAgentImpl(); 631 WebDevToolsAgentImpl* tools_agent = webview->GetWebDevToolsAgentImpl();
661 if (tools_agent) { 632 if (tools_agent) {
662 tools_agent->DidCommitLoadForFrame(webview, webframe_, is_new_navigation); 633 tools_agent->DidCommitLoadForFrame(webview, webframe_, is_new_navigation);
663 } 634 }
664 } 635 }
665 636
666 void WebFrameLoaderClient::dispatchDidFailProvisionalLoad( 637 void WebFrameLoaderClient::dispatchDidFailProvisionalLoad(
667 const ResourceError& error) { 638 const ResourceError& error) {
668 // If a policy change occured, then we do not want to inform the plugin 639 // If a policy change occured, then we do not want to inform the plugin
(...skipping 19 matching lines...) Expand all
688 plugin_load_observer->didFailLoading(error); 659 plugin_load_observer->didFailLoading(error);
689 660
690 // Don't clear the redirect chain, this will happen in the middle of client 661 // Don't clear the redirect chain, this will happen in the middle of client
691 // redirects, and we need the context. The chain will be cleared when the 662 // redirects, and we need the context. The chain will be cleared when the
692 // provisional load succeeds or fails, not the "real" one. 663 // provisional load succeeds or fails, not the "real" one.
693 } 664 }
694 665
695 void WebFrameLoaderClient::dispatchDidFinishLoad() { 666 void WebFrameLoaderClient::dispatchDidFinishLoad() {
696 OwnPtr<WebPluginLoadObserver> plugin_load_observer = GetPluginLoadObserver(); 667 OwnPtr<WebPluginLoadObserver> plugin_load_observer = GetPluginLoadObserver();
697 668
698 WebViewImpl* webview = webframe_->GetWebViewImpl(); 669 if (webframe_->client())
699 WebViewDelegate* d = webview->delegate(); 670 webframe_->client()->didFinishLoad(webframe_);
700 if (d) 671
701 d->DidFinishLoadForFrame(webview, webframe_);
702 if (plugin_load_observer) 672 if (plugin_load_observer)
703 plugin_load_observer->didFinishLoading(); 673 plugin_load_observer->didFinishLoading();
704 674
705 // Don't clear the redirect chain, this will happen in the middle of client 675 // Don't clear the redirect chain, this will happen in the middle of client
706 // redirects, and we need the context. The chain will be cleared when the 676 // redirects, and we need the context. The chain will be cleared when the
707 // provisional load succeeds or fails, not the "real" one. 677 // provisional load succeeds or fails, not the "real" one.
708 } 678 }
709 679
710 void WebFrameLoaderClient::dispatchDidFirstLayout() { 680 void WebFrameLoaderClient::dispatchDidFirstLayout() {
711 } 681 }
(...skipping 116 matching lines...) Expand 10 before | Expand all | Expand 10 after
828 (webframe_->frame()->loader()->*function)(policy_action); 798 (webframe_->frame()->loader()->*function)(policy_action);
829 } 799 }
830 800
831 void WebFrameLoaderClient::dispatchDecidePolicyForNavigationAction( 801 void WebFrameLoaderClient::dispatchDecidePolicyForNavigationAction(
832 WebCore::FramePolicyFunction function, 802 WebCore::FramePolicyFunction function,
833 const WebCore::NavigationAction& action, 803 const WebCore::NavigationAction& action,
834 const WebCore::ResourceRequest& request, 804 const WebCore::ResourceRequest& request,
835 PassRefPtr<WebCore::FormState> form_state) { 805 PassRefPtr<WebCore::FormState> form_state) {
836 PolicyAction policy_action = PolicyIgnore; 806 PolicyAction policy_action = PolicyIgnore;
837 807
838 WebViewImpl* wv = webframe_->GetWebViewImpl();
839 WebViewDelegate* d = wv->delegate();
840 // It is valid for this function to be invoked in code paths where the 808 // It is valid for this function to be invoked in code paths where the
841 // the webview is closed. 809 // the webview is closed.
842 // The NULL check here is to fix a crash that seems strange 810 // The NULL check here is to fix a crash that seems strange
843 // (see - https://bugs.webkit.org/show_bug.cgi?id=23554). 811 // (see - https://bugs.webkit.org/show_bug.cgi?id=23554).
844 if (d && !request.url().isNull()) { 812 if (webframe_->client() && !request.url().isNull()) {
845 WebNavigationPolicy navigation_policy = 813 WebNavigationPolicy navigation_policy =
846 WebKit::WebNavigationPolicyCurrentTab; 814 WebKit::WebNavigationPolicyCurrentTab;
847 ActionSpecifiesNavigationPolicy(action, &navigation_policy); 815 ActionSpecifiesNavigationPolicy(action, &navigation_policy);
848 816
849 // Give the delegate a chance to change the navigation policy. 817 // Give the delegate a chance to change the navigation policy.
850 const WebDataSourceImpl* ds = webframe_->GetProvisionalDataSourceImpl(); 818 const WebDataSourceImpl* ds = webframe_->GetProvisionalDataSourceImpl();
851 if (ds) { 819 if (ds) {
852 GURL url = ds->request().url(); 820 GURL url = ds->request().url();
853 if (url.SchemeIs(webkit_glue::kBackForwardNavigationScheme)) { 821 if (url.SchemeIs(webkit_glue::kBackForwardNavigationScheme)) {
854 HandleBackForwardNavigation(url); 822 HandleBackForwardNavigation(url);
855 navigation_policy = WebKit::WebNavigationPolicyIgnore; 823 navigation_policy = WebKit::WebNavigationPolicyIgnore;
856 } else { 824 } else {
857 bool is_redirect = ds->hasRedirectChain(); 825 bool is_redirect = ds->hasRedirectChain();
858 826
859 WebNavigationType webnav_type = 827 WebNavigationType webnav_type =
860 WebDataSourceImpl::toWebNavigationType(action.type()); 828 WebDataSourceImpl::toWebNavigationType(action.type());
861 829
862 navigation_policy = d->PolicyForNavigationAction( 830 navigation_policy = webframe_->client()->decidePolicyForNavigation(
863 wv, webframe_, ds->request(), webnav_type, navigation_policy, 831 webframe_, ds->request(), webnav_type, navigation_policy,
864 is_redirect); 832 is_redirect);
865 } 833 }
866 } 834 }
867 835
868 if (navigation_policy == WebKit::WebNavigationPolicyCurrentTab) { 836 if (navigation_policy == WebKit::WebNavigationPolicyCurrentTab) {
869 policy_action = PolicyUse; 837 policy_action = PolicyUse;
870 } else if (navigation_policy == WebKit::WebNavigationPolicyDownload) { 838 } else if (navigation_policy == WebKit::WebNavigationPolicyDownload) {
871 policy_action = PolicyDownload; 839 policy_action = PolicyDownload;
872 } else { 840 } else {
873 if (navigation_policy != WebKit::WebNavigationPolicyIgnore) { 841 if (navigation_policy != WebKit::WebNavigationPolicyIgnore) {
874 GURL referrer = webkit_glue::StringToGURL( 842 WrappedResourceRequest webreq(request);
875 request.httpHeaderField("Referer")); 843 webframe_->client()->loadURLExternally(
876 844 webframe_, webreq, navigation_policy);
877 d->OpenURL(webframe_->GetWebViewImpl(),
878 webkit_glue::KURLToGURL(request.url()),
879 referrer,
880 navigation_policy);
881 } 845 }
882 policy_action = PolicyIgnore; 846 policy_action = PolicyIgnore;
883 } 847 }
884 } 848 }
885 849
886 (webframe_->frame()->loader()->*function)(policy_action); 850 (webframe_->frame()->loader()->*function)(policy_action);
887 } 851 }
888 852
889 void WebFrameLoaderClient::cancelPolicyCheck() { 853 void WebFrameLoaderClient::cancelPolicyCheck() {
890 // FIXME 854 // FIXME
891 } 855 }
892 856
893 void WebFrameLoaderClient::dispatchUnableToImplementPolicy(const ResourceError&) { 857 void WebFrameLoaderClient::dispatchUnableToImplementPolicy(const ResourceError&) {
894 // FIXME 858 // FIXME
895 } 859 }
896 860
897 void WebFrameLoaderClient::dispatchWillSubmitForm(FramePolicyFunction function, 861 void WebFrameLoaderClient::dispatchWillSubmitForm(FramePolicyFunction function,
898 PassRefPtr<FormState> form_ref) { 862 PassRefPtr<FormState> form_ref) {
899 WebViewImpl* webview = webframe_->GetWebViewImpl(); 863 if (webframe_->client()) {
900 WebViewDelegate* d = webview->delegate(); 864 webframe_->client()->willSubmitForm(
901 if (d) { 865 webframe_, webkit_glue::HTMLFormElementToWebForm(form_ref->form()));
902 d->WillSubmitForm(webview, webframe_,
903 webkit_glue::HTMLFormElementToWebForm(form_ref->form()));
904 } 866 }
905 (webframe_->frame()->loader()->*function)(PolicyUse); 867 (webframe_->frame()->loader()->*function)(PolicyUse);
906 } 868 }
907 869
908 void WebFrameLoaderClient::dispatchDidLoadMainResource(DocumentLoader*) { 870 void WebFrameLoaderClient::dispatchDidLoadMainResource(DocumentLoader*) {
909 // FIXME 871 // FIXME
910 } 872 }
911 873
912 void WebFrameLoaderClient::revertToProvisionalState(DocumentLoader*) { 874 void WebFrameLoaderClient::revertToProvisionalState(DocumentLoader*) {
913 has_representation_ = true; 875 has_representation_ = true;
(...skipping 53 matching lines...) Expand 10 before | Expand all | Expand 10 after
967 // FIXME 929 // FIXME
968 } 930 }
969 931
970 void WebFrameLoaderClient::didChangeTitle(DocumentLoader*) { 932 void WebFrameLoaderClient::didChangeTitle(DocumentLoader*) {
971 // FIXME 933 // FIXME
972 } 934 }
973 935
974 // Called whenever data is received. 936 // Called whenever data is received.
975 void WebFrameLoaderClient::committedLoad(DocumentLoader* loader, const char* dat a, int length) { 937 void WebFrameLoaderClient::committedLoad(DocumentLoader* loader, const char* dat a, int length) {
976 if (!plugin_widget_.get()) { 938 if (!plugin_widget_.get()) {
977 WebViewDelegate* d = webframe_->GetWebViewImpl()->delegate(); 939 if (webframe_->client()) {
978 if (d) 940 bool preventDefault = false;
979 d->DidReceiveDocumentData(webframe_, data, length); 941 webframe_->client()->didReceiveDocumentData(webframe_, data, length, preve ntDefault);
942 if (!preventDefault)
943 webframe_->commitDocumentData(data, length);
944 }
980 } 945 }
981 946
982 // If we are sending data to WebCore::MediaDocument, we should stop here 947 // If we are sending data to WebCore::MediaDocument, we should stop here
983 // and cancel the request. 948 // and cancel the request.
984 if (webframe_->frame()->document() && 949 if (webframe_->frame()->document() &&
985 webframe_->frame()->document()->isMediaDocument()) { 950 webframe_->frame()->document()->isMediaDocument()) {
986 loader->cancelMainResourceLoad( 951 loader->cancelMainResourceLoad(
987 pluginWillHandleLoadError(loader->response())); 952 pluginWillHandleLoadError(loader->response()));
988 } 953 }
989 954
(...skipping 161 matching lines...) Expand 10 before | Expand all | Expand 10 after
1151 } 1116 }
1152 1117
1153 void WebFrameLoaderClient::prepareForDataSourceReplacement() { 1118 void WebFrameLoaderClient::prepareForDataSourceReplacement() {
1154 // FIXME 1119 // FIXME
1155 } 1120 }
1156 1121
1157 PassRefPtr<DocumentLoader> WebFrameLoaderClient::createDocumentLoader( 1122 PassRefPtr<DocumentLoader> WebFrameLoaderClient::createDocumentLoader(
1158 const ResourceRequest& request, 1123 const ResourceRequest& request,
1159 const SubstituteData& data) { 1124 const SubstituteData& data) {
1160 RefPtr<WebDataSourceImpl> ds = WebDataSourceImpl::create(request, data); 1125 RefPtr<WebDataSourceImpl> ds = WebDataSourceImpl::create(request, data);
1161 WebViewDelegate* d = webframe_->GetWebViewImpl()->delegate(); 1126 if (webframe_->client())
1162 if (d) 1127 webframe_->client()->didCreateDataSource(webframe_, ds.get());
1163 d->DidCreateDataSource(webframe_, ds.get());
1164 return ds.release(); 1128 return ds.release();
1165 } 1129 }
1166 1130
1167 void WebFrameLoaderClient::setTitle(const String& title, const KURL& url) { 1131 void WebFrameLoaderClient::setTitle(const String& title, const KURL& url) {
1168 // FIXME: monitor for changes in WebFrameLoaderClient.mm 1132 // FIXME: monitor for changes in WebFrameLoaderClient.mm
1169 // FIXME: Set the title of the current history item. HistoryItemImpl's setter 1133 // FIXME: Set the title of the current history item. HistoryItemImpl's setter
1170 // will notify its clients (e.g. the history database) that the title 1134 // will notify its clients (e.g. the history database) that the title
1171 // has changed. 1135 // has changed.
1172 // 1136 //
1173 // e.g.: 1137 // e.g.:
(...skipping 65 matching lines...) Expand 10 before | Expand all | Expand 10 after
1239 // fallback plugin handler that allows you to install a missing 1203 // fallback plugin handler that allows you to install a missing
1240 // plugin. Since we don't yet have a default plugin handler, we 1204 // plugin. Since we don't yet have a default plugin handler, we
1241 // need to return NULL here rather than going through all the 1205 // need to return NULL here rather than going through all the
1242 // plugin-creation IPCs only to discover we don't have a plugin 1206 // plugin-creation IPCs only to discover we don't have a plugin
1243 // registered, which causes a crash. 1207 // registered, which causes a crash.
1244 // TODO(evanm): remove me once we have a default plugin. 1208 // TODO(evanm): remove me once we have a default plugin.
1245 if (objectContentType(url, mime_type) != ObjectContentNetscapePlugin) 1209 if (objectContentType(url, mime_type) != ObjectContentNetscapePlugin)
1246 return NULL; 1210 return NULL;
1247 #endif 1211 #endif
1248 1212
1249 WebViewImpl* webview = webframe_->GetWebViewImpl(); 1213 if (!webframe_->client())
1250 if (!webview->delegate())
1251 return NULL; 1214 return NULL;
1252 1215
1253 WebPluginParams params; 1216 WebPluginParams params;
1254 params.url = webkit_glue::KURLToWebURL(url); 1217 params.url = webkit_glue::KURLToWebURL(url);
1255 params.mimeType = webkit_glue::StringToWebString(mime_type); 1218 params.mimeType = webkit_glue::StringToWebString(mime_type);
1256 CopyStringVector(param_names, &params.attributeNames); 1219 CopyStringVector(param_names, &params.attributeNames);
1257 CopyStringVector(param_values, &params.attributeValues); 1220 CopyStringVector(param_values, &params.attributeValues);
1258 params.loadManually = load_manually; 1221 params.loadManually = load_manually;
1259 1222
1260 WebPlugin* webplugin = webview->delegate()->CreatePlugin(webframe_, params); 1223 WebPlugin* webplugin = webframe_->client()->createPlugin(webframe_, params);
1261 if (!webplugin) 1224 if (!webplugin)
1262 return NULL; 1225 return NULL;
1263 1226
1264 // The container takes ownership of the WebPlugin. 1227 // The container takes ownership of the WebPlugin.
1265 RefPtr<WebPluginContainerImpl> container = 1228 RefPtr<WebPluginContainerImpl> container =
1266 WebPluginContainerImpl::create(element, webplugin); 1229 WebPluginContainerImpl::create(element, webplugin);
1267 1230
1268 if (!webplugin->initialize(container.get())) 1231 if (!webplugin->initialize(container.get()))
1269 return NULL; 1232 return NULL;
1270 1233
(...skipping 83 matching lines...) Expand 10 before | Expand all | Expand 10 after
1354 } else { 1317 } else {
1355 if (shift) { 1318 if (shift) {
1356 *policy = WebKit::WebNavigationPolicyNewWindow; 1319 *policy = WebKit::WebNavigationPolicyNewWindow;
1357 } else { 1320 } else {
1358 *policy = WebKit::WebNavigationPolicyDownload; 1321 *policy = WebKit::WebNavigationPolicyDownload;
1359 } 1322 }
1360 } 1323 }
1361 return true; 1324 return true;
1362 } 1325 }
1363 1326
1364 NavigationGesture WebFrameLoaderClient::NavigationGestureForLastLoad() {
1365 // TODO(timsteele): isProcessingUserGesture() returns too many false positives
1366 // (see bug 1051891) to trust it and assign NavigationGestureUser, so
1367 // for now we assign Unknown in those cases and Auto otherwise.
1368 // (Issue 874811 known false negative as well).
1369 return webframe_->frame()->loader()->isProcessingUserGesture() ?
1370 NavigationGestureUnknown :
1371 NavigationGestureAuto;
1372 }
1373
1374 void WebFrameLoaderClient::HandleBackForwardNavigation(const GURL& url) { 1327 void WebFrameLoaderClient::HandleBackForwardNavigation(const GURL& url) {
1375 DCHECK(url.SchemeIs(webkit_glue::kBackForwardNavigationScheme)); 1328 DCHECK(url.SchemeIs(webkit_glue::kBackForwardNavigationScheme));
1376 1329
1377 std::string offset_str = url.ExtractFileName(); 1330 std::string offset_str = url.ExtractFileName();
1378 int offset; 1331 int offset;
1379 if (!StringToInt(offset_str, &offset)) 1332 if (!StringToInt(offset_str, &offset))
1380 return; 1333 return;
1381 1334
1382 WebViewDelegate* d = webframe_->GetWebViewImpl()->delegate(); 1335 WebViewDelegate* d = webframe_->GetWebViewImpl()->delegate();
1383 if (d) 1336 if (d)
1384 d->NavigateBackForwardSoon(offset); 1337 d->NavigateBackForwardSoon(offset);
1385 } 1338 }
1386 1339
1387 PassOwnPtr<WebPluginLoadObserver> WebFrameLoaderClient::GetPluginLoadObserver() { 1340 PassOwnPtr<WebPluginLoadObserver> WebFrameLoaderClient::GetPluginLoadObserver() {
1388 WebDataSourceImpl* ds = WebDataSourceImpl::fromDocumentLoader( 1341 WebDataSourceImpl* ds = WebDataSourceImpl::fromDocumentLoader(
1389 webframe_->frame()->loader()->activeDocumentLoader()); 1342 webframe_->frame()->loader()->activeDocumentLoader());
1390 return ds->releasePluginLoadObserver(); 1343 return ds->releasePluginLoadObserver();
1391 } 1344 }
OLDNEW
« no previous file with comments | « webkit/glue/webframeloaderclient_impl.h ('k') | webkit/glue/webview.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698