diff options
Diffstat (limited to 'src/3rdparty/webkit/WebCore/page/Page.cpp')
-rw-r--r-- | src/3rdparty/webkit/WebCore/page/Page.cpp | 130 |
1 files changed, 57 insertions, 73 deletions
diff --git a/src/3rdparty/webkit/WebCore/page/Page.cpp b/src/3rdparty/webkit/WebCore/page/Page.cpp index 460183a..70b4459 100644 --- a/src/3rdparty/webkit/WebCore/page/Page.cpp +++ b/src/3rdparty/webkit/WebCore/page/Page.cpp @@ -21,14 +21,14 @@ #include "config.h" #include "Page.h" +#include "CSSStyleSelector.h" #include "Chrome.h" #include "ChromeClient.h" #include "ContextMenuClient.h" #include "ContextMenuController.h" -#include "CSSStyleSelector.h" -#include "EditorClient.h" #include "DOMWindow.h" #include "DragController.h" +#include "EditorClient.h" #include "EventNames.h" #include "FileSystem.h" #include "FocusController.h" @@ -36,21 +36,22 @@ #include "FrameLoader.h" #include "FrameTree.h" #include "FrameView.h" +#include "HTMLElement.h" #include "HistoryItem.h" #include "InspectorController.h" #include "Logging.h" -#include "NetworkStateNotifier.h" #include "Navigator.h" +#include "NetworkStateNotifier.h" #include "PageGroup.h" #include "PluginData.h" #include "ProgressTracker.h" #include "RenderWidget.h" +#include "ScriptController.h" #include "SelectionController.h" #include "Settings.h" #include "StringHash.h" #include "TextResourceDecoder.h" #include "Widget.h" -#include "ScriptController.h" #include <wtf/HashMap.h> #include <wtf/RefCountedLeakCounter.h> #include <wtf/StdLibExtras.h> @@ -89,20 +90,8 @@ static void networkStateChanged() } AtomicString eventName = networkStateNotifier().onLine() ? eventNames().onlineEvent : eventNames().offlineEvent; - - for (unsigned i = 0; i < frames.size(); i++) { - Document* document = frames[i]->document(); - - if (!document) - continue; - - // If the document does not have a body the event should be dispatched to the document - EventTargetNode* eventTarget = document->body(); - if (!eventTarget) - eventTarget = document; - - eventTarget->dispatchEventForType(eventName, false, false); - } + for (unsigned i = 0; i < frames.size(); i++) + frames[i]->document()->dispatchWindowEvent(eventName, false, false); } Page::Page(ChromeClient* chromeClient, ContextMenuClient* contextMenuClient, EditorClient* editorClient, DragClient* dragClient, InspectorClient* inspectorClient) @@ -111,7 +100,7 @@ Page::Page(ChromeClient* chromeClient, ContextMenuClient* contextMenuClient, Edi , m_dragController(new DragController(this, dragClient)) , m_focusController(new FocusController(this)) , m_contextMenuController(new ContextMenuController(this, contextMenuClient)) - , m_inspectorController(new InspectorController(this, inspectorClient)) + , m_inspectorController(InspectorController::create(this, inspectorClient)) , m_settings(new Settings(this)) , m_progress(new ProgressTracker) , m_backForwardList(BackForwardList::create(this)) @@ -123,13 +112,12 @@ Page::Page(ChromeClient* chromeClient, ContextMenuClient* contextMenuClient, Edi , m_cookieEnabled(true) , m_areMemoryCacheClientCallsEnabled(true) , m_mediaVolume(1) + , m_javaScriptURLsAreAllowed(true) , m_parentInspectorController(0) , m_didLoadUserStyleSheet(false) , m_userStyleSheetModificationTime(0) , m_group(0) , m_debugger(0) - , m_pendingUnloadEventCount(0) - , m_pendingBeforeUnloadEventCount(0) , m_customHTMLTokenizerTimeDelay(-1) , m_customHTMLTokenizerChunkSize(-1) { @@ -157,11 +145,9 @@ Page::~Page() setGroupName(String()); allPages->remove(this); - for (Frame* frame = mainFrame(); frame; frame = frame->tree()->traverseNext()) { - if (frame->document()) - frame->document()->documentWillBecomeInactive(); + for (Frame* frame = mainFrame(); frame; frame = frame->tree()->traverseNext()) frame->pageDestroyed(); - } + m_editorClient->pageDestroyed(); if (m_parentInspectorController) m_parentInspectorController->pageDestroyed(); @@ -215,7 +201,19 @@ bool Page::goForward() void Page::goToItem(HistoryItem* item, FrameLoadType type) { // Abort any current load if we're going to a history item - m_mainFrame->loader()->stopAllLoaders(); + + // Define what to do with any open database connections. By default we stop them and terminate the database thread. + DatabasePolicy databasePolicy = DatabasePolicyStop; + +#if ENABLE(DATABASE) + // If we're navigating the history via a fragment on the same document, then we do not want to stop databases. + const KURL& currentURL = m_mainFrame->loader()->url(); + const KURL& newURL = item->url(); + + if (newURL.hasRef() && equalIgnoringRef(currentURL, newURL)) + databasePolicy = DatabasePolicyContinue; +#endif + m_mainFrame->loader()->stopAllLoaders(databasePolicy); m_mainFrame->loader()->goToItem(item, type); } @@ -233,7 +231,7 @@ void Page::setGroupName(const String& name) } if (name.isEmpty()) - m_group = 0; + m_group = m_singlePageGroup.get(); else { m_singlePageGroup.clear(); m_group = PageGroup::pageGroup(name); @@ -358,13 +356,12 @@ void Page::unmarkAllTextMatches() Frame* frame = mainFrame(); do { - if (Document* document = frame->document()) - document->removeMarkers(DocumentMarker::TextMatch); + frame->document()->removeMarkers(DocumentMarker::TextMatch); frame = incrementFrame(frame, true, false); } while (frame); } -const Selection& Page::selection() const +const VisibleSelection& Page::selection() const { return focusController()->focusedOrMainFrame()->selection()->selection(); } @@ -404,8 +401,23 @@ void Page::setMediaVolume(float volume) m_mediaVolume = volume; for (Frame* frame = mainFrame(); frame; frame = frame->tree()->traverseNext()) { - if (frame->document()) - frame->document()->mediaVolumeDidChange(); + frame->document()->mediaVolumeDidChange(); + } +} + +void Page::didMoveOnscreen() +{ + for (Frame* frame = mainFrame(); frame; frame = frame->tree()->traverseNext()) { + if (frame->view()) + frame->view()->didMoveOnscreen(); + } +} + +void Page::willMoveOffscreen() +{ + for (Frame* frame = mainFrame(); frame; frame = frame->tree()->traverseNext()) { + if (frame->view()) + frame->view()->willMoveOffscreen(); } } @@ -461,7 +473,9 @@ const String& Page::userStyleSheet() const if (!data) return m_userStyleSheet; - m_userStyleSheet = TextResourceDecoder::create("text/css")->decode(data->data(), data->size()); + RefPtr<TextResourceDecoder> decoder = TextResourceDecoder::create("text/css"); + m_userStyleSheet = decoder->decode(data->data(), data->size()); + m_userStyleSheet += decoder->flush(); return m_userStyleSheet; } @@ -548,46 +562,6 @@ void Page::setSessionStorage(PassRefPtr<SessionStorage> newStorage) m_sessionStorage = newStorage; } #endif - -unsigned Page::pendingUnloadEventCount() -{ - return m_pendingUnloadEventCount; -} - -void Page::changePendingUnloadEventCount(int delta) -{ - if (!delta) - return; - ASSERT( (delta + (int)m_pendingUnloadEventCount) >= 0 ); - - if (m_pendingUnloadEventCount == 0) - m_chrome->disableSuddenTermination(); - else if ((m_pendingUnloadEventCount + delta) == 0) - m_chrome->enableSuddenTermination(); - - m_pendingUnloadEventCount += delta; - return; -} - -unsigned Page::pendingBeforeUnloadEventCount() -{ - return m_pendingBeforeUnloadEventCount; -} - -void Page::changePendingBeforeUnloadEventCount(int delta) -{ - if (!delta) - return; - ASSERT( (delta + (int)m_pendingBeforeUnloadEventCount) >= 0 ); - - if (m_pendingBeforeUnloadEventCount == 0) - m_chrome->disableSuddenTermination(); - else if ((m_pendingBeforeUnloadEventCount + delta) == 0) - m_chrome->enableSuddenTermination(); - - m_pendingBeforeUnloadEventCount += delta; - return; -} #if ENABLE(WML) WMLPageState* Page::wmlPageState() @@ -629,4 +603,14 @@ void Page::setMemoryCacheClientCallsEnabled(bool enabled) frame->loader()->tellClientAboutPastMemoryCacheLoads(); } +void Page::setJavaScriptURLsAreAllowed(bool areAllowed) +{ + m_javaScriptURLsAreAllowed = areAllowed; +} + +bool Page::javaScriptURLsAreAllowed() const +{ + return m_javaScriptURLsAreAllowed; +} + } // namespace WebCore |