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

Side by Side Diff: ios/web/web_state/ui/crw_web_controller.mm

Issue 2759483002: Revert of Cleaned up old navigation code that did not use pending navigation item. (Closed)
Patch Set: Created 3 years, 9 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 2012 The Chromium Authors. All rights reserved. 1 // Copyright 2012 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_web_controller.h" 5 #import "ios/web/web_state/ui/crw_web_controller.h"
6 6
7 #import <WebKit/WebKit.h> 7 #import <WebKit/WebKit.h>
8 8
9 #import <objc/runtime.h> 9 #import <objc/runtime.h>
10 #include <stddef.h> 10 #include <stddef.h>
(...skipping 458 matching lines...) Expand 10 before | Expand all | Expand 10 after
469 // Returns the navigation item for the current page. 469 // Returns the navigation item for the current page.
470 @property(nonatomic, readonly) web::NavigationItemImpl* currentNavItem; 470 @property(nonatomic, readonly) web::NavigationItemImpl* currentNavItem;
471 // Returns the current transition type. 471 // Returns the current transition type.
472 @property(nonatomic, readonly) ui::PageTransition currentTransition; 472 @property(nonatomic, readonly) ui::PageTransition currentTransition;
473 // Returns the referrer for current navigation item. May be empty. 473 // Returns the referrer for current navigation item. May be empty.
474 @property(nonatomic, readonly) web::Referrer currentNavItemReferrer; 474 @property(nonatomic, readonly) web::Referrer currentNavItemReferrer;
475 // The HTTP headers associated with the current navigation item. These are nil 475 // The HTTP headers associated with the current navigation item. These are nil
476 // unless the request was a POST. 476 // unless the request was a POST.
477 @property(nonatomic, readonly) NSDictionary* currentHTTPHeaders; 477 @property(nonatomic, readonly) NSDictionary* currentHTTPHeaders;
478 478
479 // TODO(crbug.com/684098): Remove these methods and inline their content.
480 // Called before finishing a history navigation from a page with the given
481 // UserAgentType.
482 - (void)webWillFinishHistoryNavigationWithPreviousUserAgentType:
483 (web::UserAgentType)userAgentType;
479 // Requires page reconstruction if |item| has a non-NONE UserAgentType and it 484 // Requires page reconstruction if |item| has a non-NONE UserAgentType and it
480 // differs from that of |fromItem|. 485 // differs from that of |fromItem|.
481 - (void)updateDesktopUserAgentForItem:(web::NavigationItem*)item 486 - (void)updateDesktopUserAgentForItem:(web::NavigationItem*)item
482 previousUserAgentType:(web::UserAgentType)userAgentType; 487 previousUserAgentType:(web::UserAgentType)userAgentType;
483 488
484 // Removes the container view from the hierarchy and resets the ivar. 489 // Removes the container view from the hierarchy and resets the ivar.
485 - (void)resetContainerView; 490 - (void)resetContainerView;
486 // Called when the web page has changed document and/or URL, and so the page 491 // Called when the web page has changed document and/or URL, and so the page
487 // navigation should be reported to the delegate, and internal state updated to 492 // navigation should be reported to the delegate, and internal state updated to
488 // reflect the fact that the navigation has occurred. 493 // reflect the fact that the navigation has occurred.
(...skipping 102 matching lines...) Expand 10 before | Expand all | Expand 10 after
591 - (void)didFinishNavigation; 596 - (void)didFinishNavigation;
592 // Update the appropriate parts of the model and broadcast to the embedder. This 597 // Update the appropriate parts of the model and broadcast to the embedder. This
593 // may be called multiple times and thus must be idempotent. 598 // may be called multiple times and thus must be idempotent.
594 - (void)loadCompleteWithSuccess:(BOOL)loadSuccess; 599 - (void)loadCompleteWithSuccess:(BOOL)loadSuccess;
595 // Called after URL is finished loading and _loadPhase is set to PAGE_LOADED. 600 // Called after URL is finished loading and _loadPhase is set to PAGE_LOADED.
596 - (void)didFinishWithURL:(const GURL&)currentURL loadSuccess:(BOOL)loadSuccess; 601 - (void)didFinishWithURL:(const GURL&)currentURL loadSuccess:(BOOL)loadSuccess;
597 // Navigates forwards or backwards by |delta| pages. No-op if delta is out of 602 // Navigates forwards or backwards by |delta| pages. No-op if delta is out of
598 // bounds. Reloads if delta is 0. 603 // bounds. Reloads if delta is 0.
599 // TODO(crbug.com/661316): Move this method to NavigationManager. 604 // TODO(crbug.com/661316): Move this method to NavigationManager.
600 - (void)goDelta:(int)delta; 605 - (void)goDelta:(int)delta;
606 // Loads a new URL if the current entry is not from a pushState() navigation.
607 // |fromURL| is the URL of the previous NavigationItem, |fromUserAgentType| is
608 // that item's UserAgentType, and |sameDocument| is YES if the navigation is
609 // between two pages with the same document.
610 - (void)finishHistoryNavigationFromURL:(const GURL&)fromURL
611 userAgentType:(web::UserAgentType)fromUserAgentType
612 sameDocument:(BOOL)sameDocument;
601 // Informs the native controller if web usage is allowed or not. 613 // Informs the native controller if web usage is allowed or not.
602 - (void)setNativeControllerWebUsageEnabled:(BOOL)webUsageEnabled; 614 - (void)setNativeControllerWebUsageEnabled:(BOOL)webUsageEnabled;
603 // Called when web controller receives a new message from the web page. 615 // Called when web controller receives a new message from the web page.
604 - (void)didReceiveScriptMessage:(WKScriptMessage*)message; 616 - (void)didReceiveScriptMessage:(WKScriptMessage*)message;
605 // Returns a new script which wraps |script| with windowID check so |script| is 617 // Returns a new script which wraps |script| with windowID check so |script| is
606 // not evaluated on windowID mismatch. 618 // not evaluated on windowID mismatch.
607 - (NSString*)scriptByAddingWindowIDCheckForScript:(NSString*)script; 619 - (NSString*)scriptByAddingWindowIDCheckForScript:(NSString*)script;
608 // Attempts to handle a script message. Returns YES on success, NO otherwise. 620 // Attempts to handle a script message. Returns YES on success, NO otherwise.
609 - (BOOL)respondToWKScriptMessage:(WKScriptMessage*)scriptMessage; 621 - (BOOL)respondToWKScriptMessage:(WKScriptMessage*)scriptMessage;
610 // Registers load request with empty referrer and link or client redirect 622 // Registers load request with empty referrer and link or client redirect
(...skipping 88 matching lines...) Expand 10 before | Expand all | Expand 10 after
699 - (BOOL)isCurrentNavigationBackForward; 711 - (BOOL)isCurrentNavigationBackForward;
700 // Returns whether the given navigation is triggered by a user link click. 712 // Returns whether the given navigation is triggered by a user link click.
701 - (BOOL)isLinkNavigation:(WKNavigationType)navigationType; 713 - (BOOL)isLinkNavigation:(WKNavigationType)navigationType;
702 714
703 // Inject windowID if not yet injected. 715 // Inject windowID if not yet injected.
704 - (void)injectWindowID; 716 - (void)injectWindowID;
705 717
706 // Returns YES if the given WKBackForwardListItem is valid to use for 718 // Returns YES if the given WKBackForwardListItem is valid to use for
707 // navigation. 719 // navigation.
708 - (BOOL)isBackForwardListItemValid:(WKBackForwardListItem*)item; 720 - (BOOL)isBackForwardListItemValid:(WKBackForwardListItem*)item;
721 // Compares the two URLs being navigated between during a history navigation to
722 // determine if a # needs to be appended to the URL of |toItem| to trigger a
723 // hashchange event. If so, also saves the modified URL into |toItem|.
724 - (GURL)URLForHistoryNavigationToItem:(web::NavigationItem*)toItem
725 previousURL:(const GURL&)previousURL;
709 // Finds all the scrollviews in the view hierarchy and makes sure they do not 726 // Finds all the scrollviews in the view hierarchy and makes sure they do not
710 // interfere with scroll to top when tapping the statusbar. 727 // interfere with scroll to top when tapping the statusbar.
711 - (void)optOutScrollsToTopForSubviews; 728 - (void)optOutScrollsToTopForSubviews;
712 // Tears down the old native controller, and then replaces it with the new one. 729 // Tears down the old native controller, and then replaces it with the new one.
713 - (void)setNativeController:(id<CRWNativeContent>)nativeController; 730 - (void)setNativeController:(id<CRWNativeContent>)nativeController;
714 // Returns whether |url| should be opened. 731 // Returns whether |url| should be opened.
715 - (BOOL)shouldOpenURL:(const GURL&)url 732 - (BOOL)shouldOpenURL:(const GURL&)url
716 mainDocumentURL:(const GURL&)mainDocumentURL 733 mainDocumentURL:(const GURL&)mainDocumentURL
717 linkClicked:(BOOL)linkClicked; 734 linkClicked:(BOOL)linkClicked;
718 // Called when |URL| needs to be opened in a matching native app. 735 // Called when |URL| needs to be opened in a matching native app.
(...skipping 664 matching lines...) Expand 10 before | Expand all | Expand 10 after
1383 1400
1384 - (BOOL)isBackForwardListItemValid:(WKBackForwardListItem*)item { 1401 - (BOOL)isBackForwardListItemValid:(WKBackForwardListItem*)item {
1385 // The current back-forward list item MUST be in the WKWebView's back-forward 1402 // The current back-forward list item MUST be in the WKWebView's back-forward
1386 // list to be valid. 1403 // list to be valid.
1387 WKBackForwardList* list = [_webView backForwardList]; 1404 WKBackForwardList* list = [_webView backForwardList];
1388 return list.currentItem == item || 1405 return list.currentItem == item ||
1389 [list.forwardList indexOfObject:item] != NSNotFound || 1406 [list.forwardList indexOfObject:item] != NSNotFound ||
1390 [list.backList indexOfObject:item] != NSNotFound; 1407 [list.backList indexOfObject:item] != NSNotFound;
1391 } 1408 }
1392 1409
1410 - (GURL)URLForHistoryNavigationToItem:(web::NavigationItem*)toItem
1411 previousURL:(const GURL&)previousURL {
1412 // If navigating with native API, i.e. using a back forward list item,
1413 // hashchange events will be triggered automatically, so no URL tampering is
1414 // required.
1415 web::WKBackForwardListItemHolder* holder =
1416 web::WKBackForwardListItemHolder::FromNavigationItem(toItem);
1417 if (holder->back_forward_list_item()) {
1418 return toItem->GetURL();
1419 }
1420
1421 const GURL& URL = toItem->GetURL();
1422
1423 // Check the state of the fragments on both URLs (aka, is there a '#' in the
1424 // url or not).
1425 if (!previousURL.has_ref() || URL.has_ref()) {
1426 return URL;
1427 }
1428
1429 // startURL contains a fragment and endURL doesn't. Remove the fragment from
1430 // startURL and compare the resulting string to endURL. If they are equal, add
1431 // # to endURL to cause a hashchange event.
1432 GURL hashless = web::GURLByRemovingRefFromGURL(previousURL);
1433
1434 if (hashless != URL)
1435 return URL;
1436
1437 url::StringPieceReplacements<std::string> emptyRef;
1438 emptyRef.SetRefStr("");
1439 GURL newEndURL = URL.ReplaceComponents(emptyRef);
1440 toItem->SetURL(newEndURL);
1441 return newEndURL;
1442 }
1443
1393 - (void)injectWindowID { 1444 - (void)injectWindowID {
1394 // Default value for shouldSuppressDialogs is NO, so updating them only 1445 // Default value for shouldSuppressDialogs is NO, so updating them only
1395 // when necessary is a good optimization. 1446 // when necessary is a good optimization.
1396 if (_shouldSuppressDialogsOnWindowIDInjection) { 1447 if (_shouldSuppressDialogsOnWindowIDInjection) {
1397 self.shouldSuppressDialogs = YES; 1448 self.shouldSuppressDialogs = YES;
1398 _shouldSuppressDialogsOnWindowIDInjection = NO; 1449 _shouldSuppressDialogsOnWindowIDInjection = NO;
1399 } 1450 }
1400 1451
1401 [_windowIDJSManager inject]; 1452 [_windowIDJSManager inject];
1402 } 1453 }
(...skipping 385 matching lines...) Expand 10 before | Expand all | Expand 10 after
1788 referrer:referrer 1839 referrer:referrer
1789 transition:self.currentTransition]; 1840 transition:self.currentTransition];
1790 [self loadNativeViewWithSuccess:YES]; 1841 [self loadNativeViewWithSuccess:YES];
1791 } 1842 }
1792 1843
1793 - (void)loadWithParams:(const NavigationManager::WebLoadParams&)originalParams { 1844 - (void)loadWithParams:(const NavigationManager::WebLoadParams&)originalParams {
1794 // Make a copy of |params|, as some of the delegate methods may modify it. 1845 // Make a copy of |params|, as some of the delegate methods may modify it.
1795 NavigationManager::WebLoadParams params(originalParams); 1846 NavigationManager::WebLoadParams params(originalParams);
1796 1847
1797 // Initiating a navigation from the UI, record the current page state before 1848 // Initiating a navigation from the UI, record the current page state before
1798 // the new page loads. 1849 // the new page loads. Don't record for back/forward, as the current entry
1850 // has already been moved to the next entry in the history. Do, however,
1851 // record it for general reload.
1852 // TODO(jimblackler): consider a single unified call to record state whenever
1853 // the page is about to be changed. This cannot currently be done after
1854 // addPendingItem is called.
1799 1855
1800 [_delegate webWillInitiateLoadWithParams:params]; 1856 [_delegate webWillInitiateLoadWithParams:params];
1801 1857
1802 GURL navUrl = params.url; 1858 GURL navUrl = params.url;
1803 ui::PageTransition transition = params.transition_type; 1859 ui::PageTransition transition = params.transition_type;
1804 DCHECK(!(transition & ui::PAGE_TRANSITION_FORWARD_BACK));
1805 DCHECK(!(transition & ui::PAGE_TRANSITION_RELOAD));
1806 1860
1807 BOOL initialNavigation = NO; 1861 BOOL initialNavigation = NO;
1808 // Clear transient view before making any changes to history and navigation 1862 BOOL forwardBack =
1809 // manager. TODO(stuartmorgan): Drive Transient Item clearing from 1863 PageTransitionCoreTypeIs(transition, ui::PAGE_TRANSITION_RELOAD) &&
1810 // navigation system, rather than from WebController. 1864 (transition & ui::PAGE_TRANSITION_FORWARD_BACK);
1811 [self clearTransientContentView]; 1865 if (forwardBack) {
1866 // Setting these for back/forward is not supported.
1867 DCHECK(!params.extra_headers);
1868 DCHECK(!params.post_data);
1869 } else {
1870 // Clear transient view before making any changes to history and navigation
1871 // manager. TODO(stuartmorgan): Drive Transient Item clearing from
1872 // navigation system, rather than from WebController.
1873 [self clearTransientContentView];
1812 1874
1813 [self recordStateInHistory]; 1875 // TODO(stuartmorgan): Why doesn't recordStateInHistory get called for
1876 // forward/back transitions?
1877 [self recordStateInHistory];
1814 1878
1815 if (!self.currentNavItem) 1879 if (!self.currentNavItem)
1816 initialNavigation = YES; 1880 initialNavigation = YES;
1817 1881
1818 web::NavigationInitiationType navigationInitiationType = 1882 web::NavigationInitiationType navigationInitiationType =
1819 params.is_renderer_initiated 1883 params.is_renderer_initiated
1820 ? web::NavigationInitiationType::RENDERER_INITIATED 1884 ? web::NavigationInitiationType::RENDERER_INITIATED
1821 : web::NavigationInitiationType::USER_INITIATED; 1885 : web::NavigationInitiationType::USER_INITIATED;
1822 self.navigationManagerImpl->AddPendingItem( 1886 self.navigationManagerImpl->AddPendingItem(
1823 navUrl, params.referrer, transition, navigationInitiationType); 1887 navUrl, params.referrer, transition, navigationInitiationType);
1824 1888
1825 web::NavigationItemImpl* addedItem = self.currentNavItem; 1889 web::NavigationItemImpl* addedItem = self.currentNavItem;
1826 DCHECK(addedItem); 1890 DCHECK(addedItem);
1827 if (params.extra_headers) 1891 if (params.extra_headers)
1828 addedItem->AddHttpRequestHeaders(params.extra_headers); 1892 addedItem->AddHttpRequestHeaders(params.extra_headers);
1829 if (params.post_data) { 1893 if (params.post_data) {
1830 DCHECK([addedItem->GetHttpRequestHeaders() objectForKey:@"Content-Type"]) 1894 DCHECK([addedItem->GetHttpRequestHeaders() objectForKey:@"Content-Type"])
1831 << "Post data should have an associated content type"; 1895 << "Post data should have an associated content type";
1832 addedItem->SetPostData(params.post_data); 1896 addedItem->SetPostData(params.post_data);
1833 addedItem->SetShouldSkipRepostFormConfirmation(true); 1897 addedItem->SetShouldSkipRepostFormConfirmation(true);
1898 }
1834 } 1899 }
1835 1900
1836 [_delegate webDidUpdateSessionForLoadWithParams:params 1901 [_delegate webDidUpdateSessionForLoadWithParams:params
1837 wasInitialNavigation:initialNavigation]; 1902 wasInitialNavigation:initialNavigation];
1838 1903
1839 [self loadCurrentURL]; 1904 [self loadCurrentURL];
1840 } 1905 }
1841 1906
1842 - (void)loadCurrentURL { 1907 - (void)loadCurrentURL {
1843 // If the content view doesn't exist, the tab has either been evicted, or 1908 // If the content view doesn't exist, the tab has either been evicted, or
(...skipping 183 matching lines...) Expand 10 before | Expand all | Expand 10 after
2027 CRWSessionController* sessionController = self.sessionController; 2092 CRWSessionController* sessionController = self.sessionController;
2028 const web::ScopedNavigationItemImplList& items = sessionController.items; 2093 const web::ScopedNavigationItemImplList& items = sessionController.items;
2029 if (index < 0 || index >= static_cast<int>(items.size())) { 2094 if (index < 0 || index >= static_cast<int>(items.size())) {
2030 NOTREACHED(); 2095 NOTREACHED();
2031 return; 2096 return;
2032 } 2097 }
2033 2098
2034 if (!_webStateImpl->IsShowingWebInterstitial()) 2099 if (!_webStateImpl->IsShowingWebInterstitial())
2035 [self recordStateInHistory]; 2100 [self recordStateInHistory];
2036 2101
2037 [self clearTransientContentView];
2038
2039 // Update the user agent before attempting the navigation.
2040 web::NavigationItem* toItem = items[index].get();
2041 web::NavigationItem* previousItem = sessionController.currentItem; 2102 web::NavigationItem* previousItem = sessionController.currentItem;
2103 GURL previousURL = previousItem ? previousItem->GetURL() : GURL::EmptyGURL();
2042 web::UserAgentType previousUserAgentType = 2104 web::UserAgentType previousUserAgentType =
2043 previousItem ? previousItem->GetUserAgentType() 2105 previousItem ? previousItem->GetUserAgentType()
2044 : web::UserAgentType::NONE; 2106 : web::UserAgentType::NONE;
2045 [self updateDesktopUserAgentForItem:toItem 2107 web::NavigationItem* toItem = items[index].get();
2046 previousUserAgentType:previousUserAgentType];
2047
2048 BOOL sameDocumentNavigation = 2108 BOOL sameDocumentNavigation =
2049 [sessionController isSameDocumentNavigationBetweenItem:previousItem 2109 [sessionController isSameDocumentNavigationBetweenItem:previousItem
2050 andItem:toItem]; 2110 andItem:toItem];
2051 if (sameDocumentNavigation) { 2111
2112 NSUserDefaults* userDefaults = [NSUserDefaults standardUserDefaults];
2113 if (![userDefaults boolForKey:@"PendingIndexNavigationDisabled"]) {
2114 [self clearTransientContentView];
2115
2116 // Update the user agent before attempting the navigation.
2117 [self updateDesktopUserAgentForItem:toItem
2118 previousUserAgentType:previousUserAgentType];
2119
2120 if (sameDocumentNavigation) {
2121 [sessionController goToItemAtIndex:index];
2122 [self updateHTML5HistoryState];
2123 } else {
2124 [sessionController discardNonCommittedItems];
2125 [sessionController setPendingItemIndex:index];
2126
2127 web::NavigationItemImpl* pendingItem = sessionController.pendingItem;
2128 pendingItem->SetTransitionType(ui::PageTransitionFromInt(
2129 pendingItem->GetTransitionType() | ui::PAGE_TRANSITION_FORWARD_BACK));
2130
2131 [self loadCurrentURL];
2132 }
2133 } else {
2052 [sessionController goToItemAtIndex:index]; 2134 [sessionController goToItemAtIndex:index];
2053 [self updateHTML5HistoryState]; 2135 if (previousURL.is_valid()) {
2054 } else { 2136 [self finishHistoryNavigationFromURL:previousURL
2055 [sessionController discardNonCommittedItems]; 2137 userAgentType:previousUserAgentType
2056 [sessionController setPendingItemIndex:index]; 2138 sameDocument:sameDocumentNavigation];
2057 2139 }
2058 web::NavigationItemImpl* pendingItem = sessionController.pendingItem;
2059 pendingItem->SetTransitionType(ui::PageTransitionFromInt(
2060 pendingItem->GetTransitionType() | ui::PAGE_TRANSITION_FORWARD_BACK));
2061
2062 [self loadCurrentURL];
2063 } 2140 }
2064 } 2141 }
2065 2142
2066 - (BOOL)isLoaded { 2143 - (BOOL)isLoaded {
2067 return _loadPhase == web::PAGE_LOADED; 2144 return _loadPhase == web::PAGE_LOADED;
2068 } 2145 }
2069 2146
2070 - (void)didFinishNavigation { 2147 - (void)didFinishNavigation {
2071 // This can be called at multiple times after the document has loaded. Do 2148 // This can be called at multiple times after the document has loaded. Do
2072 // nothing if the document has already loaded. 2149 // nothing if the document has already loaded.
(...skipping 73 matching lines...) Expand 10 before | Expand all | Expand 10 after
2146 [self reload]; 2223 [self reload];
2147 return; 2224 return;
2148 } 2225 }
2149 2226
2150 if (self.navigationManagerImpl->CanGoToOffset(delta)) { 2227 if (self.navigationManagerImpl->CanGoToOffset(delta)) {
2151 NSInteger index = self.navigationManagerImpl->GetIndexForOffset(delta); 2228 NSInteger index = self.navigationManagerImpl->GetIndexForOffset(delta);
2152 [self goToItemAtIndex:index]; 2229 [self goToItemAtIndex:index];
2153 } 2230 }
2154 } 2231 }
2155 2232
2233 - (void)finishHistoryNavigationFromURL:(const GURL&)fromURL
2234 userAgentType:(web::UserAgentType)fromUserAgentType
2235 sameDocument:(BOOL)sameDocument {
2236 [self webWillFinishHistoryNavigationWithPreviousUserAgentType:
2237 fromUserAgentType];
2238
2239 // Only load the new URL if it has a different document than |fromEntry| to
2240 // prevent extra page loads from NavigationItems created by hash changes or
2241 // calls to window.history.pushState().
2242 web::NavigationItem* currentItem = self.currentNavItem;
2243 GURL endURL =
2244 [self URLForHistoryNavigationToItem:currentItem previousURL:fromURL];
2245 if (!sameDocument) {
2246 ui::PageTransition transition = ui::PageTransitionFromInt(
2247 ui::PAGE_TRANSITION_RELOAD | ui::PAGE_TRANSITION_FORWARD_BACK);
2248
2249 NavigationManager::WebLoadParams params(endURL);
2250 if (currentItem) {
2251 params.referrer = currentItem->GetReferrer();
2252 }
2253 params.transition_type = transition;
2254 [self loadWithParams:params];
2255 }
2256 // If this is a same-document navigation, update the HTML5 history state
2257 // immediately. For cross-document navigations, the history state will be
2258 // updated after the navigation is committed, as attempting to replace the URL
2259 // here will result in a JavaScript SecurityError due to the URLs having
2260 // different origins.
2261 if (sameDocument)
2262 [self updateHTML5HistoryState];
2263 }
2264
2156 - (void)addGestureRecognizerToWebView:(UIGestureRecognizer*)recognizer { 2265 - (void)addGestureRecognizerToWebView:(UIGestureRecognizer*)recognizer {
2157 if ([_gestureRecognizers containsObject:recognizer]) 2266 if ([_gestureRecognizers containsObject:recognizer])
2158 return; 2267 return;
2159 2268
2160 [_webView addGestureRecognizer:recognizer]; 2269 [_webView addGestureRecognizer:recognizer];
2161 [_gestureRecognizers addObject:recognizer]; 2270 [_gestureRecognizers addObject:recognizer];
2162 } 2271 }
2163 2272
2164 - (void)removeGestureRecognizerFromWebView:(UIGestureRecognizer*)recognizer { 2273 - (void)removeGestureRecognizerFromWebView:(UIGestureRecognizer*)recognizer {
2165 if (![_gestureRecognizers containsObject:recognizer]) 2274 if (![_gestureRecognizers containsObject:recognizer])
(...skipping 69 matching lines...) Expand 10 before | Expand all | Expand 10 after
2235 [delegate webController:strongSelf didLoadPassKitObject:data]; 2344 [delegate webController:strongSelf didLoadPassKitObject:data];
2236 } 2345 }
2237 }; 2346 };
2238 web::BrowserState* browserState = self.webStateImpl->GetBrowserState(); 2347 web::BrowserState* browserState = self.webStateImpl->GetBrowserState();
2239 _passKitDownloader.reset([[CRWPassKitDownloader alloc] 2348 _passKitDownloader.reset([[CRWPassKitDownloader alloc]
2240 initWithContextGetter:browserState->GetRequestContext() 2349 initWithContextGetter:browserState->GetRequestContext()
2241 completionHandler:passKitCompletion]); 2350 completionHandler:passKitCompletion]);
2242 return _passKitDownloader.get(); 2351 return _passKitDownloader.get();
2243 } 2352 }
2244 2353
2354 - (void)webWillFinishHistoryNavigationWithPreviousUserAgentType:
2355 (web::UserAgentType)userAgentType {
2356 [self updateDesktopUserAgentForItem:self.currentNavItem
2357 previousUserAgentType:userAgentType];
2358 [_delegate webWillFinishHistoryNavigation];
2359 }
2360
2245 - (void)updateDesktopUserAgentForItem:(web::NavigationItem*)item 2361 - (void)updateDesktopUserAgentForItem:(web::NavigationItem*)item
2246 previousUserAgentType:(web::UserAgentType)userAgentType { 2362 previousUserAgentType:(web::UserAgentType)userAgentType {
2247 if (!item) 2363 if (!item)
2248 return; 2364 return;
2249 web::UserAgentType itemUserAgentType = item->GetUserAgentType(); 2365 web::UserAgentType itemUserAgentType = item->GetUserAgentType();
2250 if (itemUserAgentType == web::UserAgentType::NONE) 2366 if (itemUserAgentType == web::UserAgentType::NONE)
2251 return; 2367 return;
2252 if (itemUserAgentType != userAgentType) 2368 if (itemUserAgentType != userAgentType)
2253 [self requirePageReconstruction]; 2369 [self requirePageReconstruction];
2254 } 2370 }
(...skipping 2819 matching lines...) Expand 10 before | Expand all | Expand 10 after
5074 - (void)simulateLoadRequestWithURL:(const GURL&)URL { 5190 - (void)simulateLoadRequestWithURL:(const GURL&)URL {
5075 _lastRegisteredRequestURL = URL; 5191 _lastRegisteredRequestURL = URL;
5076 _loadPhase = web::LOAD_REQUESTED; 5192 _loadPhase = web::LOAD_REQUESTED;
5077 } 5193 }
5078 5194
5079 - (NSString*)referrerFromNavigationAction:(WKNavigationAction*)action { 5195 - (NSString*)referrerFromNavigationAction:(WKNavigationAction*)action {
5080 return [action.request valueForHTTPHeaderField:kReferrerHeaderName]; 5196 return [action.request valueForHTTPHeaderField:kReferrerHeaderName];
5081 } 5197 }
5082 5198
5083 @end 5199 @end
OLDNEW
« no previous file with comments | « ios/web/public/web_state/ui/crw_web_delegate.h ('k') | ios/web/web_state/ui/crw_web_controller_unittest.mm » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698