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

Unified Diff: Source/core/loader/FrameLoader.cpp

Issue 319573008: Navigation transitions: Initiate navigation transition and send serialized markup to Chrome (Closed) Base URL: https://chromium.googlesource.com/chromium/blink.git@transitions_editing
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 side-by-side diff with in-line comments
Download patch
Index: Source/core/loader/FrameLoader.cpp
diff --git a/Source/core/loader/FrameLoader.cpp b/Source/core/loader/FrameLoader.cpp
index 8147af34e14c1077d603442f6fea78bacb2dd1b5..d145ce57558f155c6466fd472d50fa6db07f80d7 100644
--- a/Source/core/loader/FrameLoader.cpp
+++ b/Source/core/loader/FrameLoader.cpp
@@ -1272,6 +1272,31 @@ bool FrameLoader::shouldClose()
return shouldClose;
}
+bool FrameLoader::validateTransitionNavigationMode()
+{
+ if (frame()->document()->inQuirksMode()) {
+ frame()->document()->addConsoleMessage(JSMessageSource, ErrorMessageLevel, "Ignoring transition elements due to quirks mode.");
+ return false;
+ }
+
+ // FIXME(oysteine): Also check for width=device-width here, to avoid zoom/scaling issues.
+ return true;
+}
+
+bool FrameLoader::dispatchAnyNavigationTransitionData()
+{
+ Vector<Document::TransitionElementData> elementData;
+ frame()->document()->getTransitionElementData(&elementData, IGNORE_EXCEPTION);
esprehn 2014/06/13 08:50:18 We don't allow NodeList and the other things you u
oystein (OOO til 10th of July) 2014/06/13 17:52:27 Avoiding getElementsByTagName seems easy enough, b
+ if (elementData.isEmpty() || !validateTransitionNavigationMode())
esprehn 2014/06/13 08:50:18 The validateTransitionNavigationMode() check shoul
oystein (OOO til 10th of July) 2014/06/18 00:04:08 validateTransitionNavigationMode() also tosses som
+ return false;
+
+ Vector<Document::TransitionElementData>::iterator iter = elementData.begin();
+ for (; iter != elementData.end(); ++iter)
+ client()->dispatchAddNavigationTransitionData(iter->scope, iter->markup);
+
+ return true;
+}
+
void FrameLoader::loadWithNavigationAction(const NavigationAction& action, FrameLoadType type, PassRefPtrWillBeRawPtr<FormState> formState, const SubstituteData& substituteData, ClientRedirectPolicy clientRedirect, const AtomicString& overrideEncoding)
{
ASSERT(client()->hasWebView());
@@ -1301,9 +1326,14 @@ void FrameLoader::loadWithNavigationAction(const NavigationAction& action, Frame
else if (m_documentLoader)
m_policyDocumentLoader->setOverrideEncoding(m_documentLoader->overrideEncoding());
+
+ bool isTransitionNavigation = false;
+ if (RuntimeEnabledFeatures::navigationTransitionsEnabled())
+ isTransitionNavigation = dispatchAnyNavigationTransitionData();
esprehn 2014/06/13 08:50:18 Remove "Any".
oystein (OOO til 10th of July) 2014/06/18 00:04:08 Done.
+
// stopAllLoaders can detach the LocalFrame, so protect it.
RefPtr<LocalFrame> protect(m_frame);
- if ((!m_policyDocumentLoader->shouldContinueForNavigationPolicy(request) || !shouldClose()) && m_policyDocumentLoader) {
+ if ((!m_policyDocumentLoader->shouldContinueForNavigationPolicy(request, isTransitionNavigation) || !shouldClose()) && m_policyDocumentLoader) {
m_policyDocumentLoader->detachFromFrame();
m_policyDocumentLoader = nullptr;
return;
@@ -1337,7 +1367,7 @@ void FrameLoader::loadWithNavigationAction(const NavigationAction& action, Frame
if (m_provisionalDocumentLoader->isClientRedirect())
m_provisionalDocumentLoader->appendRedirect(m_frame->document()->url());
m_provisionalDocumentLoader->appendRedirect(m_provisionalDocumentLoader->request().url());
- client()->dispatchDidStartProvisionalLoad();
+ client()->dispatchDidStartProvisionalLoad(isTransitionNavigation);
ASSERT(m_provisionalDocumentLoader);
m_provisionalDocumentLoader->startLoadingMainResource();
}

Powered by Google App Engine
This is Rietveld 408576698