summaryrefslogtreecommitdiffstats
path: root/WebKit/win/WebView.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'WebKit/win/WebView.cpp')
-rw-r--r--WebKit/win/WebView.cpp74
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());