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

Side by Side Diff: chrome/browser/resources/uber/uber.js

Issue 306043002: uber: use the URL to resolve the subpage in popstate. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 6 years, 6 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 | « no previous file | no next file » | 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) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 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 cr.define('uber', function() { 5 cr.define('uber', function() {
6 /** 6 /**
7 * Options for how web history should be handled. 7 * Options for how web history should be handled.
8 */ 8 */
9 var HISTORY_STATE_OPTION = { 9 var HISTORY_STATE_OPTION = {
10 PUSH: 1, // Push a new history state. 10 PUSH: 1, // Push a new history state.
(...skipping 82 matching lines...) Expand 10 before | Expand all | Expand 10 after
93 if (!params.id) 93 if (!params.id)
94 params.id = getDefaultIframe().id; 94 params.id = getDefaultIframe().id;
95 95
96 return params; 96 return params;
97 } 97 }
98 98
99 /** 99 /**
100 * Handler for window.onpopstate. 100 * Handler for window.onpopstate.
101 * @param {Event} e The history event. 101 * @param {Event} e The history event.
102 */ 102 */
103 function onPopHistoryState(e) { 103 function onPopHistoryState(e) {
Dan Beam 2014/05/29 20:42:10 what happens in the case of !e.state? should we p
Dan Beam 2014/05/29 20:45:52 nevermind, I see what's happening here (and in ube
104 if (e.state && e.state.pageId) { 104 // Use the URL to determine which page to route to.
105 var params = resolvePageInfo(); 105 var params = resolvePageInfo();
106 assert(params.id === e.state.pageId);
107 106
108 // If the page isn't the current page, load it fresh. Even if the page is 107 // If the page isn't the current page, load it fresh. Even if the page is
109 // already loaded, it may have state not reflected in the URL, such as the 108 // already loaded, it may have state not reflected in the URL, such as the
110 // history page's "Remove selected items" overlay. http://crbug.com/377386 109 // history page's "Remove selected items" overlay. http://crbug.com/377386
111 if (getRequiredElement(params.id) !== getSelectedIframe()) 110 if (getRequiredElement(params.id) !== getSelectedIframe())
112 showPage(params.id, HISTORY_STATE_OPTION.NONE, params.path); 111 showPage(params.id, HISTORY_STATE_OPTION.NONE, params.path);
113 112
114 // Either way, send the state down to it. 113 // Either way, send the state down to it.
115 // 114 //
116 // Note: This assumes that the state and path parameters for every page 115 // Note: This assumes that the state and path parameters for every page
117 // under this origin are compatible. All of the downstream pages which 116 // under this origin are compatible. All of the downstream pages which
118 // navigate use pushState and replaceState. 117 // navigate use pushState and replaceState.
119 invokeMethodOnPage(e.state.pageId, 'popState', 118 invokeMethodOnPage(params.id, 'popState',
120 {state: e.state.pageState, path: params.path}); 119 {state: e.state, path: params.path});
121 }
122 } 120 }
123 121
124 /** 122 /**
125 * @return {Object} The default iframe container. 123 * @return {Object} The default iframe container.
126 */ 124 */
127 function getDefaultIframe() { 125 function getDefaultIframe() {
128 return $(loadTimeData.getString('helpHost')); 126 return $(loadTimeData.getString('helpHost'));
129 } 127 }
130 128
131 /** 129 /**
(...skipping 100 matching lines...) Expand 10 before | Expand all | Expand 10 after
232 230
233 var histFunc; 231 var histFunc;
234 if (historyOption == HISTORY_STATE_OPTION.PUSH) 232 if (historyOption == HISTORY_STATE_OPTION.PUSH)
235 histFunc = window.history.pushState; 233 histFunc = window.history.pushState;
236 else if (historyOption == HISTORY_STATE_OPTION.REPLACE) 234 else if (historyOption == HISTORY_STATE_OPTION.REPLACE)
237 histFunc = window.history.replaceState; 235 histFunc = window.history.replaceState;
238 236
239 assert(histFunc, 'invalid historyOption given ' + historyOption); 237 assert(histFunc, 'invalid historyOption given ' + historyOption);
240 238
241 var pageId = getSelectedIframe().id; 239 var pageId = getSelectedIframe().id;
242 var args = [{pageId: pageId, pageState: state}, 240 var args = [state, '', '/' + pageId + '/' + (path || '')];
243 '',
244 '/' + pageId + '/' + (path || '')];
245 histFunc.apply(window.history, args); 241 histFunc.apply(window.history, args);
246 } 242 }
247 243
248 /** 244 /**
249 * Adds or replaces the current history entry based on a navigation from the 245 * Adds or replaces the current history entry based on a navigation from the
250 * source iframe. 246 * source iframe.
251 * @param {string} origin The origin of the source iframe. 247 * @param {string} origin The origin of the source iframe.
252 * @param {Object} state The source iframe's state object. 248 * @param {Object} state The source iframe's state object.
253 * @param {string} path The new "path" (e.g. "/createProfile"). 249 * @param {string} path The new "path" (e.g. "/createProfile").
254 * @param {boolean} replace Whether to replace the current history entry. 250 * @param {boolean} replace Whether to replace the current history entry.
(...skipping 195 matching lines...) Expand 10 before | Expand all | Expand 10 after
450 } 446 }
451 447
452 return { 448 return {
453 onLoad: onLoad, 449 onLoad: onLoad,
454 onPopHistoryState: onPopHistoryState 450 onPopHistoryState: onPopHistoryState
455 }; 451 };
456 }); 452 });
457 453
458 window.addEventListener('popstate', uber.onPopHistoryState); 454 window.addEventListener('popstate', uber.onPopHistoryState);
459 document.addEventListener('DOMContentLoaded', uber.onLoad); 455 document.addEventListener('DOMContentLoaded', uber.onLoad);
OLDNEW
« no previous file with comments | « no previous file | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698