Chromium Code Reviews| OLD | NEW |
|---|---|
| 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 // This file adheres to closure-compiler conventions in order to enable | 5 // This file adheres to closure-compiler conventions in order to enable |
| 6 // compilation with ADVANCED_OPTIMIZATIONS. In particular, members that are to | 6 // compilation with ADVANCED_OPTIMIZATIONS. In particular, members that are to |
| 7 // be accessed externally should be specified in this['style'] as opposed to | 7 // be accessed externally should be specified in this['style'] as opposed to |
| 8 // this.style because member identifiers are minified by default. | 8 // this.style because member identifiers are minified by default. |
| 9 // See http://goo.gl/FwOgy | 9 // See http://goo.gl/FwOgy |
| 10 | 10 |
| (...skipping 357 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 368 popstateEvent.state = JSON.parse(stateObject); | 368 popstateEvent.state = JSON.parse(stateObject); |
| 369 | 369 |
| 370 // setTimeout() is used in order to return immediately. Otherwise the | 370 // setTimeout() is used in order to return immediately. Otherwise the |
| 371 // dispatchEvent call waits for all event handlers to return, which could | 371 // dispatchEvent call waits for all event handlers to return, which could |
| 372 // cause a ReentryGuard failure. | 372 // cause a ReentryGuard failure. |
| 373 window.setTimeout(function() { | 373 window.setTimeout(function() { |
| 374 window.dispatchEvent(popstateEvent); | 374 window.dispatchEvent(popstateEvent); |
| 375 }, 0); | 375 }, 0); |
| 376 }; | 376 }; |
| 377 | 377 |
| 378 // Keep the original replaceState() method. It's needed to update UIWebView's | 378 // Keep the original pushState() and replaceState() methods. It's needed to |
| 379 // URL and window.history.state property during history navigations that don't | 379 // update the web view's URL and window.history.state property during history |
| 380 // cause a page load. | 380 // navigations that don't cause a page load. |
| 381 var originalWindowHistoryPushState = window.history.pushState; | |
| 381 var originalWindowHistoryReplaceState = window.history.replaceState; | 382 var originalWindowHistoryReplaceState = window.history.replaceState; |
| 382 __gCrWeb['replaceWebViewURL'] = function(url, stateObject) { | 383 __gCrWeb['replaceWebViewURL'] = function(url, stateObject) { |
| 383 originalWindowHistoryReplaceState.call(history, stateObject, '', url); | 384 originalWindowHistoryReplaceState.call(history, stateObject, '', url); |
| 384 }; | 385 }; |
| 385 | 386 |
| 386 // Intercept window.history methods to call back/forward natively. | 387 // Intercept window.history methods to call back/forward natively. |
| 387 window.history.back = function() { | 388 window.history.back = function() { |
| 388 invokeOnHost_({'command': 'window.history.back'}); | 389 invokeOnHost_({'command': 'window.history.back'}); |
| 389 }; | 390 }; |
| 390 window.history.forward = function() { | 391 window.history.forward = function() { |
| 391 invokeOnHost_({'command': 'window.history.forward'}); | 392 invokeOnHost_({'command': 'window.history.forward'}); |
| 392 }; | 393 }; |
| 393 window.history.go = function(delta) { | 394 window.history.go = function(delta) { |
| 394 invokeOnHost_({'command': 'window.history.go', 'value': delta}); | 395 invokeOnHost_({'command': 'window.history.go', 'value': delta}); |
| 395 }; | 396 }; |
| 396 window.history.pushState = function(stateObject, pageTitle, pageUrl) { | 397 window.history.pushState = function(stateObject, pageTitle, pageUrl) { |
| 397 __gCrWeb.message.invokeOnHost( | 398 __gCrWeb.message.invokeOnHost( |
| 398 {'command': 'window.history.willChangeState'}); | 399 {'command': 'window.history.willChangeState'}); |
| 399 // Calling stringify() on undefined causes a JSON parse error. | 400 // Calling stringify() on undefined causes a JSON parse error. |
| 400 var serializedState = | 401 var serializedState = |
| 401 typeof(stateObject) == 'undefined' ? '' : | 402 typeof(stateObject) == 'undefined' ? '' : |
| 402 __gCrWeb.common.JSONStringify(stateObject); | 403 __gCrWeb.common.JSONStringify(stateObject); |
| 403 pageUrl = pageUrl || window.location.href; | 404 pageUrl = pageUrl || window.location.href; |
| 404 originalWindowHistoryReplaceState.call(history, stateObject, '', pageUrl); | 405 originalWindowHistoryPushState.call(history, stateObject, '', pageUrl); |
|
Eugene But (OOO till 7-30)
2016/01/04 20:52:30
I think you want to pass pageTitle as well, otherw
Jackie Quinn
2016/01/04 21:16:58
Done.
| |
| 405 invokeOnHost_({'command': 'window.history.didPushState', | 406 invokeOnHost_({'command': 'window.history.didPushState', |
| 406 'stateObject': serializedState, | 407 'stateObject': serializedState, |
| 407 'baseUrl': document.baseURI, | 408 'baseUrl': document.baseURI, |
| 408 'pageUrl': pageUrl.toString()}); | 409 'pageUrl': pageUrl.toString()}); |
| 409 }; | 410 }; |
| 410 window.history.replaceState = function(stateObject, pageTitle, pageUrl) { | 411 window.history.replaceState = function(stateObject, pageTitle, pageUrl) { |
| 411 __gCrWeb.message.invokeOnHost( | 412 __gCrWeb.message.invokeOnHost( |
| 412 {'command': 'window.history.willChangeState'}); | 413 {'command': 'window.history.willChangeState'}); |
| 413 | 414 |
| 414 // Calling stringify() on undefined causes a JSON parse error. | 415 // Calling stringify() on undefined causes a JSON parse error. |
| (...skipping 237 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 652 | 653 |
| 653 // Handle or wait for and handle document load completion, if applicable. | 654 // Handle or wait for and handle document load completion, if applicable. |
| 654 if (__gCrWeb.core_dynamic.handleDocumentLoaded) | 655 if (__gCrWeb.core_dynamic.handleDocumentLoaded) |
| 655 __gCrWeb.core_dynamic.handleDocumentLoaded(); | 656 __gCrWeb.core_dynamic.handleDocumentLoaded(); |
| 656 | 657 |
| 657 return true; | 658 return true; |
| 658 }; | 659 }; |
| 659 | 660 |
| 660 __gCrWeb.core.documentInject(); | 661 __gCrWeb.core.documentInject(); |
| 661 }()); // End of anonymous object | 662 }()); // End of anonymous object |
| OLD | NEW |