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 563 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
574 void FrameLoader::loadInSameDocument(const KURL& url, PassRefPtr<SerializedScrip
tValue> stateObject, UpdateBackForwardListPolicy updateBackForwardList, ClientRe
directPolicy clientRedirect) | 574 void FrameLoader::loadInSameDocument(const KURL& url, PassRefPtr<SerializedScrip
tValue> stateObject, UpdateBackForwardListPolicy updateBackForwardList, ClientRe
directPolicy clientRedirect) |
575 { | 575 { |
576 // If we have a state object, we cannot also be a new navigation. | 576 // If we have a state object, we cannot also be a new navigation. |
577 ASSERT(!stateObject || updateBackForwardList == DoNotUpdateBackForwardList); | 577 ASSERT(!stateObject || updateBackForwardList == DoNotUpdateBackForwardList); |
578 | 578 |
579 // If we have a provisional request for a different document, a fragment scr
oll should cancel it. | 579 // If we have a provisional request for a different document, a fragment scr
oll should cancel it. |
580 if (m_provisionalDocumentLoader) { | 580 if (m_provisionalDocumentLoader) { |
581 m_provisionalDocumentLoader->stopLoading(); | 581 m_provisionalDocumentLoader->stopLoading(); |
582 if (m_provisionalDocumentLoader) | 582 if (m_provisionalDocumentLoader) |
583 m_provisionalDocumentLoader->detachFromFrame(); | 583 m_provisionalDocumentLoader->detachFromFrame(); |
584 m_provisionalDocumentLoader = 0; | 584 m_provisionalDocumentLoader = nullptr; |
585 } | 585 } |
586 saveDocumentAndScrollState(); | 586 saveDocumentAndScrollState(); |
587 | 587 |
588 KURL oldURL = m_frame->document()->url(); | 588 KURL oldURL = m_frame->document()->url(); |
589 // If we were in the autoscroll/panScroll mode we want to stop it before fol
lowing the link to the anchor | 589 // If we were in the autoscroll/panScroll mode we want to stop it before fol
lowing the link to the anchor |
590 bool hashChange = equalIgnoringFragmentIdentifier(url, oldURL) && url.fragme
ntIdentifier() != oldURL.fragmentIdentifier(); | 590 bool hashChange = equalIgnoringFragmentIdentifier(url, oldURL) && url.fragme
ntIdentifier() != oldURL.fragmentIdentifier(); |
591 if (hashChange) { | 591 if (hashChange) { |
592 m_frame->eventHandler().stopAutoscroll(); | 592 m_frame->eventHandler().stopAutoscroll(); |
593 m_frame->domWindow()->enqueueHashchangeEvent(oldURL, url); | 593 m_frame->domWindow()->enqueueHashchangeEvent(oldURL, url); |
594 } | 594 } |
595 m_documentLoader->setIsClientRedirect(clientRedirect == ClientRedirect); | 595 m_documentLoader->setIsClientRedirect(clientRedirect == ClientRedirect); |
596 m_documentLoader->setReplacesCurrentHistoryItem(updateBackForwardList == DoN
otUpdateBackForwardList); | 596 m_documentLoader->setReplacesCurrentHistoryItem(updateBackForwardList == DoN
otUpdateBackForwardList); |
597 updateForSameDocumentNavigation(url, SameDocumentNavigationDefault, 0, updat
eBackForwardList); | 597 updateForSameDocumentNavigation(url, SameDocumentNavigationDefault, nullptr,
updateBackForwardList); |
598 | 598 |
599 // It's important to model this as a load that starts and immediately finish
es. | 599 // It's important to model this as a load that starts and immediately finish
es. |
600 // Otherwise, the parent frame may think we never finished loading. | 600 // Otherwise, the parent frame may think we never finished loading. |
601 started(); | 601 started(); |
602 | 602 |
603 // We need to scroll to the fragment whether or not a hash change occurred,
since | 603 // We need to scroll to the fragment whether or not a hash change occurred,
since |
604 // the user might have scrolled since the previous navigation. | 604 // the user might have scrolled since the previous navigation. |
605 scrollToFragmentWithParentBoundary(url); | 605 scrollToFragmentWithParentBoundary(url); |
606 | 606 |
607 m_isComplete = false; | 607 m_isComplete = false; |
(...skipping 122 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
730 if (action.policy() == NavigationPolicyDownload) | 730 if (action.policy() == NavigationPolicyDownload) |
731 m_client->loadURLExternally(action.resourceRequest(), NavigationPoli
cyDownload); | 731 m_client->loadURLExternally(action.resourceRequest(), NavigationPoli
cyDownload); |
732 else | 732 else |
733 createWindowForRequest(request, m_frame, action.policy(), request.sh
ouldSendReferrer()); | 733 createWindowForRequest(request, m_frame, action.policy(), request.sh
ouldSendReferrer()); |
734 return; | 734 return; |
735 } | 735 } |
736 | 736 |
737 const KURL& url = request.resourceRequest().url(); | 737 const KURL& url = request.resourceRequest().url(); |
738 if (shouldPerformFragmentNavigation(request.formState(), request.resourceReq
uest().httpMethod(), newLoadType, url)) { | 738 if (shouldPerformFragmentNavigation(request.formState(), request.resourceReq
uest().httpMethod(), newLoadType, url)) { |
739 m_documentLoader->setTriggeringAction(action); | 739 m_documentLoader->setTriggeringAction(action); |
740 loadInSameDocument(url, 0, newLoadType == FrameLoadTypeStandard ? Update
BackForwardList : DoNotUpdateBackForwardList, request.clientRedirect()); | 740 loadInSameDocument(url, nullptr, newLoadType == FrameLoadTypeStandard ?
UpdateBackForwardList : DoNotUpdateBackForwardList, request.clientRedirect()); |
741 return; | 741 return; |
742 } | 742 } |
743 bool sameURL = shouldTreatURLAsSameAsCurrent(url); | 743 bool sameURL = shouldTreatURLAsSameAsCurrent(url); |
744 loadWithNavigationAction(action, newLoadType, request.formState(), request.s
ubstituteData(), request.clientRedirect()); | 744 loadWithNavigationAction(action, newLoadType, request.formState(), request.s
ubstituteData(), request.clientRedirect()); |
745 // Example of this case are sites that reload the same URL with a different
cookie | 745 // Example of this case are sites that reload the same URL with a different
cookie |
746 // driving the generated content, or a master frame with links that drive a
target | 746 // driving the generated content, or a master frame with links that drive a
target |
747 // frame, where the user has clicked on the same link repeatedly. | 747 // frame, where the user has clicked on the same link repeatedly. |
748 if (sameURL && newLoadType != FrameLoadTypeReload && newLoadType != FrameLoa
dTypeReloadFromOrigin && request.resourceRequest().httpMethod() != "POST") | 748 if (sameURL && newLoadType != FrameLoadTypeReload && newLoadType != FrameLoa
dTypeReloadFromOrigin && request.resourceRequest().httpMethod() != "POST") |
749 m_loadType = FrameLoadTypeSame; | 749 m_loadType = FrameLoadTypeSame; |
750 } | 750 } |
(...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
788 if (!m_currentItem) | 788 if (!m_currentItem) |
789 return; | 789 return; |
790 | 790 |
791 ResourceRequest request = requestFromHistoryItem(m_currentItem.get(), Reload
IgnoringCacheData); | 791 ResourceRequest request = requestFromHistoryItem(m_currentItem.get(), Reload
IgnoringCacheData); |
792 if (!overrideURL.isEmpty()) { | 792 if (!overrideURL.isEmpty()) { |
793 request.setURL(overrideURL); | 793 request.setURL(overrideURL); |
794 request.clearHTTPReferrer(); | 794 request.clearHTTPReferrer(); |
795 } | 795 } |
796 | 796 |
797 FrameLoadType type = reloadPolicy == EndToEndReload ? FrameLoadTypeReloadFro
mOrigin : FrameLoadTypeReload; | 797 FrameLoadType type = reloadPolicy == EndToEndReload ? FrameLoadTypeReloadFro
mOrigin : FrameLoadTypeReload; |
798 loadWithNavigationAction(NavigationAction(request, type), type, 0, Substitut
eData(), NotClientRedirect, overrideEncoding); | 798 loadWithNavigationAction(NavigationAction(request, type), type, nullptr, Sub
stituteData(), NotClientRedirect, overrideEncoding); |
799 } | 799 } |
800 | 800 |
801 void FrameLoader::stopAllLoaders() | 801 void FrameLoader::stopAllLoaders() |
802 { | 802 { |
803 if (m_frame->document()->pageDismissalEventBeingDispatched() != Document::No
Dismissal) | 803 if (m_frame->document()->pageDismissalEventBeingDispatched() != Document::No
Dismissal) |
804 return; | 804 return; |
805 | 805 |
806 // If this method is called from within this method, infinite recursion can
occur (3442218). Avoid this. | 806 // If this method is called from within this method, infinite recursion can
occur (3442218). Avoid this. |
807 if (m_inStopAllLoaders) | 807 if (m_inStopAllLoaders) |
808 return; | 808 return; |
809 | 809 |
810 // Calling stopLoading() on the provisional document loader can blow away | 810 // Calling stopLoading() on the provisional document loader can blow away |
811 // the frame from underneath. | 811 // the frame from underneath. |
812 RefPtr<Frame> protect(m_frame); | 812 RefPtr<Frame> protect(m_frame); |
813 | 813 |
814 m_inStopAllLoaders = true; | 814 m_inStopAllLoaders = true; |
815 | 815 |
816 for (RefPtr<Frame> child = m_frame->tree().firstChild(); child; child = chil
d->tree().nextSibling()) | 816 for (RefPtr<Frame> child = m_frame->tree().firstChild(); child; child = chil
d->tree().nextSibling()) |
817 child->loader().stopAllLoaders(); | 817 child->loader().stopAllLoaders(); |
818 if (m_provisionalDocumentLoader) | 818 if (m_provisionalDocumentLoader) |
819 m_provisionalDocumentLoader->stopLoading(); | 819 m_provisionalDocumentLoader->stopLoading(); |
820 if (m_documentLoader) | 820 if (m_documentLoader) |
821 m_documentLoader->stopLoading(); | 821 m_documentLoader->stopLoading(); |
822 | 822 |
823 if (m_provisionalDocumentLoader) | 823 if (m_provisionalDocumentLoader) |
824 m_provisionalDocumentLoader->detachFromFrame(); | 824 m_provisionalDocumentLoader->detachFromFrame(); |
825 m_provisionalDocumentLoader = 0; | 825 m_provisionalDocumentLoader = nullptr; |
826 | 826 |
827 m_checkTimer.stop(); | 827 m_checkTimer.stop(); |
828 | 828 |
829 m_inStopAllLoaders = false; | 829 m_inStopAllLoaders = false; |
830 | 830 |
831 // detachFromParent() can be called multiple times on same Frame, which | 831 // detachFromParent() can be called multiple times on same Frame, which |
832 // means we may no longer have a FrameLoaderClient to talk to. | 832 // means we may no longer have a FrameLoaderClient to talk to. |
833 if (m_client) | 833 if (m_client) |
834 m_client->didStopAllLoaders(); | 834 m_client->didStopAllLoaders(); |
835 } | 835 } |
(...skipping 109 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
945 | 945 |
946 if (m_state == FrameStateProvisional && m_provisionalDocumentLoader) { | 946 if (m_state == FrameStateProvisional && m_provisionalDocumentLoader) { |
947 const ResourceError& error = m_provisionalDocumentLoader->mainDocumentEr
ror(); | 947 const ResourceError& error = m_provisionalDocumentLoader->mainDocumentEr
ror(); |
948 if (error.isNull()) | 948 if (error.isNull()) |
949 return; | 949 return; |
950 RefPtr<DocumentLoader> loader = m_provisionalDocumentLoader; | 950 RefPtr<DocumentLoader> loader = m_provisionalDocumentLoader; |
951 m_client->dispatchDidFailProvisionalLoad(error); | 951 m_client->dispatchDidFailProvisionalLoad(error); |
952 if (loader != m_provisionalDocumentLoader) | 952 if (loader != m_provisionalDocumentLoader) |
953 return; | 953 return; |
954 m_provisionalDocumentLoader->detachFromFrame(); | 954 m_provisionalDocumentLoader->detachFromFrame(); |
955 m_provisionalDocumentLoader = 0; | 955 m_provisionalDocumentLoader = nullptr; |
956 m_progressTracker->progressCompleted(); | 956 m_progressTracker->progressCompleted(); |
957 m_state = FrameStateComplete; | 957 m_state = FrameStateComplete; |
958 } | 958 } |
959 | 959 |
960 if (m_state != FrameStateCommittedPage) | 960 if (m_state != FrameStateCommittedPage) |
961 return; | 961 return; |
962 | 962 |
963 if (!m_documentLoader || (m_documentLoader->isLoadingInAPISense() && !m_inSt
opAllLoaders)) | 963 if (!m_documentLoader || (m_documentLoader->isLoadingInAPISense() && !m_inSt
opAllLoaders)) |
964 return; | 964 return; |
965 | 965 |
(...skipping 61 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1027 childrenToDetach.reserveCapacity(m_frame->tree().childCount()); | 1027 childrenToDetach.reserveCapacity(m_frame->tree().childCount()); |
1028 for (Frame* child = m_frame->tree().lastChild(); child; child = child->tree(
).previousSibling()) | 1028 for (Frame* child = m_frame->tree().lastChild(); child; child = child->tree(
).previousSibling()) |
1029 childrenToDetach.append(child); | 1029 childrenToDetach.append(child); |
1030 FrameVector::iterator end = childrenToDetach.end(); | 1030 FrameVector::iterator end = childrenToDetach.end(); |
1031 for (FrameVector::iterator it = childrenToDetach.begin(); it != end; ++it) | 1031 for (FrameVector::iterator it = childrenToDetach.begin(); it != end; ++it) |
1032 (*it)->loader().detachFromParent(); | 1032 (*it)->loader().detachFromParent(); |
1033 } | 1033 } |
1034 | 1034 |
1035 void FrameLoader::closeAndRemoveChild(Frame* child) | 1035 void FrameLoader::closeAndRemoveChild(Frame* child) |
1036 { | 1036 { |
1037 child->setView(0); | 1037 child->setView(nullptr); |
1038 if (child->ownerElement() && child->page()) | 1038 if (child->ownerElement() && child->page()) |
1039 child->page()->decrementSubframeCount(); | 1039 child->page()->decrementSubframeCount(); |
1040 child->willDetachFrameHost(); | 1040 child->willDetachFrameHost(); |
1041 child->loader().detachClient(); | 1041 child->loader().detachClient(); |
1042 } | 1042 } |
1043 | 1043 |
1044 // Called every time a resource is completely loaded or an error is received. | 1044 // Called every time a resource is completely loaded or an error is received. |
1045 void FrameLoader::checkLoadComplete() | 1045 void FrameLoader::checkLoadComplete() |
1046 { | 1046 { |
1047 ASSERT(m_client->hasWebView()); | 1047 ASSERT(m_client->hasWebView()); |
(...skipping 52 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1100 detachChildren(); | 1100 detachChildren(); |
1101 // stopAllLoaders() needs to be called after detachChildren(), because detac
hedChildren() | 1101 // stopAllLoaders() needs to be called after detachChildren(), because detac
hedChildren() |
1102 // will trigger the unload event handlers of any child frames, and those eve
nt | 1102 // will trigger the unload event handlers of any child frames, and those eve
nt |
1103 // handlers might start a new subresource load in this frame. | 1103 // handlers might start a new subresource load in this frame. |
1104 stopAllLoaders(); | 1104 stopAllLoaders(); |
1105 | 1105 |
1106 InspectorInstrumentation::frameDetachedFromParent(m_frame); | 1106 InspectorInstrumentation::frameDetachedFromParent(m_frame); |
1107 | 1107 |
1108 if (m_documentLoader) | 1108 if (m_documentLoader) |
1109 m_documentLoader->detachFromFrame(); | 1109 m_documentLoader->detachFromFrame(); |
1110 m_documentLoader = 0; | 1110 m_documentLoader = nullptr; |
1111 | 1111 |
1112 if (!m_client) | 1112 if (!m_client) |
1113 return; | 1113 return; |
1114 | 1114 |
1115 // FIXME: All this code belongs up in Page. | 1115 // FIXME: All this code belongs up in Page. |
1116 if (Frame* parent = m_frame->tree().parent()) { | 1116 if (Frame* parent = m_frame->tree().parent()) { |
1117 parent->loader().closeAndRemoveChild(m_frame); | 1117 parent->loader().closeAndRemoveChild(m_frame); |
1118 parent->loader().scheduleCheckCompleted(); | 1118 parent->loader().scheduleCheckCompleted(); |
1119 } else { | 1119 } else { |
1120 m_frame->setView(0); | 1120 m_frame->setView(nullptr); |
1121 m_frame->willDetachFrameHost(); | 1121 m_frame->willDetachFrameHost(); |
1122 detachClient(); | 1122 detachClient(); |
1123 } | 1123 } |
1124 m_frame->detachFromFrameHost(); | 1124 m_frame->detachFromFrameHost(); |
1125 | 1125 |
1126 } | 1126 } |
1127 | 1127 |
1128 void FrameLoader::detachClient() | 1128 void FrameLoader::detachClient() |
1129 { | 1129 { |
1130 ASSERT(m_client); | 1130 ASSERT(m_client); |
(...skipping 160 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1291 m_policyDocumentLoader->setOverrideEncoding(parent->loader().documentLoa
der()->overrideEncoding()); | 1291 m_policyDocumentLoader->setOverrideEncoding(parent->loader().documentLoa
der()->overrideEncoding()); |
1292 else if (!overrideEncoding.isEmpty()) | 1292 else if (!overrideEncoding.isEmpty()) |
1293 m_policyDocumentLoader->setOverrideEncoding(overrideEncoding); | 1293 m_policyDocumentLoader->setOverrideEncoding(overrideEncoding); |
1294 else if (m_documentLoader) | 1294 else if (m_documentLoader) |
1295 m_policyDocumentLoader->setOverrideEncoding(m_documentLoader->overrideEn
coding()); | 1295 m_policyDocumentLoader->setOverrideEncoding(m_documentLoader->overrideEn
coding()); |
1296 | 1296 |
1297 // stopAllLoaders can detach the Frame, so protect it. | 1297 // stopAllLoaders can detach the Frame, so protect it. |
1298 RefPtr<Frame> protect(m_frame); | 1298 RefPtr<Frame> protect(m_frame); |
1299 if ((!m_policyDocumentLoader->shouldContinueForNavigationPolicy(request) ||
!shouldClose()) && m_policyDocumentLoader) { | 1299 if ((!m_policyDocumentLoader->shouldContinueForNavigationPolicy(request) ||
!shouldClose()) && m_policyDocumentLoader) { |
1300 m_policyDocumentLoader->detachFromFrame(); | 1300 m_policyDocumentLoader->detachFromFrame(); |
1301 m_policyDocumentLoader = 0; | 1301 m_policyDocumentLoader = nullptr; |
1302 return; | 1302 return; |
1303 } | 1303 } |
1304 | 1304 |
1305 // A new navigation is in progress, so don't clear the history's provisional
item. | 1305 // A new navigation is in progress, so don't clear the history's provisional
item. |
1306 stopAllLoaders(); | 1306 stopAllLoaders(); |
1307 | 1307 |
1308 // <rdar://problem/6250856> - In certain circumstances on pages with multipl
e frames, stopAllLoaders() | 1308 // <rdar://problem/6250856> - In certain circumstances on pages with multipl
e frames, stopAllLoaders() |
1309 // might detach the current FrameLoader, in which case we should bail on thi
s newly defunct load. | 1309 // might detach the current FrameLoader, in which case we should bail on thi
s newly defunct load. |
1310 if (!m_frame->page() || !m_policyDocumentLoader) | 1310 if (!m_frame->page() || !m_policyDocumentLoader) |
1311 return; | 1311 return; |
(...skipping 94 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1406 } | 1406 } |
1407 | 1407 |
1408 void FrameLoader::loadHistoryItem(HistoryItem* item, HistoryLoadType historyLoad
Type, ResourceRequestCachePolicy cachePolicy) | 1408 void FrameLoader::loadHistoryItem(HistoryItem* item, HistoryLoadType historyLoad
Type, ResourceRequestCachePolicy cachePolicy) |
1409 { | 1409 { |
1410 m_provisionalItem = item; | 1410 m_provisionalItem = item; |
1411 if (historyLoadType == HistorySameDocumentLoad) { | 1411 if (historyLoadType == HistorySameDocumentLoad) { |
1412 loadInSameDocument(item->url(), item->stateObject(), DoNotUpdateBackForw
ardList, NotClientRedirect); | 1412 loadInSameDocument(item->url(), item->stateObject(), DoNotUpdateBackForw
ardList, NotClientRedirect); |
1413 restoreScrollPositionAndViewState(ForcedRestoreForSameDocumentHistoryNav
igation); | 1413 restoreScrollPositionAndViewState(ForcedRestoreForSameDocumentHistoryNav
igation); |
1414 return; | 1414 return; |
1415 } | 1415 } |
1416 loadWithNavigationAction(NavigationAction(requestFromHistoryItem(item, cache
Policy), FrameLoadTypeBackForward), FrameLoadTypeBackForward, 0, SubstituteData(
)); | 1416 loadWithNavigationAction(NavigationAction(requestFromHistoryItem(item, cache
Policy), FrameLoadTypeBackForward), FrameLoadTypeBackForward, nullptr, Substitut
eData()); |
1417 } | 1417 } |
1418 | 1418 |
1419 void FrameLoader::dispatchDocumentElementAvailable() | 1419 void FrameLoader::dispatchDocumentElementAvailable() |
1420 { | 1420 { |
1421 m_client->documentElementAvailable(); | 1421 m_client->documentElementAvailable(); |
1422 } | 1422 } |
1423 | 1423 |
1424 void FrameLoader::dispatchDidClearWindowObjectsInAllWorlds() | 1424 void FrameLoader::dispatchDidClearWindowObjectsInAllWorlds() |
1425 { | 1425 { |
1426 if (!m_frame->script().canExecuteScripts(NotAboutToExecuteScript)) | 1426 if (!m_frame->script().canExecuteScripts(NotAboutToExecuteScript)) |
(...skipping 21 matching lines...) Expand all Loading... |
1448 { | 1448 { |
1449 SandboxFlags flags = m_forcedSandboxFlags; | 1449 SandboxFlags flags = m_forcedSandboxFlags; |
1450 if (Frame* parentFrame = m_frame->tree().parent()) | 1450 if (Frame* parentFrame = m_frame->tree().parent()) |
1451 flags |= parentFrame->document()->sandboxFlags(); | 1451 flags |= parentFrame->document()->sandboxFlags(); |
1452 if (HTMLFrameOwnerElement* ownerElement = m_frame->ownerElement()) | 1452 if (HTMLFrameOwnerElement* ownerElement = m_frame->ownerElement()) |
1453 flags |= ownerElement->sandboxFlags(); | 1453 flags |= ownerElement->sandboxFlags(); |
1454 return flags; | 1454 return flags; |
1455 } | 1455 } |
1456 | 1456 |
1457 } // namespace WebCore | 1457 } // namespace WebCore |
OLD | NEW |