diff options
Diffstat (limited to 'WebKit/win/WebView.cpp')
-rw-r--r-- | WebKit/win/WebView.cpp | 74 |
1 files changed, 65 insertions, 9 deletions
diff --git a/WebKit/win/WebView.cpp b/WebKit/win/WebView.cpp index 20f0f06..525108f 100644 --- a/WebKit/win/WebView.cpp +++ b/WebKit/win/WebView.cpp @@ -105,8 +105,8 @@ #include <WebCore/PlatformKeyboardEvent.h> #include <WebCore/PlatformMouseEvent.h> #include <WebCore/PlatformWheelEvent.h> +#include <WebCore/PluginData.h> #include <WebCore/PluginDatabase.h> -#include <WebCore/PluginInfoStore.h> #include <WebCore/PluginView.h> #include <WebCore/PopupMenu.h> #include <WebCore/ProgressTracker.h> @@ -330,7 +330,7 @@ WebView::WebView() , m_didClose(false) , m_inIMEComposition(0) , m_toolTipHwnd(0) - , m_closeWindowTimer(this, &WebView::closeWindowTimerFired) + , m_closeWindowTimer(0) , m_topLevelParent(0) , m_deleteBackingStoreTimerActive(false) , m_transparent(false) @@ -1079,13 +1079,67 @@ void WebView::frameRect(RECT* rect) ::GetWindowRect(m_viewWindow, rect); } +class WindowCloseTimer : public WebCore::SuspendableTimer { +public: + static WindowCloseTimer* create(WebView*); + +private: + WindowCloseTimer(ScriptExecutionContext*, WebView*); + virtual void contextDestroyed(); + virtual void fired(); + + WebView* m_webView; +}; + +WindowCloseTimer* WindowCloseTimer::create(WebView* webView) +{ + ASSERT_ARG(webView, webView); + Frame* frame = core(webView->topLevelFrame()); + ASSERT(frame); + if (!frame) + return 0; + + Document* document = frame->document(); + ASSERT(document); + if (!document) + return 0; + + return new WindowCloseTimer(document, webView); +} + +WindowCloseTimer::WindowCloseTimer(ScriptExecutionContext* context, WebView* webView) + : SuspendableTimer(context) + , m_webView(webView) +{ + ASSERT_ARG(context, context); + ASSERT_ARG(webView, webView); +} + +void WindowCloseTimer::contextDestroyed() +{ + SuspendableTimer::contextDestroyed(); + delete this; +} + +void WindowCloseTimer::fired() +{ + m_webView->closeWindowTimerFired(); +} + void WebView::closeWindowSoon() { - m_closeWindowTimer.startOneShot(0); + if (m_closeWindowTimer) + return; + + m_closeWindowTimer = WindowCloseTimer::create(this); + if (!m_closeWindowTimer) + return; + m_closeWindowTimer->startOneShot(0); + AddRef(); } -void WebView::closeWindowTimerFired(WebCore::Timer<WebView>*) +void WebView::closeWindowTimerFired() { closeWindow(); Release(); @@ -2425,7 +2479,7 @@ HRESULT STDMETHODCALLTYPE WebView::canShowMIMEType( *canShow = MIMETypeRegistry::isSupportedImageMIMEType(mimeTypeStr) || MIMETypeRegistry::isSupportedNonImageMIMEType(mimeTypeStr) || - PluginInfoStore::supportsMIMEType(mimeTypeStr) || + (m_page && m_page->pluginData()->supportsMimeType(mimeTypeStr)) || shouldUseEmbeddedView(mimeTypeStr); return S_OK; @@ -2546,7 +2600,7 @@ HRESULT STDMETHODCALLTYPE WebView::initWithFrame( InitializeLoggingChannelsIfNecessary(); #if ENABLE(DATABASE) - WebKitSetWebDatabasesPathIfNecessary(); + WebKitInitializeWebDatabasesIfNecessary(); #endif WebKitSetApplicationCachePathIfNecessary(); @@ -2912,8 +2966,10 @@ void WebView::setZoomMultiplier(float multiplier, bool isTextOnly) { m_zoomMultiplier = multiplier; m_page->settings()->setZoomMode(isTextOnly ? ZoomTextOnly : ZoomPage); - if (Frame* coreFrame = core(m_mainFrame)) - coreFrame->setZoomFactor(multiplier, isTextOnly ? ZoomTextOnly : ZoomPage); + if (Frame* coreFrame = core(m_mainFrame)) { + if (FrameView* view = coreFrame->view()) + view->setZoomFactor(multiplier, isTextOnly ? ZoomTextOnly : ZoomPage); + } } HRESULT STDMETHODCALLTYPE WebView::textSizeMultiplier( @@ -4735,7 +4791,7 @@ HRESULT WebView::notifyPreferencesChanged(IWebNotification* notification) settings->setWebGLEnabled(true); #endif // ENABLE(3D_CANVAS) - if (!m_closeWindowTimer.isActive()) + if (!m_closeWindowTimer) m_mainFrame->invalidate(); // FIXME hr = updateSharedSettingsFromPreferencesIfNeeded(preferences.get()); |