| OLD | NEW |
| 1 /* | 1 /* |
| 2 * Copyright (C) 2006, 2007, 2008, 2009, 2010, 2011 Apple Inc. All rights reserv
ed. | 2 * Copyright (C) 2006, 2007, 2008, 2009, 2010, 2011 Apple Inc. All rights reserv
ed. |
| 3 * Copyright (C) 2008 Nokia Corporation and/or its subsidiary(-ies) | 3 * Copyright (C) 2008 Nokia Corporation and/or its subsidiary(-ies) |
| 4 * Copyright (C) 2008, 2009 Torch Mobile Inc. All rights reserved. (http://www.t
orchmobile.com/) | 4 * Copyright (C) 2008, 2009 Torch Mobile Inc. All rights reserved. (http://www.t
orchmobile.com/) |
| 5 * Copyright (C) 2008 Alp Toker <alp@atoker.com> | 5 * Copyright (C) 2008 Alp Toker <alp@atoker.com> |
| 6 * Copyright (C) Research In Motion Limited 2009. All rights reserved. | 6 * Copyright (C) Research In Motion Limited 2009. All rights reserved. |
| 7 * Copyright (C) 2011 Kris Jordan <krisjordan@gmail.com> | 7 * Copyright (C) 2011 Kris Jordan <krisjordan@gmail.com> |
| 8 * Copyright (C) 2011 Google Inc. All rights reserved. | 8 * Copyright (C) 2011 Google Inc. All rights reserved. |
| 9 * | 9 * |
| 10 * Redistribution and use in source and binary forms, with or without | 10 * Redistribution and use in source and binary forms, with or without |
| (...skipping 254 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 265 if (!m_currentItem || !m_frame->view()) | 265 if (!m_currentItem || !m_frame->view()) |
| 266 return; | 266 return; |
| 267 | 267 |
| 268 // Shouldn't clobber anything if we might still restore later. | 268 // Shouldn't clobber anything if we might still restore later. |
| 269 if (needsHistoryItemRestore(m_loadType) && m_documentLoader && | 269 if (needsHistoryItemRestore(m_loadType) && m_documentLoader && |
| 270 !m_documentLoader->initialScrollState().wasScrolledByUser) | 270 !m_documentLoader->initialScrollState().wasScrolledByUser) |
| 271 return; | 271 return; |
| 272 | 272 |
| 273 if (ScrollableArea* layoutScrollableArea = | 273 if (ScrollableArea* layoutScrollableArea = |
| 274 m_frame->view()->layoutViewportScrollableArea()) | 274 m_frame->view()->layoutViewportScrollableArea()) |
| 275 m_currentItem->setScrollPoint(layoutScrollableArea->scrollPosition()); | 275 m_currentItem->setScrollOffset(layoutScrollableArea->scrollOffset()); |
| 276 m_currentItem->setVisualViewportScrollPoint( | 276 m_currentItem->setVisualViewportScrollOffset(toScrollOffset( |
| 277 m_frame->host()->visualViewport().visibleRect().location()); | 277 m_frame->host()->visualViewport().visibleRect().location())); |
| 278 | 278 |
| 279 if (m_frame->isMainFrame()) | 279 if (m_frame->isMainFrame()) |
| 280 m_currentItem->setPageScaleFactor(m_frame->page()->pageScaleFactor()); | 280 m_currentItem->setPageScaleFactor(m_frame->page()->pageScaleFactor()); |
| 281 | 281 |
| 282 client()->didUpdateCurrentHistoryItem(); | 282 client()->didUpdateCurrentHistoryItem(); |
| 283 } | 283 } |
| 284 | 284 |
| 285 void FrameLoader::dispatchUnloadEvent() { | 285 void FrameLoader::dispatchUnloadEvent() { |
| 286 NavigationDisablerForUnload navigationDisabler; | 286 NavigationDisablerForUnload navigationDisabler; |
| 287 | 287 |
| (...skipping 125 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 413 if (!oldItem || isBackForwardLoadType(loadType)) | 413 if (!oldItem || isBackForwardLoadType(loadType)) |
| 414 return; | 414 return; |
| 415 // Don't propagate state from the old item if this is a different-document nav
igation, unless the before | 415 // Don't propagate state from the old item if this is a different-document nav
igation, unless the before |
| 416 // and after pages are logically related. This means they have the same url (i
gnoring fragment) and | 416 // and after pages are logically related. This means they have the same url (i
gnoring fragment) and |
| 417 // the new item was loaded via reload or client redirect. | 417 // the new item was loaded via reload or client redirect. |
| 418 if (navigationType == HistoryNavigationType::DifferentDocument && | 418 if (navigationType == HistoryNavigationType::DifferentDocument && |
| 419 (historyCommitType != HistoryInertCommit || | 419 (historyCommitType != HistoryInertCommit || |
| 420 !equalIgnoringFragmentIdentifier(oldItem->url(), m_currentItem->url()))) | 420 !equalIgnoringFragmentIdentifier(oldItem->url(), m_currentItem->url()))) |
| 421 return; | 421 return; |
| 422 m_currentItem->setDocumentSequenceNumber(oldItem->documentSequenceNumber()); | 422 m_currentItem->setDocumentSequenceNumber(oldItem->documentSequenceNumber()); |
| 423 m_currentItem->setScrollPoint(oldItem->scrollPoint()); | 423 m_currentItem->setScrollOffset(oldItem->scrollOffset()); |
| 424 m_currentItem->setVisualViewportScrollPoint( | 424 m_currentItem->setVisualViewportScrollOffset( |
| 425 oldItem->visualViewportScrollPoint()); | 425 oldItem->visualViewportScrollOffset()); |
| 426 m_currentItem->setPageScaleFactor(oldItem->pageScaleFactor()); | 426 m_currentItem->setPageScaleFactor(oldItem->pageScaleFactor()); |
| 427 m_currentItem->setScrollRestorationType(oldItem->scrollRestorationType()); | 427 m_currentItem->setScrollRestorationType(oldItem->scrollRestorationType()); |
| 428 | 428 |
| 429 // The item sequence number determines whether items are "the same", such back
/forward navigation | 429 // The item sequence number determines whether items are "the same", such back
/forward navigation |
| 430 // between items with the same item sequence number is a no-op. Only treat thi
s as identical if the | 430 // between items with the same item sequence number is a no-op. Only treat thi
s as identical if the |
| 431 // navigation did not create a back/forward entry and the url is identical or
it was loaded via | 431 // navigation did not create a back/forward entry and the url is identical or
it was loaded via |
| 432 // history.replaceState(). | 432 // history.replaceState(). |
| 433 if (historyCommitType == HistoryInertCommit && | 433 if (historyCommitType == HistoryInertCommit && |
| 434 (navigationType == HistoryNavigationType::HistoryApi || | 434 (navigationType == HistoryNavigationType::HistoryApi || |
| 435 oldItem->url() == m_currentItem->url())) { | 435 oldItem->url() == m_currentItem->url())) { |
| (...skipping 880 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1316 | 1316 |
| 1317 // This tries to balance: | 1317 // This tries to balance: |
| 1318 // 1. restoring as soon as possible | 1318 // 1. restoring as soon as possible |
| 1319 // 2. not overriding user scroll (TODO(majidvp): also respect user scale) | 1319 // 2. not overriding user scroll (TODO(majidvp): also respect user scale) |
| 1320 // 3. detecting clamping to avoid repeatedly popping the scroll position | 1320 // 3. detecting clamping to avoid repeatedly popping the scroll position |
| 1321 // down as the page height increases | 1321 // down as the page height increases |
| 1322 // 4. ignore clamp detection if we are not restoring scroll or after load | 1322 // 4. ignore clamp detection if we are not restoring scroll or after load |
| 1323 // completes because that may be because the page will never reach its | 1323 // completes because that may be because the page will never reach its |
| 1324 // previous height | 1324 // previous height |
| 1325 bool canRestoreWithoutClamping = | 1325 bool canRestoreWithoutClamping = |
| 1326 view->layoutViewportScrollableArea()->clampScrollPosition( | 1326 view->layoutViewportScrollableArea()->clampScrollOffset( |
| 1327 m_currentItem->scrollPoint()) == m_currentItem->scrollPoint(); | 1327 m_currentItem->scrollOffset()) == m_currentItem->scrollOffset(); |
| 1328 bool canRestoreWithoutAnnoyingUser = | 1328 bool canRestoreWithoutAnnoyingUser = |
| 1329 !documentLoader()->initialScrollState().wasScrolledByUser && | 1329 !documentLoader()->initialScrollState().wasScrolledByUser && |
| 1330 (canRestoreWithoutClamping || !m_frame->isLoading() || | 1330 (canRestoreWithoutClamping || !m_frame->isLoading() || |
| 1331 !shouldRestoreScroll); | 1331 !shouldRestoreScroll); |
| 1332 if (!canRestoreWithoutAnnoyingUser) | 1332 if (!canRestoreWithoutAnnoyingUser) |
| 1333 return; | 1333 return; |
| 1334 | 1334 |
| 1335 if (shouldRestoreScroll) | 1335 if (shouldRestoreScroll) { |
| 1336 view->layoutViewportScrollableArea()->setScrollPosition( | 1336 view->layoutViewportScrollableArea()->setScrollOffset( |
| 1337 m_currentItem->scrollPoint(), ProgrammaticScroll); | 1337 m_currentItem->scrollOffset(), ProgrammaticScroll); |
| 1338 } |
| 1338 | 1339 |
| 1339 // For main frame restore scale and visual viewport position | 1340 // For main frame restore scale and visual viewport position |
| 1340 if (m_frame->isMainFrame()) { | 1341 if (m_frame->isMainFrame()) { |
| 1341 FloatPoint visualViewportOffset(m_currentItem->visualViewportScrollPoint()); | 1342 ScrollOffset visualViewportOffset( |
| 1343 m_currentItem->visualViewportScrollOffset()); |
| 1342 | 1344 |
| 1343 // If the visual viewport's offset is (-1, -1) it means the history item | 1345 // If the visual viewport's offset is (-1, -1) it means the history item |
| 1344 // is an old version of HistoryItem so distribute the scroll between | 1346 // is an old version of HistoryItem so distribute the scroll between |
| 1345 // the main frame and the visual viewport as best as we can. | 1347 // the main frame and the visual viewport as best as we can. |
| 1346 if (visualViewportOffset.x() == -1 && visualViewportOffset.y() == -1) | 1348 if (visualViewportOffset.width() == -1 && |
| 1349 visualViewportOffset.height() == -1) { |
| 1347 visualViewportOffset = | 1350 visualViewportOffset = |
| 1348 FloatPoint(m_currentItem->scrollPoint() - view->scrollPosition()); | 1351 m_currentItem->scrollOffset() - view->scrollOffset(); |
| 1352 } |
| 1349 | 1353 |
| 1350 VisualViewport& visualViewport = m_frame->host()->visualViewport(); | 1354 VisualViewport& visualViewport = m_frame->host()->visualViewport(); |
| 1351 if (shouldRestoreScale && shouldRestoreScroll) | 1355 if (shouldRestoreScale && shouldRestoreScroll) { |
| 1352 visualViewport.setScaleAndLocation(m_currentItem->pageScaleFactor(), | 1356 visualViewport.setScaleAndLocation(m_currentItem->pageScaleFactor(), |
| 1353 visualViewportOffset); | 1357 FloatPoint(visualViewportOffset)); |
| 1354 else if (shouldRestoreScale) | 1358 } else if (shouldRestoreScale) { |
| 1355 visualViewport.setScale(m_currentItem->pageScaleFactor()); | 1359 visualViewport.setScale(m_currentItem->pageScaleFactor()); |
| 1356 else if (shouldRestoreScroll) | 1360 } else if (shouldRestoreScroll) { |
| 1357 visualViewport.setLocation(visualViewportOffset); | 1361 visualViewport.setLocation(FloatPoint(visualViewportOffset)); |
| 1362 } |
| 1358 | 1363 |
| 1359 if (ScrollingCoordinator* scrollingCoordinator = | 1364 if (ScrollingCoordinator* scrollingCoordinator = |
| 1360 m_frame->page()->scrollingCoordinator()) | 1365 m_frame->page()->scrollingCoordinator()) |
| 1361 scrollingCoordinator->frameViewRootLayerDidChange(view); | 1366 scrollingCoordinator->frameViewRootLayerDidChange(view); |
| 1362 } | 1367 } |
| 1363 | 1368 |
| 1364 documentLoader()->initialScrollState().didRestoreFromHistory = true; | 1369 documentLoader()->initialScrollState().didRestoreFromHistory = true; |
| 1365 } | 1370 } |
| 1366 | 1371 |
| 1367 String FrameLoader::userAgent() const { | 1372 String FrameLoader::userAgent() const { |
| (...skipping 492 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1860 m_documentLoader ? m_documentLoader->url() : String()); | 1865 m_documentLoader ? m_documentLoader->url() : String()); |
| 1861 return tracedValue; | 1866 return tracedValue; |
| 1862 } | 1867 } |
| 1863 | 1868 |
| 1864 inline void FrameLoader::takeObjectSnapshot() const { | 1869 inline void FrameLoader::takeObjectSnapshot() const { |
| 1865 TRACE_EVENT_OBJECT_SNAPSHOT_WITH_ID("loading", "FrameLoader", this, | 1870 TRACE_EVENT_OBJECT_SNAPSHOT_WITH_ID("loading", "FrameLoader", this, |
| 1866 toTracedValue()); | 1871 toTracedValue()); |
| 1867 } | 1872 } |
| 1868 | 1873 |
| 1869 } // namespace blink | 1874 } // namespace blink |
| OLD | NEW |