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

Side by Side Diff: Source/core/loader/FrameLoader.cpp

Issue 15820002: Page::chrome() should return a reference. (Closed) Base URL: svn://svn.chromium.org/blink/trunk
Patch Set: rebase Created 7 years, 7 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 | Annotate | Revision Log
« no previous file with comments | « Source/core/loader/FrameLoader.h ('k') | Source/core/page/BarProp.cpp » ('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 1023 matching lines...) Expand 10 before | Expand all | Expand 10 after
1034 loadURL(resourceRequest, request.frameName(), loadType, event, formState.get ()); 1034 loadURL(resourceRequest, request.frameName(), loadType, event, formState.get ());
1035 1035
1036 // FIXME: It's possible this targetFrame will not be the same frame that was targeted by the actual 1036 // FIXME: It's possible this targetFrame will not be the same frame that was targeted by the actual
1037 // load if frame names have changed. 1037 // load if frame names have changed.
1038 Frame* sourceFrame = formState ? formState->sourceDocument()->frame() : m_fr ame; 1038 Frame* sourceFrame = formState ? formState->sourceDocument()->frame() : m_fr ame;
1039 if (!sourceFrame) 1039 if (!sourceFrame)
1040 sourceFrame = m_frame; 1040 sourceFrame = m_frame;
1041 Frame* targetFrame = sourceFrame->loader()->findFrameForNavigation(request.f rameName()); 1041 Frame* targetFrame = sourceFrame->loader()->findFrameForNavigation(request.f rameName());
1042 if (targetFrame && targetFrame != sourceFrame) { 1042 if (targetFrame && targetFrame != sourceFrame) {
1043 if (Page* page = targetFrame->page()) 1043 if (Page* page = targetFrame->page())
1044 page->chrome()->focus(); 1044 page->chrome().focus();
1045 } 1045 }
1046 } 1046 }
1047 1047
1048 void FrameLoader::loadURL(const ResourceRequest& request, const String& frameNam e, FrameLoadType newLoadType, 1048 void FrameLoader::loadURL(const ResourceRequest& request, const String& frameNam e, FrameLoadType newLoadType,
1049 PassRefPtr<Event> event, PassRefPtr<FormState> formState) 1049 PassRefPtr<Event> event, PassRefPtr<FormState> formState)
1050 { 1050 {
1051 if (m_inStopAllLoaders) 1051 if (m_inStopAllLoaders)
1052 return; 1052 return;
1053 1053
1054 bool isFormSubmission = formState; 1054 bool isFormSubmission = formState;
(...skipping 362 matching lines...) Expand 10 before | Expand all | Expand 10 after
1417 setProvisionalDocumentLoader(0); 1417 setProvisionalDocumentLoader(0);
1418 1418
1419 if (pdl != m_documentLoader) { 1419 if (pdl != m_documentLoader) {
1420 ASSERT(m_state == FrameStateComplete); 1420 ASSERT(m_state == FrameStateComplete);
1421 return; 1421 return;
1422 } 1422 }
1423 1423
1424 setState(FrameStateCommittedPage); 1424 setState(FrameStateCommittedPage);
1425 1425
1426 if (isLoadingMainFrame()) 1426 if (isLoadingMainFrame())
1427 m_frame->page()->chrome()->client()->needTouchEvents(false); 1427 m_frame->page()->chrome().client()->needTouchEvents(false);
1428 1428
1429 history()->updateForCommit(); 1429 history()->updateForCommit();
1430 m_client->transitionToCommittedForNewPage(); 1430 m_client->transitionToCommittedForNewPage();
1431 1431
1432 if (!m_stateMachine.creatingInitialEmptyDocument() && !m_stateMachine.commit tedFirstRealDocumentLoad()) 1432 if (!m_stateMachine.creatingInitialEmptyDocument() && !m_stateMachine.commit tedFirstRealDocumentLoad())
1433 m_stateMachine.advanceTo(FrameLoaderStateMachine::DisplayingInitialEmpty DocumentPostCommit); 1433 m_stateMachine.advanceTo(FrameLoaderStateMachine::DisplayingInitialEmpty DocumentPostCommit);
1434 } 1434 }
1435 1435
1436 void FrameLoader::clientRedirectCancelledOrFinished() 1436 void FrameLoader::clientRedirectCancelledOrFinished()
1437 { 1437 {
(...skipping 586 matching lines...) Expand 10 before | Expand all | Expand 10 after
2024 2024
2025 view->scrollToFragment(url); 2025 view->scrollToFragment(url);
2026 2026
2027 if (boundaryFrame) 2027 if (boundaryFrame)
2028 boundaryFrame->view()->setSafeToPropagateScrollToParent(true); 2028 boundaryFrame->view()->setSafeToPropagateScrollToParent(true);
2029 } 2029 }
2030 2030
2031 bool FrameLoader::shouldClose() 2031 bool FrameLoader::shouldClose()
2032 { 2032 {
2033 Page* page = m_frame->page(); 2033 Page* page = m_frame->page();
2034 Chrome* chrome = page ? page->chrome() : 0; 2034 if (!page || !page->chrome().canRunBeforeUnloadConfirmPanel())
2035 if (!chrome || !chrome->canRunBeforeUnloadConfirmPanel())
2036 return true; 2035 return true;
2037 2036
2038 // Store all references to each subframe in advance since beforeunload's eve nt handler may modify frame 2037 // Store all references to each subframe in advance since beforeunload's eve nt handler may modify frame
2039 Vector<RefPtr<Frame> > targetFrames; 2038 Vector<RefPtr<Frame> > targetFrames;
2040 targetFrames.append(m_frame); 2039 targetFrames.append(m_frame);
2041 for (Frame* child = m_frame->tree()->firstChild(); child; child = child->tre e()->traverseNext(m_frame)) 2040 for (Frame* child = m_frame->tree()->firstChild(); child; child = child->tre e()->traverseNext(m_frame))
2042 targetFrames.append(child); 2041 targetFrames.append(child);
2043 2042
2044 bool shouldClose = false; 2043 bool shouldClose = false;
2045 { 2044 {
2046 NavigationDisablerForBeforeUnload navigationDisabler; 2045 NavigationDisablerForBeforeUnload navigationDisabler;
2047 size_t i; 2046 size_t i;
2048 2047
2049 for (i = 0; i < targetFrames.size(); i++) { 2048 for (i = 0; i < targetFrames.size(); i++) {
2050 if (!targetFrames[i]->tree()->isDescendantOf(m_frame)) 2049 if (!targetFrames[i]->tree()->isDescendantOf(m_frame))
2051 continue; 2050 continue;
2052 if (!targetFrames[i]->loader()->fireBeforeUnloadEvent(chrome)) 2051 if (!targetFrames[i]->loader()->fireBeforeUnloadEvent(page->chrome() ))
2053 break; 2052 break;
2054 } 2053 }
2055 2054
2056 if (i == targetFrames.size()) 2055 if (i == targetFrames.size())
2057 shouldClose = true; 2056 shouldClose = true;
2058 } 2057 }
2059 2058
2060 if (!shouldClose) 2059 if (!shouldClose)
2061 m_submittedFormURL = KURL(); 2060 m_submittedFormURL = KURL();
2062 2061
2063 return shouldClose; 2062 return shouldClose;
2064 } 2063 }
2065 2064
2066 bool FrameLoader::fireBeforeUnloadEvent(Chrome* chrome) 2065 bool FrameLoader::fireBeforeUnloadEvent(Chrome& chrome)
2067 { 2066 {
2068 DOMWindow* domWindow = m_frame->document()->domWindow(); 2067 DOMWindow* domWindow = m_frame->document()->domWindow();
2069 if (!domWindow) 2068 if (!domWindow)
2070 return true; 2069 return true;
2071 2070
2072 RefPtr<Document> document = m_frame->document(); 2071 RefPtr<Document> document = m_frame->document();
2073 if (!document->body()) 2072 if (!document->body())
2074 return true; 2073 return true;
2075 2074
2076 RefPtr<BeforeUnloadEvent> beforeUnloadEvent = BeforeUnloadEvent::create(); 2075 RefPtr<BeforeUnloadEvent> beforeUnloadEvent = BeforeUnloadEvent::create();
2077 m_pageDismissalEventBeingDispatched = BeforeUnloadDismissal; 2076 m_pageDismissalEventBeingDispatched = BeforeUnloadDismissal;
2078 domWindow->dispatchEvent(beforeUnloadEvent.get(), domWindow->document()); 2077 domWindow->dispatchEvent(beforeUnloadEvent.get(), domWindow->document());
2079 m_pageDismissalEventBeingDispatched = NoDismissal; 2078 m_pageDismissalEventBeingDispatched = NoDismissal;
2080 2079
2081 if (!beforeUnloadEvent->defaultPrevented()) 2080 if (!beforeUnloadEvent->defaultPrevented())
2082 document->defaultEventHandler(beforeUnloadEvent.get()); 2081 document->defaultEventHandler(beforeUnloadEvent.get());
2083 if (beforeUnloadEvent->result().isNull()) 2082 if (beforeUnloadEvent->result().isNull())
2084 return true; 2083 return true;
2085 2084
2086 String text = document->displayStringModifiedByEncoding(beforeUnloadEvent->r esult()); 2085 String text = document->displayStringModifiedByEncoding(beforeUnloadEvent->r esult());
2087 return chrome->runBeforeUnloadConfirmPanel(text, m_frame); 2086 return chrome.runBeforeUnloadConfirmPanel(text, m_frame);
2088 } 2087 }
2089 2088
2090 void FrameLoader::checkNavigationPolicyAndContinueLoad(PassRefPtr<FormState> for mState) 2089 void FrameLoader::checkNavigationPolicyAndContinueLoad(PassRefPtr<FormState> for mState)
2091 { 2090 {
2092 // If we loaded an alternate page to replace an unreachableURL, we'll get in here with a 2091 // If we loaded an alternate page to replace an unreachableURL, we'll get in here with a
2093 // nil policyDataSource because loading the alternate page will have passed 2092 // nil policyDataSource because loading the alternate page will have passed
2094 // through this method already, nested; otherwise, policyDataSource should s till be set. 2093 // through this method already, nested; otherwise, policyDataSource should s till be set.
2095 ASSERT(m_policyDocumentLoader || !m_provisionalDocumentLoader->unreachableUR L().isEmpty()); 2094 ASSERT(m_policyDocumentLoader || !m_provisionalDocumentLoader->unreachableUR L().isEmpty());
2096 2095
2097 // stopAllLoaders can detach the Frame, so protect it. 2096 // stopAllLoaders can detach the Frame, so protect it.
(...skipping 460 matching lines...) Expand 10 before | Expand all | Expand 10 after
2558 } 2557 }
2559 2558
2560 Frame* createWindow(Frame* openerFrame, Frame* lookupFrame, const FrameLoadReque st& request, const WindowFeatures& features, bool& created) 2559 Frame* createWindow(Frame* openerFrame, Frame* lookupFrame, const FrameLoadReque st& request, const WindowFeatures& features, bool& created)
2561 { 2560 {
2562 ASSERT(!features.dialog || request.frameName().isEmpty()); 2561 ASSERT(!features.dialog || request.frameName().isEmpty());
2563 2562
2564 if (!request.frameName().isEmpty() && request.frameName() != "_blank") { 2563 if (!request.frameName().isEmpty() && request.frameName() != "_blank") {
2565 if (Frame* frame = lookupFrame->loader()->findFrameForNavigation(request .frameName(), openerFrame->document())) { 2564 if (Frame* frame = lookupFrame->loader()->findFrameForNavigation(request .frameName(), openerFrame->document())) {
2566 if (request.frameName() != "_self") { 2565 if (request.frameName() != "_self") {
2567 if (Page* page = frame->page()) 2566 if (Page* page = frame->page())
2568 page->chrome()->focus(); 2567 page->chrome().focus();
2569 } 2568 }
2570 created = false; 2569 created = false;
2571 return frame; 2570 return frame;
2572 } 2571 }
2573 } 2572 }
2574 2573
2575 // Sandboxed frames cannot open new auxiliary browsing contexts. 2574 // Sandboxed frames cannot open new auxiliary browsing contexts.
2576 if (isDocumentSandboxed(openerFrame, SandboxPopups)) { 2575 if (isDocumentSandboxed(openerFrame, SandboxPopups)) {
2577 // FIXME: This message should be moved off the console once a solution t o https://bugs.webkit.org/show_bug.cgi?id=103274 exists. 2576 // FIXME: This message should be moved off the console once a solution t o https://bugs.webkit.org/show_bug.cgi?id=103274 exists.
2578 openerFrame->document()->addConsoleMessage(SecurityMessageSource, ErrorM essageLevel, "Blocked opening '" + request.resourceRequest().url().elidedString( ) + "' in a new window because the request was made in a sandboxed frame whose ' allow-popups' permission is not set."); 2577 openerFrame->document()->addConsoleMessage(SecurityMessageSource, ErrorM essageLevel, "Blocked opening '" + request.resourceRequest().url().elidedString( ) + "' in a new window because the request was made in a sandboxed frame whose ' allow-popups' permission is not set.");
(...skipping 10 matching lines...) Expand all
2589 if (openerFrame->settings() && !openerFrame->settings()->supportsMultipleWin dows()) { 2588 if (openerFrame->settings() && !openerFrame->settings()->supportsMultipleWin dows()) {
2590 created = false; 2589 created = false;
2591 return openerFrame; 2590 return openerFrame;
2592 } 2591 }
2593 2592
2594 Page* oldPage = openerFrame->page(); 2593 Page* oldPage = openerFrame->page();
2595 if (!oldPage) 2594 if (!oldPage)
2596 return 0; 2595 return 0;
2597 2596
2598 NavigationAction action(requestWithReferrer.resourceRequest()); 2597 NavigationAction action(requestWithReferrer.resourceRequest());
2599 Page* page = oldPage->chrome()->createWindow(openerFrame, requestWithReferre r, features, action); 2598 Page* page = oldPage->chrome().createWindow(openerFrame, requestWithReferrer , features, action);
2600 if (!page) 2599 if (!page)
2601 return 0; 2600 return 0;
2602 2601
2603 Frame* frame = page->mainFrame(); 2602 Frame* frame = page->mainFrame();
2604 2603
2605 frame->loader()->forceSandboxFlags(openerFrame->document()->sandboxFlags()); 2604 frame->loader()->forceSandboxFlags(openerFrame->document()->sandboxFlags());
2606 2605
2607 if (request.frameName() != "_blank") 2606 if (request.frameName() != "_blank")
2608 frame->tree()->setName(request.frameName()); 2607 frame->tree()->setName(request.frameName());
2609 2608
2610 page->chrome()->setToolbarsVisible(features.toolBarVisible || features.locat ionBarVisible); 2609 page->chrome().setToolbarsVisible(features.toolBarVisible || features.locati onBarVisible);
2611 page->chrome()->setStatusbarVisible(features.statusBarVisible); 2610 page->chrome().setStatusbarVisible(features.statusBarVisible);
2612 page->chrome()->setScrollbarsVisible(features.scrollbarsVisible); 2611 page->chrome().setScrollbarsVisible(features.scrollbarsVisible);
2613 page->chrome()->setMenubarVisible(features.menuBarVisible); 2612 page->chrome().setMenubarVisible(features.menuBarVisible);
2614 page->chrome()->setResizable(features.resizable); 2613 page->chrome().setResizable(features.resizable);
2615 2614
2616 // 'x' and 'y' specify the location of the window, while 'width' and 'height ' 2615 // 'x' and 'y' specify the location of the window, while 'width' and 'height '
2617 // specify the size of the viewport. We can only resize the window, so adjus t 2616 // specify the size of the viewport. We can only resize the window, so adjus t
2618 // for the difference between the window size and the viewport size. 2617 // for the difference between the window size and the viewport size.
2619 2618
2620 FloatRect windowRect = page->chrome()->windowRect(); 2619 FloatRect windowRect = page->chrome().windowRect();
2621 FloatSize viewportSize = page->chrome()->pageRect().size(); 2620 FloatSize viewportSize = page->chrome().pageRect().size();
2622 2621
2623 if (features.xSet) 2622 if (features.xSet)
2624 windowRect.setX(features.x); 2623 windowRect.setX(features.x);
2625 if (features.ySet) 2624 if (features.ySet)
2626 windowRect.setY(features.y); 2625 windowRect.setY(features.y);
2627 if (features.widthSet) 2626 if (features.widthSet)
2628 windowRect.setWidth(features.width + (windowRect.width() - viewportSize. width())); 2627 windowRect.setWidth(features.width + (windowRect.width() - viewportSize. width()));
2629 if (features.heightSet) 2628 if (features.heightSet)
2630 windowRect.setHeight(features.height + (windowRect.height() - viewportSi ze.height())); 2629 windowRect.setHeight(features.height + (windowRect.height() - viewportSi ze.height()));
2631 2630
2632 // Ensure non-NaN values, minimum size as well as being within valid screen area. 2631 // Ensure non-NaN values, minimum size as well as being within valid screen area.
2633 FloatRect newWindowRect = DOMWindow::adjustWindowRect(page, windowRect); 2632 FloatRect newWindowRect = DOMWindow::adjustWindowRect(page, windowRect);
2634 2633
2635 page->chrome()->setWindowRect(newWindowRect); 2634 page->chrome().setWindowRect(newWindowRect);
2636 page->chrome()->show(); 2635 page->chrome().show();
2637 2636
2638 created = true; 2637 created = true;
2639 return frame; 2638 return frame;
2640 } 2639 }
2641 2640
2642 } // namespace WebCore 2641 } // namespace WebCore
OLDNEW
« no previous file with comments | « Source/core/loader/FrameLoader.h ('k') | Source/core/page/BarProp.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698