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 1245 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
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 Loading... |
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 Loading... |
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 |
OLD | NEW |