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

Side by Side 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: Rebase Created 6 years, 5 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
« no previous file with comments | « Source/core/loader/FrameLoader.h ('k') | Source/core/loader/FrameLoaderClient.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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 1245 matching lines...) Expand 10 before | Expand all | Expand 10 after
1256 if (!targetFrames[i]->document()->dispatchBeforeUnloadEvent(page->ch rome(), didAllowNavigation)) 1256 if (!targetFrames[i]->document()->dispatchBeforeUnloadEvent(page->ch rome(), didAllowNavigation))
1257 break; 1257 break;
1258 } 1258 }
1259 1259
1260 if (i == targetFrames.size()) 1260 if (i == targetFrames.size())
1261 shouldClose = true; 1261 shouldClose = true;
1262 } 1262 }
1263 return shouldClose; 1263 return shouldClose;
1264 } 1264 }
1265 1265
1266 bool FrameLoader::validateTransitionNavigationMode()
1267 {
1268 if (frame()->document()->inQuirksMode()) {
1269 frame()->document()->addConsoleMessage(JSMessageSource, ErrorMessageLeve l, "Ignoring transition elements due to quirks mode.");
1270 return false;
1271 }
1272
1273 // FIXME(oysteine): Also check for width=device-width here, to avoid zoom/sc aling issues.
1274 return true;
1275 }
1276
1277 bool FrameLoader::dispatchNavigationTransitionData()
1278 {
1279 Vector<Document::TransitionElementData> elementData;
1280 frame()->document()->getTransitionElementData(elementData);
1281 if (elementData.isEmpty() || !validateTransitionNavigationMode())
1282 return false;
1283
1284 Vector<Document::TransitionElementData>::iterator iter = elementData.begin() ;
1285 for (; iter != elementData.end(); ++iter)
1286 client()->dispatchAddNavigationTransitionData(iter->scope, iter->selecto r, iter->markup);
1287
1288 return true;
1289 }
1290
1266 void FrameLoader::loadWithNavigationAction(const NavigationAction& action, Frame LoadType type, PassRefPtrWillBeRawPtr<FormState> formState, const SubstituteData & substituteData, ContentSecurityPolicyCheck shouldCheckMainWorldContentSecurity Policy, ClientRedirectPolicy clientRedirect, const AtomicString& overrideEncodin g) 1291 void FrameLoader::loadWithNavigationAction(const NavigationAction& action, Frame LoadType type, PassRefPtrWillBeRawPtr<FormState> formState, const SubstituteData & substituteData, ContentSecurityPolicyCheck shouldCheckMainWorldContentSecurity Policy, ClientRedirectPolicy clientRedirect, const AtomicString& overrideEncodin g)
1267 { 1292 {
1268 ASSERT(client()->hasWebView()); 1293 ASSERT(client()->hasWebView());
1269 if (m_frame->document()->pageDismissalEventBeingDispatched() != Document::No Dismissal) 1294 if (m_frame->document()->pageDismissalEventBeingDispatched() != Document::No Dismissal)
1270 return; 1295 return;
1271 1296
1272 const ResourceRequest& request = action.resourceRequest(); 1297 const ResourceRequest& request = action.resourceRequest();
1273 1298
1274 // The current load should replace the history item if it is the first real 1299 // The current load should replace the history item if it is the first real
1275 // load of the frame. 1300 // load of the frame.
1276 bool replacesCurrentHistoryItem = false; 1301 bool replacesCurrentHistoryItem = false;
1277 if (type == FrameLoadTypeRedirectWithLockedBackForwardList 1302 if (type == FrameLoadTypeRedirectWithLockedBackForwardList
1278 || !m_stateMachine.committedFirstRealDocumentLoad()) { 1303 || !m_stateMachine.committedFirstRealDocumentLoad()) {
1279 replacesCurrentHistoryItem = true; 1304 replacesCurrentHistoryItem = true;
1280 } 1305 }
1281 1306
1282 m_policyDocumentLoader = client()->createDocumentLoader(m_frame, request, su bstituteData.isValid() ? substituteData : defaultSubstituteDataForURL(request.ur l())); 1307 m_policyDocumentLoader = client()->createDocumentLoader(m_frame, request, su bstituteData.isValid() ? substituteData : defaultSubstituteDataForURL(request.ur l()));
1283 m_policyDocumentLoader->setTriggeringAction(action); 1308 m_policyDocumentLoader->setTriggeringAction(action);
1284 m_policyDocumentLoader->setReplacesCurrentHistoryItem(replacesCurrentHistory Item); 1309 m_policyDocumentLoader->setReplacesCurrentHistoryItem(replacesCurrentHistory Item);
1285 m_policyDocumentLoader->setIsClientRedirect(clientRedirect == ClientRedirect ); 1310 m_policyDocumentLoader->setIsClientRedirect(clientRedirect == ClientRedirect );
1286 1311
1287 Frame* parent = m_frame->tree().parent(); 1312 Frame* parent = m_frame->tree().parent();
1288 if (parent && parent->isLocalFrame()) 1313 if (parent && parent->isLocalFrame())
1289 m_policyDocumentLoader->setOverrideEncoding(toLocalFrame(parent)->loader ().documentLoader()->overrideEncoding()); 1314 m_policyDocumentLoader->setOverrideEncoding(toLocalFrame(parent)->loader ().documentLoader()->overrideEncoding());
1290 else if (!overrideEncoding.isEmpty()) 1315 else if (!overrideEncoding.isEmpty())
1291 m_policyDocumentLoader->setOverrideEncoding(overrideEncoding); 1316 m_policyDocumentLoader->setOverrideEncoding(overrideEncoding);
1292 else if (m_documentLoader) 1317 else if (m_documentLoader)
1293 m_policyDocumentLoader->setOverrideEncoding(m_documentLoader->overrideEn coding()); 1318 m_policyDocumentLoader->setOverrideEncoding(m_documentLoader->overrideEn coding());
1294 1319
1320
1321 bool isTransitionNavigation = false;
1322 if (RuntimeEnabledFeatures::navigationTransitionsEnabled())
1323 isTransitionNavigation = dispatchNavigationTransitionData();
1324
1295 // stopAllLoaders can detach the LocalFrame, so protect it. 1325 // stopAllLoaders can detach the LocalFrame, so protect it.
1296 RefPtr<LocalFrame> protect(m_frame); 1326 RefPtr<LocalFrame> protect(m_frame);
1297 if ((!m_policyDocumentLoader->shouldContinueForNavigationPolicy(request, sho uldCheckMainWorldContentSecurityPolicy) || !shouldClose()) && m_policyDocumentLo ader) { 1327 if ((!m_policyDocumentLoader->shouldContinueForNavigationPolicy(request, sho uldCheckMainWorldContentSecurityPolicy, isTransitionNavigation) || !shouldClose( )) && m_policyDocumentLoader) {
1298 m_policyDocumentLoader->detachFromFrame(); 1328 m_policyDocumentLoader->detachFromFrame();
1299 m_policyDocumentLoader = nullptr; 1329 m_policyDocumentLoader = nullptr;
1300 return; 1330 return;
1301 } 1331 }
1302 1332
1303 if (m_provisionalDocumentLoader) { 1333 if (m_provisionalDocumentLoader) {
1304 m_provisionalDocumentLoader->stopLoading(); 1334 m_provisionalDocumentLoader->stopLoading();
1305 if (m_provisionalDocumentLoader) 1335 if (m_provisionalDocumentLoader)
1306 m_provisionalDocumentLoader->detachFromFrame(); 1336 m_provisionalDocumentLoader->detachFromFrame();
1307 m_provisionalDocumentLoader = nullptr; 1337 m_provisionalDocumentLoader = nullptr;
(...skipping 13 matching lines...) Expand all
1321 m_loadType = type; 1351 m_loadType = type;
1322 m_state = FrameStateProvisional; 1352 m_state = FrameStateProvisional;
1323 1353
1324 if (formState) 1354 if (formState)
1325 client()->dispatchWillSubmitForm(formState->form()); 1355 client()->dispatchWillSubmitForm(formState->form());
1326 1356
1327 m_progressTracker->progressStarted(); 1357 m_progressTracker->progressStarted();
1328 if (m_provisionalDocumentLoader->isClientRedirect()) 1358 if (m_provisionalDocumentLoader->isClientRedirect())
1329 m_provisionalDocumentLoader->appendRedirect(m_frame->document()->url()); 1359 m_provisionalDocumentLoader->appendRedirect(m_frame->document()->url());
1330 m_provisionalDocumentLoader->appendRedirect(m_provisionalDocumentLoader->req uest().url()); 1360 m_provisionalDocumentLoader->appendRedirect(m_provisionalDocumentLoader->req uest().url());
1331 client()->dispatchDidStartProvisionalLoad(); 1361 client()->dispatchDidStartProvisionalLoad(isTransitionNavigation);
1332 ASSERT(m_provisionalDocumentLoader); 1362 ASSERT(m_provisionalDocumentLoader);
1333 m_provisionalDocumentLoader->startLoadingMainResource(); 1363 m_provisionalDocumentLoader->startLoadingMainResource();
1334 } 1364 }
1335 1365
1336 void FrameLoader::applyUserAgent(ResourceRequest& request) 1366 void FrameLoader::applyUserAgent(ResourceRequest& request)
1337 { 1367 {
1338 String userAgent = this->userAgent(request.url()); 1368 String userAgent = this->userAgent(request.url());
1339 ASSERT(!userAgent.isNull()); 1369 ASSERT(!userAgent.isNull());
1340 request.setHTTPUserAgent(AtomicString(userAgent)); 1370 request.setHTTPUserAgent(AtomicString(userAgent));
1341 } 1371 }
(...skipping 116 matching lines...) Expand 10 before | Expand all | Expand 10 after
1458 // FIXME: We need a way to propagate sandbox flags to out-of-process frames. 1488 // FIXME: We need a way to propagate sandbox flags to out-of-process frames.
1459 Frame* parentFrame = m_frame->tree().parent(); 1489 Frame* parentFrame = m_frame->tree().parent();
1460 if (parentFrame && parentFrame->isLocalFrame()) 1490 if (parentFrame && parentFrame->isLocalFrame())
1461 flags |= toLocalFrame(parentFrame)->document()->sandboxFlags(); 1491 flags |= toLocalFrame(parentFrame)->document()->sandboxFlags();
1462 if (FrameOwner* frameOwner = m_frame->owner()) 1492 if (FrameOwner* frameOwner = m_frame->owner())
1463 flags |= frameOwner->sandboxFlags(); 1493 flags |= frameOwner->sandboxFlags();
1464 return flags; 1494 return flags;
1465 } 1495 }
1466 1496
1467 } // namespace WebCore 1497 } // namespace WebCore
OLDNEW
« no previous file with comments | « Source/core/loader/FrameLoader.h ('k') | Source/core/loader/FrameLoaderClient.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698