OLD | NEW |
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 #import "ios/web/web_state/ui/crw_wk_web_view_web_controller.h" | 5 #import "ios/web/web_state/ui/crw_wk_web_view_web_controller.h" |
6 | 6 |
7 #import <WebKit/WebKit.h> | 7 #import <WebKit/WebKit.h> |
8 | 8 |
9 #include "base/ios/ios_util.h" | 9 #include "base/ios/ios_util.h" |
10 #include "base/ios/weak_nsobject.h" | 10 #include "base/ios/weak_nsobject.h" |
(...skipping 431 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
442 - (void)loadRequestForCurrentNavigationItem { | 442 - (void)loadRequestForCurrentNavigationItem { |
443 DCHECK(self.webView && !self.nativeController); | 443 DCHECK(self.webView && !self.nativeController); |
444 | 444 |
445 ProceduralBlock defaultNavigationBlock = ^{ | 445 ProceduralBlock defaultNavigationBlock = ^{ |
446 [self registerLoadRequest:[self currentNavigationURL] | 446 [self registerLoadRequest:[self currentNavigationURL] |
447 referrer:[self currentSessionEntryReferrer] | 447 referrer:[self currentSessionEntryReferrer] |
448 transition:[self currentTransition]]; | 448 transition:[self currentTransition]]; |
449 [self loadRequest:[self requestForCurrentNavigationItem]]; | 449 [self loadRequest:[self requestForCurrentNavigationItem]]; |
450 }; | 450 }; |
451 | 451 |
452 // If there is no corresponding WKBackForwardListItem, fall back to | 452 // If there is no corresponding WKBackForwardListItem, or the item is not in |
453 // the standard loading mechanism. | 453 // the current WKWebView's back-forward list, navigating using WKWebView API |
| 454 // is not possible. In this case, fall back to the default navigation |
| 455 // mechanism. |
454 web::WKBackForwardListItemHolder* holder = | 456 web::WKBackForwardListItemHolder* holder = |
455 [self currentBackForwardListItemHolder]; | 457 [self currentBackForwardListItemHolder]; |
456 if (!holder->back_forward_list_item()) { | 458 if (!holder->back_forward_list_item() || |
| 459 ![self isBackForwardListItemValid:holder->back_forward_list_item()]) { |
457 defaultNavigationBlock(); | 460 defaultNavigationBlock(); |
458 return; | 461 return; |
459 } | 462 } |
460 | 463 |
461 // The current back-forward list item MUST be in the WKWebView's back-forward | |
462 // list to be valid. | |
463 DCHECK([self isBackForwardListItemValid:holder->back_forward_list_item()]); | |
464 | |
465 ProceduralBlock webViewNavigationBlock = ^{ | 464 ProceduralBlock webViewNavigationBlock = ^{ |
466 // If the current navigation URL is the same as the URL of the visible | 465 // If the current navigation URL is the same as the URL of the visible |
467 // page, that means the user requested a reload. |goToBackForwardListItem| | 466 // page, that means the user requested a reload. |goToBackForwardListItem| |
468 // will be a no-op when it is passed the current back forward list item, | 467 // will be a no-op when it is passed the current back forward list item, |
469 // so |reload| must be explicitly called. | 468 // so |reload| must be explicitly called. |
470 [self registerLoadRequest:[self currentNavigationURL] | 469 [self registerLoadRequest:[self currentNavigationURL] |
471 referrer:[self currentSessionEntryReferrer] | 470 referrer:[self currentSessionEntryReferrer] |
472 transition:[self currentTransition]]; | 471 transition:[self currentTransition]]; |
473 if ([self currentNavigationURL] == net::GURLWithNSURL([_wkWebView URL])) { | 472 if ([self currentNavigationURL] == net::GURLWithNSURL([_wkWebView URL])) { |
474 [_wkWebView reload]; | 473 [_wkWebView reload]; |
(...skipping 943 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1418 placeholderText:defaultText | 1417 placeholderText:defaultText |
1419 requestURL: | 1418 requestURL: |
1420 net::GURLWithNSURL(frame.request.URL) | 1419 net::GURLWithNSURL(frame.request.URL) |
1421 completionHandler:completionHandler]; | 1420 completionHandler:completionHandler]; |
1422 } else if (completionHandler) { | 1421 } else if (completionHandler) { |
1423 completionHandler(nil); | 1422 completionHandler(nil); |
1424 } | 1423 } |
1425 } | 1424 } |
1426 | 1425 |
1427 @end | 1426 @end |
OLD | NEW |