summaryrefslogtreecommitdiffstats
path: root/WebKit
diff options
context:
space:
mode:
authorThe Android Open Source Project <initial-contribution@android.com>2009-03-05 14:34:32 -0800
committerThe Android Open Source Project <initial-contribution@android.com>2009-03-05 14:34:32 -0800
commit635860845790a19bf50bbc51ba8fb66a96dde068 (patch)
treeef6ad9ff73a5b57f65249d4232a202fa77e6a140 /WebKit
parent8e35f3cfc7fba1d1c829dc557ebad6409cbe16a2 (diff)
downloadexternal_webkit-635860845790a19bf50bbc51ba8fb66a96dde068.zip
external_webkit-635860845790a19bf50bbc51ba8fb66a96dde068.tar.gz
external_webkit-635860845790a19bf50bbc51ba8fb66a96dde068.tar.bz2
auto import from //depot/cupcake/@136594
Diffstat (limited to 'WebKit')
-rw-r--r--WebKit/ChangeLog204
-rw-r--r--WebKit/English.lproj/Localizable.stringsbin30784 -> 31908 bytes
-rw-r--r--WebKit/StringsNotToBeLocalized.txt48
-rw-r--r--WebKit/WebKit.xcodeproj/project.pbxproj299
-rw-r--r--WebKit/android/TimeCounter.cpp18
-rw-r--r--WebKit/android/TimeCounter.h8
-rw-r--r--WebKit/android/WebCoreSupport/ChromeClientAndroid.cpp12
-rw-r--r--WebKit/android/WebCoreSupport/ChromeClientAndroid.h5
-rw-r--r--WebKit/android/WebCoreSupport/EditorClientAndroid.cpp1
-rw-r--r--WebKit/android/WebCoreSupport/EditorClientAndroid.h8
-rw-r--r--WebKit/android/WebCoreSupport/FrameLoaderClientAndroid.cpp238
-rw-r--r--WebKit/android/WebCoreSupport/FrameLoaderClientAndroid.h33
-rw-r--r--WebKit/android/jni/PictureSet.cpp6
-rw-r--r--WebKit/android/jni/WebCoreFrameBridge.cpp58
-rw-r--r--WebKit/android/jni/WebHistory.cpp44
-rw-r--r--WebKit/android/jni/WebViewCore.cpp37
-rw-r--r--WebKit/android/nav/CacheBuilder.cpp89
-rw-r--r--WebKit/android/nav/CacheBuilder.h1
-rw-r--r--WebKit/android/nav/CachedFrame.cpp12
-rw-r--r--WebKit/android/nav/CachedFrame.h2
-rw-r--r--WebKit/android/nav/CachedRoot.cpp3
-rw-r--r--WebKit/android/plugins/ANPTypefaceInterface.cpp4
-rw-r--r--WebKit/android/stl/algorithm3
-rw-r--r--WebKit/cf/ChangeLog6
-rw-r--r--WebKit/cf/WebCoreSupport/WebInspectorClientCF.cpp12
-rw-r--r--WebKit/gtk/ChangeLog692
-rw-r--r--WebKit/gtk/WebCoreSupport/ChromeClientGtk.cpp158
-rw-r--r--WebKit/gtk/WebCoreSupport/ChromeClientGtk.h3
-rw-r--r--WebKit/gtk/WebCoreSupport/EditorClientGtk.cpp6
-rw-r--r--WebKit/gtk/WebCoreSupport/EditorClientGtk.h1
-rw-r--r--WebKit/gtk/WebCoreSupport/FrameLoaderClientGtk.cpp200
-rw-r--r--WebKit/gtk/WebCoreSupport/FrameLoaderClientGtk.h15
-rw-r--r--WebKit/gtk/WebCoreSupport/InspectorClientGtk.cpp4
-rw-r--r--WebKit/gtk/webkit/webkit.h4
-rw-r--r--WebKit/gtk/webkit/webkitdefines.h7
-rw-r--r--WebKit/gtk/webkit/webkitnetworkrequest.cpp23
-rw-r--r--WebKit/gtk/webkit/webkitnetworkrequest.h7
-rw-r--r--WebKit/gtk/webkit/webkitprivate.cpp13
-rw-r--r--WebKit/gtk/webkit/webkitprivate.h41
-rw-r--r--WebKit/gtk/webkit/webkitwebbackforwardlist.cpp60
-rw-r--r--WebKit/gtk/webkit/webkitwebbackforwardlist.h7
-rw-r--r--WebKit/gtk/webkit/webkitwebframe.cpp119
-rw-r--r--WebKit/gtk/webkit/webkitwebframe.h2
-rw-r--r--WebKit/gtk/webkit/webkitwebhistoryitem.cpp49
-rw-r--r--WebKit/gtk/webkit/webkitwebhistoryitem.h7
-rw-r--r--WebKit/gtk/webkit/webkitwebinspector.cpp38
-rw-r--r--WebKit/gtk/webkit/webkitwebnavigationaction.cpp312
-rw-r--r--WebKit/gtk/webkit/webkitwebnavigationaction.h93
-rw-r--r--WebKit/gtk/webkit/webkitwebpolicydecision.cpp129
-rw-r--r--WebKit/gtk/webkit/webkitwebpolicydecision.h68
-rw-r--r--WebKit/gtk/webkit/webkitwebsettings.cpp70
-rw-r--r--WebKit/gtk/webkit/webkitwebsettings.h1
-rw-r--r--WebKit/gtk/webkit/webkitwebview.cpp462
-rw-r--r--WebKit/gtk/webkit/webkitwebview.h35
-rw-r--r--WebKit/gtk/webkit/webkitwebwindowfeatures.cpp443
-rw-r--r--WebKit/gtk/webkit/webkitwebwindowfeatures.h68
-rw-r--r--WebKit/libgen.h1
-rw-r--r--WebKit/mac/Carbon/CarbonWindowAdapter.mm (renamed from WebKit/mac/Carbon/CarbonWindowAdapter.m)6
-rw-r--r--WebKit/mac/ChangeLog3819
-rw-r--r--WebKit/mac/Configurations/Base.xcconfig15
-rw-r--r--WebKit/mac/Configurations/DebugRelease.xcconfig4
-rw-r--r--WebKit/mac/Configurations/Version.xcconfig2
-rw-r--r--WebKit/mac/Configurations/WebKit.xcconfig2
-rw-r--r--WebKit/mac/DOM/WebDOMOperations.mm9
-rw-r--r--WebKit/mac/DefaultDelegates/WebDefaultScriptDebugDelegate.m13
-rw-r--r--WebKit/mac/ForwardingHeaders/runtime/Completion.h1
-rw-r--r--WebKit/mac/ForwardingHeaders/runtime/Protect.h1
-rw-r--r--WebKit/mac/ForwardingHeaders/wtf/StdLibExtras.h1
-rw-r--r--WebKit/mac/History/WebBackForwardList.h2
-rw-r--r--WebKit/mac/History/WebBackForwardList.mm13
-rw-r--r--WebKit/mac/History/WebHistory.mm130
-rw-r--r--WebKit/mac/History/WebHistoryInternal.h3
-rw-r--r--WebKit/mac/History/WebHistoryItem.mm205
-rw-r--r--WebKit/mac/History/WebHistoryItemInternal.h7
-rw-r--r--WebKit/mac/History/WebHistoryItemPrivate.h15
-rw-r--r--WebKit/mac/History/WebHistoryPrivate.h6
-rw-r--r--WebKit/mac/Info.plist2
-rw-r--r--WebKit/mac/Misc/WebCache.mm20
-rw-r--r--WebKit/mac/Misc/WebCoreStatistics.h3
-rw-r--r--WebKit/mac/Misc/WebCoreStatistics.mm30
-rw-r--r--WebKit/mac/Misc/WebElementDictionary.mm6
-rw-r--r--WebKit/mac/Misc/WebIconDatabase.mm113
-rw-r--r--WebKit/mac/Misc/WebIconDatabaseInternal.h4
-rw-r--r--WebKit/mac/Misc/WebIconDatabasePrivate.h18
-rw-r--r--WebKit/mac/Misc/WebKitErrors.m8
-rw-r--r--WebKit/mac/Misc/WebKitLogging.h10
-rw-r--r--WebKit/mac/Misc/WebKitLogging.m5
-rw-r--r--WebKit/mac/Misc/WebKitNSStringExtras.m50
-rw-r--r--WebKit/mac/Misc/WebKitVersionChecks.h3
-rw-r--r--WebKit/mac/Misc/WebNSArrayExtras.h7
-rw-r--r--WebKit/mac/Misc/WebNSArrayExtras.m18
-rw-r--r--WebKit/mac/Misc/WebNSDataExtras.h4
-rw-r--r--WebKit/mac/Misc/WebNSDataExtras.m35
-rw-r--r--WebKit/mac/Misc/WebNSDictionaryExtras.h5
-rw-r--r--WebKit/mac/Misc/WebNSDictionaryExtras.m14
-rw-r--r--WebKit/mac/Misc/WebNSObjectExtras.h4
-rw-r--r--WebKit/mac/Misc/WebNSObjectExtras.mm93
-rw-r--r--WebKit/mac/Misc/WebNSPasteboardExtras.mm65
-rw-r--r--WebKit/mac/Misc/WebStringTruncator.m3
-rw-r--r--WebKit/mac/Panels/English.lproj/WebAuthenticationPanel.nib/classes.nib38
-rw-r--r--WebKit/mac/Panels/English.lproj/WebAuthenticationPanel.nib/designable.nib1182
-rw-r--r--WebKit/mac/Panels/English.lproj/WebAuthenticationPanel.nib/info.nib16
-rw-r--r--WebKit/mac/Panels/English.lproj/WebAuthenticationPanel.nib/keyedobjects.nibbin0 -> 9514 bytes
-rw-r--r--WebKit/mac/Panels/English.lproj/WebAuthenticationPanel.nib/objects.nibbin2931 -> 0 bytes
-rw-r--r--WebKit/mac/Panels/WebAuthenticationPanel.m17
-rw-r--r--WebKit/mac/Plugins/WebBaseNetscapePluginStream.h7
-rw-r--r--WebKit/mac/Plugins/WebBaseNetscapePluginStream.mm20
-rw-r--r--WebKit/mac/Plugins/WebBaseNetscapePluginView.h186
-rw-r--r--WebKit/mac/Plugins/WebBaseNetscapePluginView.mm2751
-rw-r--r--WebKit/mac/Plugins/WebBasePluginPackage.mm (renamed from WebKit/mac/Plugins/WebBasePluginPackage.m)6
-rw-r--r--WebKit/mac/Plugins/WebNetscapePluginEventHandler.h10
-rw-r--r--WebKit/mac/Plugins/WebNetscapePluginEventHandler.mm4
-rw-r--r--WebKit/mac/Plugins/WebNetscapePluginEventHandlerCarbon.h2
-rw-r--r--WebKit/mac/Plugins/WebNetscapePluginEventHandlerCarbon.mm9
-rw-r--r--WebKit/mac/Plugins/WebNetscapePluginEventHandlerCocoa.h2
-rw-r--r--WebKit/mac/Plugins/WebNetscapePluginEventHandlerCocoa.mm4
-rw-r--r--WebKit/mac/Plugins/WebNetscapePluginPackage.h40
-rw-r--r--WebKit/mac/Plugins/WebNetscapePluginPackage.m150
-rw-r--r--WebKit/mac/Plugins/WebNetscapePluginView.h174
-rw-r--r--WebKit/mac/Plugins/WebNetscapePluginView.mm2338
-rw-r--r--WebKit/mac/Plugins/WebPluginController.mm2
-rw-r--r--WebKit/mac/Plugins/WebPluginDatabase.mm6
-rw-r--r--WebKit/mac/Plugins/WebPluginRequest.h50
-rw-r--r--WebKit/mac/Plugins/WebPluginRequest.m80
-rw-r--r--WebKit/mac/Plugins/npapi.mm16
-rw-r--r--WebKit/mac/WebCoreSupport/WebCachedFramePlatformData.h (renamed from WebKit/mac/WebCoreSupport/WebCachedPagePlatformData.h)6
-rw-r--r--WebKit/mac/WebCoreSupport/WebChromeClient.h5
-rw-r--r--WebKit/mac/WebCoreSupport/WebChromeClient.mm25
-rw-r--r--WebKit/mac/WebCoreSupport/WebEditorClient.h1
-rw-r--r--WebKit/mac/WebCoreSupport/WebEditorClient.mm29
-rw-r--r--WebKit/mac/WebCoreSupport/WebFrameLoaderClient.h12
-rw-r--r--WebKit/mac/WebCoreSupport/WebFrameLoaderClient.mm181
-rw-r--r--WebKit/mac/WebCoreSupport/WebIconDatabaseClient.mm1
-rw-r--r--WebKit/mac/WebCoreSupport/WebPasteboardHelper.mm13
-rw-r--r--WebKit/mac/WebCoreSupport/WebSystemInterface.m11
-rw-r--r--WebKit/mac/WebCoreSupport/WebViewFactory.mm17
-rw-r--r--WebKit/mac/WebKit.exp1
-rw-r--r--WebKit/mac/WebKit.order2620
-rw-r--r--WebKit/mac/WebKitPrefix.h4
-rw-r--r--WebKit/mac/WebView/WebArchive.mm85
-rw-r--r--WebKit/mac/WebView/WebDataSource.mm7
-rw-r--r--WebKit/mac/WebView/WebDynamicScrollBarsView.m6
-rw-r--r--WebKit/mac/WebView/WebFrame.h7
-rw-r--r--WebKit/mac/WebView/WebFrame.mm139
-rw-r--r--WebKit/mac/WebView/WebFrameInternal.h1
-rw-r--r--WebKit/mac/WebView/WebFramePrivate.h15
-rw-r--r--WebKit/mac/WebView/WebFrameView.mm74
-rw-r--r--WebKit/mac/WebView/WebHTMLRepresentation.mm11
-rw-r--r--WebKit/mac/WebView/WebHTMLView.mm155
-rw-r--r--WebKit/mac/WebView/WebPDFView.mm2
-rw-r--r--WebKit/mac/WebView/WebPreferenceKeysPrivate.h3
-rw-r--r--WebKit/mac/WebView/WebPreferences.mm45
-rw-r--r--WebKit/mac/WebView/WebPreferencesPrivate.h15
-rw-r--r--WebKit/mac/WebView/WebRenderNode.mm27
-rw-r--r--WebKit/mac/WebView/WebResource.mm185
-rw-r--r--WebKit/mac/WebView/WebResourceInternal.h22
-rw-r--r--WebKit/mac/WebView/WebResourceLoadDelegatePrivate.h1
-rw-r--r--WebKit/mac/WebView/WebScriptDebugDelegate.h19
-rw-r--r--WebKit/mac/WebView/WebScriptDebugDelegate.mm57
-rw-r--r--WebKit/mac/WebView/WebScriptDebugger.h9
-rw-r--r--WebKit/mac/WebView/WebScriptDebugger.mm36
-rw-r--r--WebKit/mac/WebView/WebTextIterator.h55
-rw-r--r--WebKit/mac/WebView/WebTextIterator.mm69
-rw-r--r--WebKit/mac/WebView/WebUIDelegatePrivate.h4
-rw-r--r--WebKit/mac/WebView/WebView.h1
-rw-r--r--WebKit/mac/WebView/WebView.mm273
-rw-r--r--WebKit/mac/WebView/WebViewInternal.h4
-rw-r--r--WebKit/mac/WebView/WebViewPrivate.h16
-rw-r--r--WebKit/qt/Api/headers.pri11
-rw-r--r--WebKit/qt/Api/qtwebkit.prf4
-rw-r--r--WebKit/qt/Api/qwebdatabase.cpp148
-rw-r--r--WebKit/qt/Api/qwebdatabase.h59
-rw-r--r--WebKit/qt/Api/qwebdatabase_p.h38
-rw-r--r--WebKit/qt/Api/qwebframe.cpp282
-rw-r--r--WebKit/qt/Api/qwebframe.h19
-rw-r--r--WebKit/qt/Api/qwebframe_p.h9
-rw-r--r--WebKit/qt/Api/qwebhistory.cpp5
-rw-r--r--WebKit/qt/Api/qwebhistory.h2
-rw-r--r--WebKit/qt/Api/qwebkitglobal.h16
-rw-r--r--WebKit/qt/Api/qwebpage.cpp363
-rw-r--r--WebKit/qt/Api/qwebpage.h36
-rw-r--r--WebKit/qt/Api/qwebpage_p.h11
-rw-r--r--WebKit/qt/Api/qwebpluginfactory.cpp4
-rw-r--r--WebKit/qt/Api/qwebsecurityorigin.cpp176
-rw-r--r--WebKit/qt/Api/qwebsecurityorigin.h67
-rw-r--r--WebKit/qt/Api/qwebsecurityorigin_p.h40
-rw-r--r--WebKit/qt/Api/qwebsettings.cpp191
-rw-r--r--WebKit/qt/Api/qwebsettings.h16
-rw-r--r--WebKit/qt/Api/qwebview.cpp19
-rw-r--r--WebKit/qt/ChangeLog1335
-rw-r--r--WebKit/qt/QtLauncher/main.cpp104
-rw-r--r--WebKit/qt/WebCoreSupport/ChromeClientQt.cpp55
-rw-r--r--WebKit/qt/WebCoreSupport/ChromeClientQt.h3
-rw-r--r--WebKit/qt/WebCoreSupport/EditorClientQt.cpp55
-rw-r--r--WebKit/qt/WebCoreSupport/EditorClientQt.h1
-rw-r--r--WebKit/qt/WebCoreSupport/FrameLoaderClientQt.cpp125
-rw-r--r--WebKit/qt/WebCoreSupport/FrameLoaderClientQt.h9
-rw-r--r--WebKit/qt/WebKit_pch.h6
-rw-r--r--WebKit/qt/tests/qwebframe/image.pngbin0 -> 14743 bytes
-rw-r--r--WebKit/qt/tests/qwebframe/qwebframe.pro1
-rw-r--r--WebKit/qt/tests/qwebframe/qwebframe.qrc5
-rw-r--r--WebKit/qt/tests/qwebframe/tst_qwebframe.cpp210
-rw-r--r--WebKit/qt/tests/qwebpage/tst_qwebpage.cpp645
-rw-r--r--WebKit/win/AccessibleBase.cpp7
-rw-r--r--WebKit/win/COMPropertyBag.h77
-rw-r--r--WebKit/win/COMVariantSetter.h75
-rw-r--r--WebKit/win/ChangeLog1645
-rw-r--r--WebKit/win/DOMCoreClasses.cpp73
-rw-r--r--WebKit/win/DOMCoreClasses.h3
-rw-r--r--WebKit/win/Interfaces/DOMPrivate.idl1
-rw-r--r--WebKit/win/Interfaces/IWebEmbeddedView.idl5
-rw-r--r--WebKit/win/Interfaces/IWebFrameLoadDelegatePrivate.idl11
-rwxr-xr-xWebKit/win/Interfaces/IWebFramePrivate.idl2
-rw-r--r--WebKit/win/Interfaces/IWebHistoryItemPrivate.idl13
-rw-r--r--WebKit/win/Interfaces/IWebHistoryPrivate.idl38
-rw-r--r--WebKit/win/Interfaces/IWebIconDatabase.idl18
-rw-r--r--WebKit/win/Interfaces/IWebPreferences.idl3
-rw-r--r--WebKit/win/Interfaces/IWebPreferencesPrivate.idl11
-rw-r--r--WebKit/win/Interfaces/IWebResourceLoadDelegatePrivate.idl11
-rwxr-xr-xWebKit/win/Interfaces/IWebUIDelegatePrivate.idl3
-rw-r--r--WebKit/win/Interfaces/IWebView.idl10
-rw-r--r--WebKit/win/Interfaces/IWebViewPrivate.idl13
-rw-r--r--WebKit/win/Interfaces/WebKit.idl1
-rw-r--r--WebKit/win/MarshallingHelpers.cpp2
-rw-r--r--WebKit/win/WebCachedFramePlatformData.h (renamed from WebKit/win/WebCachedPagePlatformData.h)12
-rw-r--r--WebKit/win/WebCookieManager.cpp22
-rw-r--r--WebKit/win/WebCookieManagerCFNet.cpp52
-rw-r--r--WebKit/win/WebCookieManagerCurl.cpp48
-rw-r--r--WebKit/win/WebCoreLocalizedStrings.cpp1
-rw-r--r--WebKit/win/WebCoreStatistics.cpp8
-rw-r--r--WebKit/win/WebCoreSupport/EmbeddedWidget.cpp33
-rw-r--r--WebKit/win/WebCoreSupport/EmbeddedWidget.h15
-rw-r--r--WebKit/win/WebCoreSupport/WebChromeClient.cpp6
-rw-r--r--WebKit/win/WebCoreSupport/WebChromeClient.h3
-rw-r--r--WebKit/win/WebCoreSupport/WebContextMenuClient.cpp2
-rw-r--r--WebKit/win/WebCoreSupport/WebDragClient.cpp9
-rw-r--r--WebKit/win/WebCoreSupport/WebEditorClient.cpp7
-rw-r--r--WebKit/win/WebCoreSupport/WebEditorClient.h1
-rw-r--r--WebKit/win/WebCoreSupport/WebFrameLoaderClient.cpp186
-rw-r--r--WebKit/win/WebCoreSupport/WebFrameLoaderClient.h16
-rw-r--r--WebKit/win/WebCoreSupport/WebInspectorClient.cpp116
-rw-r--r--WebKit/win/WebCoreSupport/WebInspectorClient.h4
-rw-r--r--WebKit/win/WebDownload.cpp509
-rw-r--r--WebKit/win/WebDownload.h9
-rw-r--r--WebKit/win/WebDownloadCFNet.cpp537
-rw-r--r--WebKit/win/WebDownloadCurl.cpp151
-rw-r--r--WebKit/win/WebDropSource.cpp2
-rw-r--r--WebKit/win/WebFrame.cpp39
-rw-r--r--WebKit/win/WebFrame.h1
-rw-r--r--WebKit/win/WebHistory.cpp138
-rw-r--r--WebKit/win/WebHistory.h14
-rw-r--r--WebKit/win/WebHistoryItem.cpp279
-rw-r--r--WebKit/win/WebHistoryItem.h13
-rw-r--r--WebKit/win/WebIconDatabase.cpp37
-rw-r--r--WebKit/win/WebIconDatabase.h10
-rw-r--r--WebKit/win/WebJavaScriptCollector.cpp2
-rw-r--r--WebKit/win/WebKit.resources/Info.plist2
-rw-r--r--WebKit/win/WebKit.vcproj/WebKit.def4
-rw-r--r--WebKit/win/WebKit.vcproj/WebKit.rc6
-rw-r--r--WebKit/win/WebKit.vcproj/WebKit.sln2
-rw-r--r--WebKit/win/WebKit.vcproj/WebKit.vcproj293
-rwxr-xr-xWebKit/win/WebKit.vcproj/WebKit_Cairo.def127
-rwxr-xr-xWebKit/win/WebKit.vcproj/WebKit_Cairo_debug.def133
-rw-r--r--WebKit/win/WebKit.vcproj/WebKit_debug.def4
-rw-r--r--WebKit/win/WebKit.vcproj/resource.h6
-rw-r--r--WebKit/win/WebKit.vcproj/searchCancel.pngbin0 -> 908 bytes
-rw-r--r--WebKit/win/WebKit.vcproj/searchCancelPressed.pngbin0 -> 895 bytes
-rw-r--r--WebKit/win/WebKit.vcproj/searchMagnifier.pngbin0 -> 1028 bytes
-rw-r--r--WebKit/win/WebKit.vcproj/searchMagnifierResults.pngbin0 -> 1224 bytes
-rw-r--r--WebKit/win/WebKitClassFactory.cpp2
-rw-r--r--WebKit/win/WebKitDLL.cpp8
-rw-r--r--WebKit/win/WebKitPrefix.cpp1
-rw-r--r--WebKit/win/WebMutableURLRequest.cpp9
-rw-r--r--WebKit/win/WebPreferenceKeysPrivate.h7
-rw-r--r--WebKit/win/WebPreferences.cpp79
-rw-r--r--WebKit/win/WebPreferences.h27
-rw-r--r--WebKit/win/WebResource.cpp3
-rw-r--r--WebKit/win/WebScriptCallFrame.cpp36
-rw-r--r--WebKit/win/WebScriptCallFrame.h4
-rw-r--r--WebKit/win/WebTextRenderer.cpp4
-rw-r--r--WebKit/win/WebURLAuthenticationChallenge.cpp3
-rw-r--r--WebKit/win/WebURLAuthenticationChallengeSender.cpp41
-rw-r--r--WebKit/win/WebURLAuthenticationChallengeSenderCFNet.cpp80
-rw-r--r--WebKit/win/WebURLAuthenticationChallengeSenderCurl.cpp65
-rw-r--r--WebKit/win/WebURLProtectionSpace.cpp26
-rw-r--r--WebKit/win/WebURLResponse.cpp7
-rw-r--r--WebKit/win/WebView.cpp246
-rw-r--r--WebKit/win/WebView.h34
-rw-r--r--WebKit/wx/ChangeLog265
-rw-r--r--WebKit/wx/WebFrame.cpp69
-rw-r--r--WebKit/wx/WebFrame.h49
-rw-r--r--WebKit/wx/WebFramePrivate.h (renamed from WebKit/mac/Plugins/WebPlugInStreamLoaderDelegate.h)48
-rw-r--r--WebKit/wx/WebKitSupport/ChromeClientWx.cpp7
-rw-r--r--WebKit/wx/WebKitSupport/ChromeClientWx.h3
-rw-r--r--WebKit/wx/WebKitSupport/ContextMenuClientWx.cpp8
-rw-r--r--WebKit/wx/WebKitSupport/EditCommandWx.h54
-rw-r--r--WebKit/wx/WebKitSupport/EditorClientWx.cpp70
-rw-r--r--WebKit/wx/WebKitSupport/EditorClientWx.h7
-rw-r--r--WebKit/wx/WebKitSupport/FrameLoaderClientWx.cpp23
-rw-r--r--WebKit/wx/WebKitSupport/FrameLoaderClientWx.h10
-rw-r--r--WebKit/wx/WebView.cpp123
-rw-r--r--WebKit/wx/WebView.h44
-rw-r--r--WebKit/wx/WebViewPrivate.h7
-rw-r--r--WebKit/wx/presets/wxwebkit.bkl10
304 files changed, 23957 insertions, 6915 deletions
diff --git a/WebKit/ChangeLog b/WebKit/ChangeLog
index b44c423..457e527 100644
--- a/WebKit/ChangeLog
+++ b/WebKit/ChangeLog
@@ -1,3 +1,207 @@
+2009-01-26 Mark Rowe <mrowe@apple.com>
+
+ Rubber-stamped by Sam Weinig.
+
+ Clean up after r40240.
+
+ * WebKit.xcodeproj/project.pbxproj: Reinstate WebKitPluginHost.defs.
+
+2009-01-25 Darin Adler <darin@apple.com>
+
+ Try to fix full build on Mac Leopard.
+
+ * WebKit.xcodeproj/project.pbxproj: Removed WebKitPluginClient.defs from the WebKit target.
+ Maybe this is temporary, but I had to do it to get the full build to succeed.
+
+2009-01-25 Mark Rowe <mrowe@apple.com>
+
+ Rubber-stamped by Dan Bernstein.
+
+ Improve the consistency of settings in our .xcconfig files.
+
+ * WebKit.xcodeproj/project.pbxproj:
+
+2009-01-23 Brady Eidson <beidson@apple.com>
+
+ Rubberstamped by Darin Adler
+
+ Rename CachedPagePlatformData to CachedFramePlatformData to more accurately reflect its true role.
+
+ * WebKit.xcodeproj/project.pbxproj:
+
+2009-01-20 Anders Carlsson <andersca@apple.com>
+
+ Reviewed by Sam Weinig.
+
+ Add ProxyInstance files.
+
+ * WebKit.xcodeproj/project.pbxproj:
+
+2009-01-04 David Kilzer <ddkilzer@apple.com>
+
+ Don't install internal headers in WebKit framework
+
+ Reviewed by Darin Adler.
+
+ * WebKit.xcodeproj/project.pbxproj: Remove roles from internal
+ headers so they're not installed.
+
+2009-01-02 Darin Adler <darin@apple.com>
+
+ * StringsNotToBeLocalized.txt: Updated.
+
+2008-12-23 Darin Adler <darin@apple.com>
+
+ Reviewed by Alexey Proskuryakov.
+
+ - fix https://bugs.webkit.org/show_bug.cgi?id=22976
+ crash due to Mail's use of WebArchive and WebResource on non-main thread
+
+ * StringsNotToBeLocalized.txt: Updated.
+
+ * WebKit.xcodeproj/project.pbxproj: Added new file WebNSObjectExtras.mm and
+ existing file WebResourceInternal.h.
+
+2008-12-08 David Kilzer <ddkilzer@apple.com>
+
+ Bug 22555: Sort "children" sections in Xcode project files
+
+ <https://bugs.webkit.org/show_bug.cgi?id=22555>
+
+ Reviewed by Eric Seidel.
+
+ * WebKit.xcodeproj/project.pbxproj: Sorted.
+
+2008-12-08 Darin Adler <darin@apple.com>
+
+ * StringsNotToBeLocalized.txt: Updated for recent changes.
+
+2008-12-05 Dan Bernstein <mitz@apple.com>
+
+ Mac build fix.
+
+ * WebKit.xcodeproj/project.pbxproj:
+
+2008-12-05 Dan Bernstein <mitz@apple.com>
+
+ Mac build fix.
+
+ * WebKit.xcodeproj/project.pbxproj:
+
+2008-12-04 Anders Carlsson <andersca@apple.com>
+
+ Reviewed by Sam Weinig.
+
+ Add HostedNetscapePluginStream.
+
+ * WebKit.xcodeproj/project.pbxproj:
+
+2008-12-03 Anders Carlsson <andersca@apple.com>
+
+ Reviewed by Sam Weinig.
+
+ Move WebPluginRequest to its own file.
+
+ * WebKit.xcodeproj/project.pbxproj:
+
+2008-12-03 Steve Falkenburg <sfalken@apple.com>
+
+ Update strings not to be localized.
+
+ Reviewed by Adam Roben.
+
+ * StringsNotToBeLocalized.txt:
+
+2008-11-26 Mark Rowe <mrowe@apple.com>
+
+ Build fix.
+
+ Fix up the references to files under WebKit/mac/Plugins/Hosted.
+
+ * WebKit.xcodeproj/project.pbxproj:
+
+2008-11-26 Anders Carlsson <andersca@apple.com>
+
+ Reviewed by Mark Rowe.
+
+ Add plug-in host related files to the Xcode project.
+
+ * WebKit.xcodeproj/project.pbxproj:
+
+2008-11-14 Dan Bernstein <mitz@apple.com>
+
+ Reviewed by Darin Adler.
+
+ - part of <rdar://problem/6234337> Add a Text Direction menu to the default context menu when appropriate
+
+ * English.lproj/Localizable.strings: Added the Text Direction submenu
+ title.
+
+2008-11-13 John Sullivan <sullivan@apple.com>
+
+ fixed <rdar://problem/6361578> Web Kit UI strings: a few edits
+
+ Reviewed by Tim Hatcher
+
+ * English.lproj/Localizable.strings:
+ updated for these changes
+
+ * StringsNotToBeLocalized.txt:
+ removed unused exception
+
+2008-11-12 John Sullivan <sullivan@apple.com>
+
+ fixed <rdar://problem/3839110> Authentication dialogs talk about passwords being sent "in the clear"
+
+ Reviewed by Tim Hatcher
+
+ * English.lproj/Localizable.strings:
+ * StringsNotToBeLocalized.txt:
+ updated for this change
+
+2008-11-10 Anders Carlsson <andersca@apple.com>
+
+ Reviewed by Kevin Decker.
+
+ Add WebHostedNetscapePluginView to the project.
+
+ * WebKit.xcodeproj/project.pbxproj:
+
+2008-11-10 Anders Carlsson <andersca@apple.com>
+
+ Reviewed by Kevin Decker.
+
+ Add a new WebBaseNetscapePluginView class.
+
+ * WebKit.xcodeproj/project.pbxproj:
+
+2008-11-10 Anders Carlsson <andersca@apple.com>
+
+ Reviewed by Adam Roben.
+
+ Rename WebBaseNetscapePluginView to WebNetscapePluginView.
+
+ * StringsNotToBeLocalized.txt:
+ * WebKit.xcodeproj/project.pbxproj:
+
+2008-11-05 Anders Carlsson <andersca@apple.com>
+
+ Reviewed by Kevin Decker.
+
+ Remove WebPlugInStreamLoaderDelegate.h
+
+ * WebKit.xcodeproj/project.pbxproj:
+
+2008-11-03 Darin Adler <darin@apple.com>
+
+ Reviewed by Tim Hatcher.
+
+ - https://bugs.webkit.org/show_bug.cgi?id=22061
+ create script to check for exit-time destructors
+
+ * WebKit.xcodeproj/project.pbxproj: Added a script
+ phase that runs the check-for-exit-time-destructors script.
+
2008-10-31 Anders Carlsson <andersca@apple.com>
Reviewed by Kevin Decker.
diff --git a/WebKit/English.lproj/Localizable.strings b/WebKit/English.lproj/Localizable.strings
index f243968..c1584f9 100644
--- a/WebKit/English.lproj/Localizable.strings
+++ b/WebKit/English.lproj/Localizable.strings
Binary files differ
diff --git a/WebKit/StringsNotToBeLocalized.txt b/WebKit/StringsNotToBeLocalized.txt
index 183c16b..2cc5d69 100644
--- a/WebKit/StringsNotToBeLocalized.txt
+++ b/WebKit/StringsNotToBeLocalized.txt
@@ -103,6 +103,9 @@
"BEGIN:VCARD"
"BP_CreatePluginMIMETypesPreferences"
"CFDictionaryPropertyBag"
+"CFNetwork"
+"CFNetwork_debug"
+"CFURLCacheCopySharedURLCache"
"CSS"
"Content-Encoding"
"Content-Length"
@@ -118,6 +121,10 @@
"DeleteWordBackward"
"DeleteWordForward"
"FD3B2381-0BB6-4B59-AF09-0E599C8901CF"
+"FastMallocFreeSizeInCaches"
+"FastMallocFreeSizeInHeap"
+"FastMallocHeapSize"
+"FastMallocReturnedSize"
"FrameName"
"GEN_DOMObject"
"GroupName"
@@ -143,6 +150,8 @@
"InsertTab"
"Intel"
"JavaScript"
+"JavaScriptFreeSize"
+"JavaScriptHeapSize"
"Joy!peff"
"KWQScrollBar"
"LTR"
@@ -150,7 +159,9 @@
"Library/Internet Plug-Ins"
"LresultFromObject"
"Lucida Grande"
+"MIMEType"
"MIME\\Database\\Content Type"
+"MainPageJavaScript.js"
"MemoryStream"
"MoveDown"
"MoveDownAndModifySelection"
@@ -302,6 +313,7 @@
"WebKitOriginalTopMargin"
"WebKitPDFs-XXXXXX"
"WebKitPlugInStreamXXXXXX"
+"WebKitPluginHost.app"
"WebKitPreferences.plist"
"WebKitStatistics"
"WebLoginWindowDidSwitchFromUserNotification"
@@ -402,8 +414,11 @@
"application/x-java-applet"
"application/x-webarchive"
"application/xhtml+xml"
+"attributeKeys"
+"attributeValues"
"b"
"basefont"
+"bundlePath"
"c"
"canGoBack"
"canGoForward"
@@ -420,6 +435,7 @@
"com.adobe.dreamweaver-9.0"
"com.apple.Aperture"
"com.apple.AppKit"
+"com.apple.Dictionary"
"com.apple.HIWebView"
"com.apple.JavaAppletPlugin"
"com.apple.JavaPluginCocoa"
@@ -428,6 +444,7 @@
"com.apple.Safari"
"com.apple.WebCore"
"com.apple.WebKit"
+"com.apple.WebKit.PluginAgent"
"com.apple.hiview"
"com.apple.iWeb"
"com.apple.mail"
@@ -436,6 +453,8 @@
"com.lizardtech.NPDjVu"
"com.macromedia.fireworks"
"com.microsoft.WMP.defaultplugin"
+"copyData"
+"cpuType"
"dir"
"displayTitle"
"doctype"
@@ -443,11 +462,13 @@
"estimatedProgress"
"eval"
"file:"
+"frameName"
"ftp:"
"htm"
"html"
"http://"
"http://www.google.com/search?q="
+"https"
"i"
"icon.db"
"image.pict"
@@ -464,21 +485,24 @@
"isindex"
"javascript:"
"js"
+"lastVisitWasFailure"
"lastVisitedDate"
"line-through"
"lineNumber"
"localhost"
"localized string not found"
"localizedStrings"
-"lproj"
"mailto:"
"mainFrameDocument"
"mainFrameIcon"
"mainFrameTitle"
"mainFrameURL"
+"mainResource"
+"mimeType"
"name: %@\npath: %@\nmimeTypes:\n%@\npluginDescription:%@"
"nullplugin"
"oleacc.dll"
+"pluginHostPath"
"pluginspage"
"r"
"r+b"
@@ -488,6 +512,8 @@
"sourceURL"
"src"
"sub"
+"subframeArchives"
+"subresources"
"text/calendar"
"text/directory"
"text/html"
@@ -504,9 +530,11 @@
"text/x-vcalendar"
"text/x-vcard"
"text/x-vcf"
+"textEncodingName"
"tiff"
"txt"
"u"
+"userAgent"
"utf-16"
"vImagePermuteChannels_ARGB8888"
"visitCount"
@@ -527,17 +555,24 @@ WebKit/mac/Misc/WebCache.mm:"Images"
WebKit/mac/Misc/WebKitLogging.h:"<not running on main thread>"
WebKit/mac/Misc/WebKitVersionChecks.m:"WebKit"
WebKit/mac/Misc/WebNSNotificationCenterExtras.m
+WebKit/mac/Misc/WebNSObjectExtras.mm:"object"
+WebKit/mac/Misc/WebNSObjectExtras.mm:"selector"
+WebKit/mac/Misc/WebNSObjectExtras.mm:"result"
WebKit/mac/Misc/WebNSPasteboardExtras.mm
WebKit/mac/Misc/WebNSURLExtras.mm:"file"
+WebKit/mac/Plugins/Hosted/HostedNetscapePluginStream.mm:" OK\n"
+WebKit/mac/Plugins/Hosted/HostedNetscapePluginStream.mm:": "
+WebKit/mac/Plugins/Hosted/HostedNetscapePluginStream.mm:"HTTP "
+WebKit/mac/Plugins/Hosted/HostedNetscapePluginStream.mm:"identity"
WebKit/mac/Plugins/WebBaseNetscapePluginStream.mm:" OK\n"
WebKit/mac/Plugins/WebBaseNetscapePluginStream.mm:": "
WebKit/mac/Plugins/WebBaseNetscapePluginStream.mm:"HTTP "
WebKit/mac/Plugins/WebBaseNetscapePluginStream.mm:"identity"
-WebKit/mac/Plugins/WebBaseNetscapePluginView.mm:"height"
-WebKit/mac/Plugins/WebBaseNetscapePluginView.mm:"width"
-WebKit/mac/Plugins/WebBasePluginPackage.m:"Java Applet Plugin Enabler"
+WebKit/mac/Plugins/WebBasePluginPackage.mm:"Java Applet Plugin Enabler"
WebKit/mac/Plugins/WebNetscapePluginPackage.m:"RealPlayer Plugin"
WebKit/mac/Plugins/WebNetscapePluginPackage.m:"main"
+WebKit/mac/Plugins/WebNetscapePluginView.mm:"height"
+WebKit/mac/Plugins/WebNetscapePluginView.mm:"width"
WebKit/mac/Plugins/nptextinput.h
WebKit/mac/WebCoreSupport/WebChromeClient.mm:"dialog"
WebKit/mac/WebCoreSupport/WebChromeClient.mm:"fullscreen"
@@ -557,6 +592,7 @@ WebKit/mac/WebCoreSupport/WebFrameLoaderClient.mm:"height"
WebKit/mac/WebCoreSupport/WebFrameLoaderClient.mm:"width"
WebKit/mac/WebCoreSupport/WebInspectorClient.mm:"Web Inspector 2"
WebKit/mac/WebCoreSupport/WebInspectorClient.mm:"inspector"
+WebKit/mac/WebView/WebArchive.mm:"result"
WebKit/mac/WebView/WebHTMLView.mm:"'%@'"
WebKit/mac/WebView/WebHTMLView.mm:"Version:"
WebKit/mac/WebView/WebHTMLView.mm:"applet"
@@ -583,6 +619,10 @@ WebKit/mac/WebView/WebHTMLView.mm:"underline"
WebKit/mac/WebView/WebHTMLView.mm:"white"
WebKit/mac/WebView/WebPreferenceKeysPrivate.h
WebKit/mac/WebView/WebPreferences.mm
+WebKit/mac/WebView/WebResource.mm:"URL"
+WebKit/mac/WebView/WebResource.mm:"data"
+WebKit/mac/WebView/WebResource.mm:"response"
+WebKit/mac/WebView/WebResource.mm:"result"
WebKit/mac/WebView/WebView.mm:"At least one WebView is still open."
WebKit/mac/WebView/WebView.mm:"At least one WebView was closed with fast teardown."
WebKit/mac/WebView/WebView.mm:"Preferences"
diff --git a/WebKit/WebKit.xcodeproj/project.pbxproj b/WebKit/WebKit.xcodeproj/project.pbxproj
index 5acf785..698deb2 100644
--- a/WebKit/WebKit.xcodeproj/project.pbxproj
+++ b/WebKit/WebKit.xcodeproj/project.pbxproj
@@ -13,10 +13,38 @@
06693DDD0BFBA85200216072 /* WebInspectorClient.mm in Sources */ = {isa = PBXBuildFile; fileRef = 06693DDB0BFBA85200216072 /* WebInspectorClient.mm */; };
14D8252F0AF955090004F057 /* WebChromeClient.h in Headers */ = {isa = PBXBuildFile; fileRef = 14D8252D0AF955090004F057 /* WebChromeClient.h */; };
14D825300AF955090004F057 /* WebChromeClient.mm in Sources */ = {isa = PBXBuildFile; fileRef = 14D8252E0AF955090004F057 /* WebChromeClient.mm */; };
+ 1A20D08B0ED384F20043FA9F /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1A20D08A0ED384F20043FA9F /* QuartzCore.framework */; };
1A2D754D0DE480B900F0A648 /* WebIconFetcher.h in Headers */ = {isa = PBXBuildFile; fileRef = 1A2D754B0DE480B900F0A648 /* WebIconFetcher.h */; settings = {ATTRIBUTES = (Private, ); }; };
1A2D754E0DE480B900F0A648 /* WebIconFetcher.mm in Sources */ = {isa = PBXBuildFile; fileRef = 1A2D754C0DE480B900F0A648 /* WebIconFetcher.mm */; };
1A2D75500DE4810E00F0A648 /* WebIconFetcherInternal.h in Headers */ = {isa = PBXBuildFile; fileRef = 1A2D754F0DE4810E00F0A648 /* WebIconFetcherInternal.h */; };
+ 1A2DBE9F0F251E3A0036F8A6 /* ProxyInstance.h in Headers */ = {isa = PBXBuildFile; fileRef = 1A2DBE9D0F251E3A0036F8A6 /* ProxyInstance.h */; };
+ 1A2DBEA00F251E3A0036F8A6 /* ProxyInstance.mm in Sources */ = {isa = PBXBuildFile; fileRef = 1A2DBE9E0F251E3A0036F8A6 /* ProxyInstance.mm */; };
+ 1A4DF5220EC8C74D006BD4B4 /* WebNetscapePluginView.h in Headers */ = {isa = PBXBuildFile; fileRef = 1A4DF5200EC8C74D006BD4B4 /* WebNetscapePluginView.h */; };
+ 1A4DF5230EC8C74D006BD4B4 /* WebNetscapePluginView.mm in Sources */ = {isa = PBXBuildFile; fileRef = 1A4DF5210EC8C74D006BD4B4 /* WebNetscapePluginView.mm */; settings = {COMPILER_FLAGS = "-Wno-deprecated-declarations"; }; };
+ 1A4DF5E40EC8D104006BD4B4 /* WebBaseNetscapePluginView.h in Headers */ = {isa = PBXBuildFile; fileRef = 1A4DF5E20EC8D104006BD4B4 /* WebBaseNetscapePluginView.h */; };
+ 1A4DF5E50EC8D104006BD4B4 /* WebBaseNetscapePluginView.mm in Sources */ = {isa = PBXBuildFile; fileRef = 1A4DF5E30EC8D104006BD4B4 /* WebBaseNetscapePluginView.mm */; };
+ 1A77B02E0EE7730500C8A1F9 /* WebPluginRequest.h in Headers */ = {isa = PBXBuildFile; fileRef = 1A77B02C0EE7730500C8A1F9 /* WebPluginRequest.h */; };
+ 1A77B02F0EE7730500C8A1F9 /* WebPluginRequest.m in Sources */ = {isa = PBXBuildFile; fileRef = 1A77B02D0EE7730500C8A1F9 /* WebPluginRequest.m */; };
1A7F9C4C0DD3DDEA0028F8A5 /* nptextinput.h in Headers */ = {isa = PBXBuildFile; fileRef = 1A7F9C4B0DD3DDEA0028F8A5 /* nptextinput.h */; settings = {ATTRIBUTES = (Public, ); }; };
+ 1A8DED500EE88B8A00F25022 /* HostedNetscapePluginStream.h in Headers */ = {isa = PBXBuildFile; fileRef = 1A8DED4E0EE88B8A00F25022 /* HostedNetscapePluginStream.h */; };
+ 1A8DED510EE88B8A00F25022 /* HostedNetscapePluginStream.mm in Sources */ = {isa = PBXBuildFile; fileRef = 1A8DED4F0EE88B8A00F25022 /* HostedNetscapePluginStream.mm */; };
+ 1AAF58940EDCCF15008D883D /* WebKitPluginAgent.defs in Headers */ = {isa = PBXBuildFile; fileRef = 1AAF588A0EDCCEA3008D883D /* WebKitPluginAgent.defs */; settings = {ATTRIBUTES = (Private, ); }; };
+ 1AAF58950EDCCF15008D883D /* WebKitPluginAgentReply.defs in Headers */ = {isa = PBXBuildFile; fileRef = 1AAF588B0EDCCEA3008D883D /* WebKitPluginAgentReply.defs */; settings = {ATTRIBUTES = (Private, ); }; };
+ 1AAF58960EDCCF15008D883D /* WebKitPluginClient.defs in Headers */ = {isa = PBXBuildFile; fileRef = 1AAF588C0EDCCEA3008D883D /* WebKitPluginClient.defs */; settings = {ATTRIBUTES = (Private, ); }; };
+ 1AAF58970EDCCF15008D883D /* WebKitPluginHost.defs in Headers */ = {isa = PBXBuildFile; fileRef = 1AAF588D0EDCCEA3008D883D /* WebKitPluginHost.defs */; settings = {ATTRIBUTES = (Private, ); }; };
+ 1AAF58980EDCCF15008D883D /* WebKitPluginHostTypes.defs in Headers */ = {isa = PBXBuildFile; fileRef = 1AAF588E0EDCCEA3008D883D /* WebKitPluginHostTypes.defs */; settings = {ATTRIBUTES = (Private, ); }; };
+ 1AAF5CEA0EDDE1FE008D883D /* NetscapePluginHostManager.h in Headers */ = {isa = PBXBuildFile; fileRef = 1AAF5CE40EDDE1FE008D883D /* NetscapePluginHostManager.h */; };
+ 1AAF5CEB0EDDE1FE008D883D /* NetscapePluginHostManager.mm in Sources */ = {isa = PBXBuildFile; fileRef = 1AAF5CE50EDDE1FE008D883D /* NetscapePluginHostManager.mm */; };
+ 1AAF5CEC0EDDE1FE008D883D /* NetscapePluginHostProxy.h in Headers */ = {isa = PBXBuildFile; fileRef = 1AAF5CE60EDDE1FE008D883D /* NetscapePluginHostProxy.h */; };
+ 1AAF5CED0EDDE1FE008D883D /* NetscapePluginHostProxy.mm in Sources */ = {isa = PBXBuildFile; fileRef = 1AAF5CE70EDDE1FE008D883D /* NetscapePluginHostProxy.mm */; };
+ 1AAF5CEE0EDDE1FE008D883D /* NetscapePluginInstanceProxy.h in Headers */ = {isa = PBXBuildFile; fileRef = 1AAF5CE80EDDE1FE008D883D /* NetscapePluginInstanceProxy.h */; };
+ 1AAF5CEF0EDDE1FE008D883D /* NetscapePluginInstanceProxy.mm in Sources */ = {isa = PBXBuildFile; fileRef = 1AAF5CE90EDDE1FE008D883D /* NetscapePluginInstanceProxy.mm */; };
+ 1AAF5CF10EDDE586008D883D /* WebKitPluginHost.defs in Sources */ = {isa = PBXBuildFile; fileRef = 1AAF588D0EDCCEA3008D883D /* WebKitPluginHost.defs */; };
+ 1AAF5D000EDDE604008D883D /* WebKitPluginClient.defs in Sources */ = {isa = PBXBuildFile; fileRef = 1AAF588C0EDCCEA3008D883D /* WebKitPluginClient.defs */; settings = {ATTRIBUTES = (Server, ); }; };
+ 1AAF5D090EDDE71D008D883D /* WebKitPluginHostTypes.h in Headers */ = {isa = PBXBuildFile; fileRef = 1AAF5D080EDDE71D008D883D /* WebKitPluginHostTypes.h */; settings = {ATTRIBUTES = (Private, ); }; };
+ 1AAF5D0F0EDDE7A7008D883D /* WebKitPluginAgent.defs in Sources */ = {isa = PBXBuildFile; fileRef = 1AAF588A0EDCCEA3008D883D /* WebKitPluginAgent.defs */; };
+ 1AAF5FBF0EDE3A92008D883D /* WebHostedNetscapePluginView.h in Headers */ = {isa = PBXBuildFile; fileRef = 1AAF5FBD0EDE3A92008D883D /* WebHostedNetscapePluginView.h */; };
+ 1AAF5FC00EDE3A92008D883D /* WebHostedNetscapePluginView.mm in Sources */ = {isa = PBXBuildFile; fileRef = 1AAF5FBE0EDE3A92008D883D /* WebHostedNetscapePluginView.mm */; };
1AEA66D40DC6B1FF003D12BF /* WebNetscapePluginEventHandler.h in Headers */ = {isa = PBXBuildFile; fileRef = 1AEA66D20DC6B1FF003D12BF /* WebNetscapePluginEventHandler.h */; };
1AEA66D50DC6B1FF003D12BF /* WebNetscapePluginEventHandler.mm in Sources */ = {isa = PBXBuildFile; fileRef = 1AEA66D30DC6B1FF003D12BF /* WebNetscapePluginEventHandler.mm */; };
1AEA66D80DC6B209003D12BF /* WebNetscapePluginEventHandlerCarbon.h in Headers */ = {isa = PBXBuildFile; fileRef = 1AEA66D60DC6B209003D12BF /* WebNetscapePluginEventHandlerCarbon.h */; };
@@ -40,7 +68,7 @@
226E9E6A09D0AA8200F3A2BC /* WebNetscapeDeprecatedFunctions.h in Headers */ = {isa = PBXBuildFile; fileRef = 226E9E6809D0AA8200F3A2BC /* WebNetscapeDeprecatedFunctions.h */; };
226E9E6B09D0AA8200F3A2BC /* WebNetscapeDeprecatedFunctions.c in Sources */ = {isa = PBXBuildFile; fileRef = 226E9E6909D0AA8200F3A2BC /* WebNetscapeDeprecatedFunctions.c */; settings = {COMPILER_FLAGS = "-Wno-deprecated-declarations"; }; };
22F219CC08D236730030E078 /* WebBackForwardListPrivate.h in Headers */ = {isa = PBXBuildFile; fileRef = 22F219CB08D236730030E078 /* WebBackForwardListPrivate.h */; settings = {ATTRIBUTES = (Private, ); }; };
- 441793A60E34EE150055E1AE /* WebHTMLRepresentationInternal.h in Headers */ = {isa = PBXBuildFile; fileRef = 441793A50E34EE150055E1AE /* WebHTMLRepresentationInternal.h */; settings = {ATTRIBUTES = (Private, ); }; };
+ 441793A60E34EE150055E1AE /* WebHTMLRepresentationInternal.h in Headers */ = {isa = PBXBuildFile; fileRef = 441793A50E34EE150055E1AE /* WebHTMLRepresentationInternal.h */; };
4BF99F900AE050BC00815C2B /* WebEditorClient.h in Headers */ = {isa = PBXBuildFile; fileRef = 4BF99F8E0AE050BC00815C2B /* WebEditorClient.h */; settings = {ATTRIBUTES = (); }; };
4BF99F910AE050BC00815C2B /* WebEditorClient.mm in Sources */ = {isa = PBXBuildFile; fileRef = 4BF99F8F0AE050BC00815C2B /* WebEditorClient.mm */; };
51079D170CED11B00077247D /* WebSecurityOrigin.mm in Sources */ = {isa = PBXBuildFile; fileRef = 51079D140CED11B00077247D /* WebSecurityOrigin.mm */; };
@@ -57,12 +85,11 @@
51AEDEF10CECF45700854328 /* WebDatabaseManagerInternal.h in Headers */ = {isa = PBXBuildFile; fileRef = 51AEDEF00CECF45700854328 /* WebDatabaseManagerInternal.h */; };
51B2A1000ADB15D0002A9BEE /* WebIconDatabaseDelegate.h in Headers */ = {isa = PBXBuildFile; fileRef = 51B2A0FF0ADB15D0002A9BEE /* WebIconDatabaseDelegate.h */; };
51C714FB0B20F79F00E5E33C /* WebBackForwardListInternal.h in Headers */ = {isa = PBXBuildFile; fileRef = 51C714FA0B20F79F00E5E33C /* WebBackForwardListInternal.h */; };
- 51CBFCAD0D10E6C5002DBF51 /* WebCachedPagePlatformData.h in Headers */ = {isa = PBXBuildFile; fileRef = 51CBFCAC0D10E6C5002DBF51 /* WebCachedPagePlatformData.h */; };
+ 51CBFCAD0D10E6C5002DBF51 /* WebCachedFramePlatformData.h in Headers */ = {isa = PBXBuildFile; fileRef = 51CBFCAC0D10E6C5002DBF51 /* WebCachedFramePlatformData.h */; };
51FDC4D30B0AF5C100F84EB3 /* WebHistoryItemPrivate.h in Headers */ = {isa = PBXBuildFile; fileRef = 51FDC4D20B0AF5C100F84EB3 /* WebHistoryItemPrivate.h */; settings = {ATTRIBUTES = (Private, ); }; };
5241ADF50B1BC48A004012BD /* WebCache.h in Headers */ = {isa = PBXBuildFile; fileRef = 5241ADF30B1BC48A004012BD /* WebCache.h */; settings = {ATTRIBUTES = (Private, ); }; };
5241ADF60B1BC48A004012BD /* WebCache.mm in Sources */ = {isa = PBXBuildFile; fileRef = 5241ADF40B1BC48A004012BD /* WebCache.mm */; };
5D1638F30E35B45D00F3038E /* EmptyProtocolDefinitions.h in Headers */ = {isa = PBXBuildFile; fileRef = 5D1638F20E35B45D00F3038E /* EmptyProtocolDefinitions.h */; };
- 5D4ADD690D1620350064BBB0 /* WebPlugInStreamLoaderDelegate.h in Headers */ = {isa = PBXBuildFile; fileRef = 5D4ADD680D1620350064BBB0 /* WebPlugInStreamLoaderDelegate.h */; };
5D7BF8140C2A1D90008CE06D /* WebInspector.h in Headers */ = {isa = PBXBuildFile; fileRef = 5D7BF8120C2A1D90008CE06D /* WebInspector.h */; settings = {ATTRIBUTES = (Private, ); }; };
5D7BF8150C2A1D90008CE06D /* WebInspector.mm in Sources */ = {isa = PBXBuildFile; fileRef = 5D7BF8130C2A1D90008CE06D /* WebInspector.mm */; };
5DE83A7A0D0F7F9400CAD12A /* WebJavaScriptTextInputPanel.nib in Resources */ = {isa = PBXBuildFile; fileRef = 5DE83A740D0F7F9400CAD12A /* WebJavaScriptTextInputPanel.nib */; };
@@ -90,6 +117,8 @@
931633EB0AEDFF930062B92D /* WebFrameLoaderClient.h in Headers */ = {isa = PBXBuildFile; fileRef = 931633EA0AEDFF930062B92D /* WebFrameLoaderClient.h */; };
931633EF0AEDFFAE0062B92D /* WebFrameLoaderClient.mm in Sources */ = {isa = PBXBuildFile; fileRef = 931633EE0AEDFFAE0062B92D /* WebFrameLoaderClient.mm */; };
934C11670D8710BB00C32ABD /* WebDynamicScrollBarsViewInternal.h in Headers */ = {isa = PBXBuildFile; fileRef = 934C11660D8710BB00C32ABD /* WebDynamicScrollBarsViewInternal.h */; };
+ 934C4A910F01406C009372C0 /* WebNSObjectExtras.mm in Sources */ = {isa = PBXBuildFile; fileRef = 934C4A900F01406C009372C0 /* WebNSObjectExtras.mm */; };
+ 934C4AA00F0141F7009372C0 /* WebResourceInternal.h in Headers */ = {isa = PBXBuildFile; fileRef = 934C4A9F0F0141F7009372C0 /* WebResourceInternal.h */; };
939810110824BF01008DF038 /* WebBackForwardList.h in Headers */ = {isa = PBXBuildFile; fileRef = 3944607D020F50ED0ECA1767 /* WebBackForwardList.h */; settings = {ATTRIBUTES = (Public, ); }; };
939810120824BF01008DF038 /* WebHistory.h in Headers */ = {isa = PBXBuildFile; fileRef = F520FB190221DEFD01C1A525 /* WebHistory.h */; settings = {ATTRIBUTES = (Public, ); }; };
939810130824BF01008DF038 /* WebHistoryItem.h in Headers */ = {isa = PBXBuildFile; fileRef = 3944607F020F50ED0ECA1767 /* WebHistoryItem.h */; settings = {ATTRIBUTES = (Public, ); }; };
@@ -113,7 +142,6 @@
939810290824BF01008DF038 /* WebAuthenticationPanel.h in Headers */ = {isa = PBXBuildFile; fileRef = F8CA15B5029A39D901000122 /* WebAuthenticationPanel.h */; };
9398102A0824BF01008DF038 /* WebPanelAuthenticationHandler.h in Headers */ = {isa = PBXBuildFile; fileRef = 93154EF103A41270008635CE /* WebPanelAuthenticationHandler.h */; settings = {ATTRIBUTES = (Private, ); }; };
9398102B0824BF01008DF038 /* WebBaseNetscapePluginStream.h in Headers */ = {isa = PBXBuildFile; fileRef = F5A672B90263866E01000102 /* WebBaseNetscapePluginStream.h */; };
- 9398102C0824BF01008DF038 /* WebBaseNetscapePluginView.h in Headers */ = {isa = PBXBuildFile; fileRef = F5EBC45502134BC301CA1520 /* WebBaseNetscapePluginView.h */; };
9398102E0824BF01008DF038 /* WebBasePluginPackage.h in Headers */ = {isa = PBXBuildFile; fileRef = 83E4AF46036652150000E506 /* WebBasePluginPackage.h */; };
939810310824BF01008DF038 /* WebNetscapePluginPackage.h in Headers */ = {isa = PBXBuildFile; fileRef = F5F7171E0288493C018635CA /* WebNetscapePluginPackage.h */; };
939810340824BF01008DF038 /* WebNullPluginView.h in Headers */ = {isa = PBXBuildFile; fileRef = F5883BE0025E5E9D01000102 /* WebNullPluginView.h */; };
@@ -145,7 +173,7 @@
9398105E0824BF01008DF038 /* WebPreferencesPrivate.h in Headers */ = {isa = PBXBuildFile; fileRef = 9CAE9D070252A4130ECA16EA /* WebPreferencesPrivate.h */; settings = {ATTRIBUTES = (Private, ); }; };
9398105F0824BF01008DF038 /* WebRenderNode.h in Headers */ = {isa = PBXBuildFile; fileRef = F5F81C3902B67C26018635CA /* WebRenderNode.h */; settings = {ATTRIBUTES = (Private, ); }; };
939810600824BF01008DF038 /* WebResourceLoadDelegate.h in Headers */ = {isa = PBXBuildFile; fileRef = 513D422E034CF55A00CA2ACD /* WebResourceLoadDelegate.h */; settings = {ATTRIBUTES = (Public, ); }; };
- 939810630824BF01008DF038 /* WebHistoryItemInternal.h in Headers */ = {isa = PBXBuildFile; fileRef = 516F296F03A6C45A00CA2D3A /* WebHistoryItemInternal.h */; settings = {ATTRIBUTES = (); }; };
+ 939810630824BF01008DF038 /* WebHistoryItemInternal.h in Headers */ = {isa = PBXBuildFile; fileRef = 516F296F03A6C45A00CA2D3A /* WebHistoryItemInternal.h */; };
939810640824BF01008DF038 /* WebFormDelegatePrivate.h in Headers */ = {isa = PBXBuildFile; fileRef = 2D36FD5E03F78F9E00A80166 /* WebFormDelegatePrivate.h */; };
939810650824BF01008DF038 /* CarbonWindowAdapter.h in Headers */ = {isa = PBXBuildFile; fileRef = F7EBEE9003F9DBA103CA0DE6 /* CarbonWindowAdapter.h */; };
939810660824BF01008DF038 /* CarbonWindowContentView.h in Headers */ = {isa = PBXBuildFile; fileRef = F7EBEE9203F9DBA103CA0DE6 /* CarbonWindowContentView.h */; };
@@ -213,8 +241,7 @@
939810CF0824BF01008DF038 /* WebAuthenticationPanel.m in Sources */ = {isa = PBXBuildFile; fileRef = F8CA15B6029A39D901000122 /* WebAuthenticationPanel.m */; };
939810D00824BF01008DF038 /* WebPanelAuthenticationHandler.m in Sources */ = {isa = PBXBuildFile; fileRef = 93154EF203A41270008635CE /* WebPanelAuthenticationHandler.m */; };
939810D10824BF01008DF038 /* WebBaseNetscapePluginStream.mm in Sources */ = {isa = PBXBuildFile; fileRef = F5A672BA0263866E01000102 /* WebBaseNetscapePluginStream.mm */; };
- 939810D20824BF01008DF038 /* WebBaseNetscapePluginView.mm in Sources */ = {isa = PBXBuildFile; fileRef = F5EBC45602134BC301CA1520 /* WebBaseNetscapePluginView.mm */; settings = {COMPILER_FLAGS = "-Wno-deprecated-declarations"; }; };
- 939810D30824BF01008DF038 /* WebBasePluginPackage.m in Sources */ = {isa = PBXBuildFile; fileRef = 83E4AF47036652150000E506 /* WebBasePluginPackage.m */; };
+ 939810D30824BF01008DF038 /* WebBasePluginPackage.mm in Sources */ = {isa = PBXBuildFile; fileRef = 83E4AF47036652150000E506 /* WebBasePluginPackage.mm */; };
939810D60824BF01008DF038 /* WebNetscapePluginPackage.m in Sources */ = {isa = PBXBuildFile; fileRef = F5F7171F0288493C018635CA /* WebNetscapePluginPackage.m */; };
939810D90824BF01008DF038 /* WebNullPluginView.mm in Sources */ = {isa = PBXBuildFile; fileRef = F5883BE1025E5E9D01000102 /* WebNullPluginView.mm */; };
939810DA0824BF01008DF038 /* WebPluginController.mm in Sources */ = {isa = PBXBuildFile; fileRef = 8467275D0367158500CA2ACA /* WebPluginController.mm */; };
@@ -235,7 +262,7 @@
939810F80824BF01008DF038 /* WebPreferences.mm in Sources */ = {isa = PBXBuildFile; fileRef = F5AEBB3D024A527601C1A526 /* WebPreferences.mm */; };
939810F90824BF01008DF038 /* WebRenderNode.mm in Sources */ = {isa = PBXBuildFile; fileRef = F5F81C3A02B67C26018635CA /* WebRenderNode.mm */; };
939810FC0824BF01008DF038 /* WebFormDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = 2D81DAB303EB0B2D00A80166 /* WebFormDelegate.m */; };
- 939810FD0824BF01008DF038 /* CarbonWindowAdapter.m in Sources */ = {isa = PBXBuildFile; fileRef = F7EBEE9103F9DBA103CA0DE6 /* CarbonWindowAdapter.m */; };
+ 939810FD0824BF01008DF038 /* CarbonWindowAdapter.mm in Sources */ = {isa = PBXBuildFile; fileRef = F7EBEE9103F9DBA103CA0DE6 /* CarbonWindowAdapter.mm */; };
939810FE0824BF01008DF038 /* CarbonWindowContentView.m in Sources */ = {isa = PBXBuildFile; fileRef = F7EBEE9303F9DBA103CA0DE6 /* CarbonWindowContentView.m */; };
939810FF0824BF01008DF038 /* CarbonWindowFrame.m in Sources */ = {isa = PBXBuildFile; fileRef = F7EBEE9503F9DBA103CA0DE6 /* CarbonWindowFrame.m */; };
939811000824BF01008DF038 /* HIViewAdapter.m in Sources */ = {isa = PBXBuildFile; fileRef = F7EBEE9B03F9DBA103CA0DE6 /* HIViewAdapter.m */; settings = {COMPILER_FLAGS = "-Wno-deprecated-declarations"; }; };
@@ -280,7 +307,7 @@
BCDFA9130C10B93E00D3A10C /* WebKitPluginContainerView.mm in Sources */ = {isa = PBXBuildFile; fileRef = BCDFA9120C10B93E00D3A10C /* WebKitPluginContainerView.mm */; };
C0167BF80D7F5DD00028696E /* WebScriptDebugger.h in Headers */ = {isa = PBXBuildFile; fileRef = C0167BF60D7F5DD00028696E /* WebScriptDebugger.h */; };
C0167BF90D7F5DD00028696E /* WebScriptDebugger.mm in Sources */ = {isa = PBXBuildFile; fileRef = C0167BF70D7F5DD00028696E /* WebScriptDebugger.mm */; };
- DD7CDEE70A23BA9E00069928 /* WebTypesInternal.h in Headers */ = {isa = PBXBuildFile; fileRef = DD7CDEE60A23BA9E00069928 /* WebTypesInternal.h */; settings = {ATTRIBUTES = (Private, ); }; };
+ DD7CDEE70A23BA9E00069928 /* WebTypesInternal.h in Headers */ = {isa = PBXBuildFile; fileRef = DD7CDEE60A23BA9E00069928 /* WebTypesInternal.h */; };
DD89682009AA87240097E7F0 /* WebElementDictionary.h in Headers */ = {isa = PBXBuildFile; fileRef = DD89681E09AA87240097E7F0 /* WebElementDictionary.h */; };
DD89682109AA87240097E7F0 /* WebElementDictionary.mm in Sources */ = {isa = PBXBuildFile; fileRef = DD89681F09AA87240097E7F0 /* WebElementDictionary.mm */; };
ED6BE2E7088C32B50044DEDC /* WebNSAttributedStringExtras.h in Headers */ = {isa = PBXBuildFile; fileRef = ED6BE2E5088C32B50044DEDC /* WebNSAttributedStringExtras.h */; };
@@ -299,10 +326,35 @@
06693DDB0BFBA85200216072 /* WebInspectorClient.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = WebInspectorClient.mm; sourceTree = "<group>"; };
14D8252D0AF955090004F057 /* WebChromeClient.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = WebChromeClient.h; sourceTree = "<group>"; };
14D8252E0AF955090004F057 /* WebChromeClient.mm */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.objcpp; path = WebChromeClient.mm; sourceTree = "<group>"; };
+ 1A20D08A0ED384F20043FA9F /* QuartzCore.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = QuartzCore.framework; path = /System/Library/Frameworks/QuartzCore.framework; sourceTree = "<absolute>"; };
1A2D754B0DE480B900F0A648 /* WebIconFetcher.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = WebIconFetcher.h; sourceTree = "<group>"; };
1A2D754C0DE480B900F0A648 /* WebIconFetcher.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = WebIconFetcher.mm; sourceTree = "<group>"; };
1A2D754F0DE4810E00F0A648 /* WebIconFetcherInternal.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = WebIconFetcherInternal.h; sourceTree = "<group>"; };
+ 1A2DBE9D0F251E3A0036F8A6 /* ProxyInstance.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ProxyInstance.h; sourceTree = "<group>"; };
+ 1A2DBE9E0F251E3A0036F8A6 /* ProxyInstance.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = ProxyInstance.mm; sourceTree = "<group>"; };
+ 1A4DF5200EC8C74D006BD4B4 /* WebNetscapePluginView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = WebNetscapePluginView.h; sourceTree = "<group>"; };
+ 1A4DF5210EC8C74D006BD4B4 /* WebNetscapePluginView.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = WebNetscapePluginView.mm; sourceTree = "<group>"; };
+ 1A4DF5E20EC8D104006BD4B4 /* WebBaseNetscapePluginView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = WebBaseNetscapePluginView.h; sourceTree = "<group>"; };
+ 1A4DF5E30EC8D104006BD4B4 /* WebBaseNetscapePluginView.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = WebBaseNetscapePluginView.mm; sourceTree = "<group>"; };
+ 1A77B02C0EE7730500C8A1F9 /* WebPluginRequest.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = WebPluginRequest.h; sourceTree = "<group>"; };
+ 1A77B02D0EE7730500C8A1F9 /* WebPluginRequest.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = WebPluginRequest.m; sourceTree = "<group>"; };
1A7F9C4B0DD3DDEA0028F8A5 /* nptextinput.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = nptextinput.h; sourceTree = "<group>"; };
+ 1A8DED4E0EE88B8A00F25022 /* HostedNetscapePluginStream.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = HostedNetscapePluginStream.h; sourceTree = "<group>"; };
+ 1A8DED4F0EE88B8A00F25022 /* HostedNetscapePluginStream.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = HostedNetscapePluginStream.mm; sourceTree = "<group>"; };
+ 1AAF588A0EDCCEA3008D883D /* WebKitPluginAgent.defs */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.mig; path = WebKitPluginAgent.defs; sourceTree = "<group>"; };
+ 1AAF588B0EDCCEA3008D883D /* WebKitPluginAgentReply.defs */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.mig; path = WebKitPluginAgentReply.defs; sourceTree = "<group>"; };
+ 1AAF588C0EDCCEA3008D883D /* WebKitPluginClient.defs */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.mig; path = WebKitPluginClient.defs; sourceTree = "<group>"; };
+ 1AAF588D0EDCCEA3008D883D /* WebKitPluginHost.defs */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.mig; path = WebKitPluginHost.defs; sourceTree = "<group>"; };
+ 1AAF588E0EDCCEA3008D883D /* WebKitPluginHostTypes.defs */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.mig; path = WebKitPluginHostTypes.defs; sourceTree = "<group>"; };
+ 1AAF5CE40EDDE1FE008D883D /* NetscapePluginHostManager.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = NetscapePluginHostManager.h; sourceTree = "<group>"; };
+ 1AAF5CE50EDDE1FE008D883D /* NetscapePluginHostManager.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = NetscapePluginHostManager.mm; sourceTree = "<group>"; };
+ 1AAF5CE60EDDE1FE008D883D /* NetscapePluginHostProxy.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = NetscapePluginHostProxy.h; sourceTree = "<group>"; };
+ 1AAF5CE70EDDE1FE008D883D /* NetscapePluginHostProxy.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = NetscapePluginHostProxy.mm; sourceTree = "<group>"; };
+ 1AAF5CE80EDDE1FE008D883D /* NetscapePluginInstanceProxy.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = NetscapePluginInstanceProxy.h; sourceTree = "<group>"; };
+ 1AAF5CE90EDDE1FE008D883D /* NetscapePluginInstanceProxy.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = NetscapePluginInstanceProxy.mm; sourceTree = "<group>"; };
+ 1AAF5D080EDDE71D008D883D /* WebKitPluginHostTypes.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = WebKitPluginHostTypes.h; sourceTree = "<group>"; };
+ 1AAF5FBD0EDE3A92008D883D /* WebHostedNetscapePluginView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = WebHostedNetscapePluginView.h; sourceTree = "<group>"; };
+ 1AAF5FBE0EDE3A92008D883D /* WebHostedNetscapePluginView.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = WebHostedNetscapePluginView.mm; sourceTree = "<group>"; };
1AEA66D20DC6B1FF003D12BF /* WebNetscapePluginEventHandler.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = WebNetscapePluginEventHandler.h; sourceTree = "<group>"; };
1AEA66D30DC6B1FF003D12BF /* WebNetscapePluginEventHandler.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = WebNetscapePluginEventHandler.mm; sourceTree = "<group>"; };
1AEA66D60DC6B209003D12BF /* WebNetscapePluginEventHandlerCarbon.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = WebNetscapePluginEventHandlerCarbon.h; sourceTree = "<group>"; };
@@ -389,7 +441,7 @@
51AEDEF00CECF45700854328 /* WebDatabaseManagerInternal.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = WebDatabaseManagerInternal.h; sourceTree = "<group>"; };
51B2A0FF0ADB15D0002A9BEE /* WebIconDatabaseDelegate.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = WebIconDatabaseDelegate.h; sourceTree = "<group>"; };
51C714FA0B20F79F00E5E33C /* WebBackForwardListInternal.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = WebBackForwardListInternal.h; sourceTree = "<group>"; };
- 51CBFCAC0D10E6C5002DBF51 /* WebCachedPagePlatformData.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = WebCachedPagePlatformData.h; sourceTree = "<group>"; };
+ 51CBFCAC0D10E6C5002DBF51 /* WebCachedFramePlatformData.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = WebCachedFramePlatformData.h; sourceTree = "<group>"; };
51E94C3406C0321200A9B09E /* WebPDFView.h */ = {isa = PBXFileReference; fileEncoding = 30; indentWidth = 4; lastKnownFileType = sourcecode.c.h; path = WebPDFView.h; sourceTree = "<group>"; tabWidth = 8; usesTabs = 0; };
51E94C3506C0321200A9B09E /* WebPDFView.mm */ = {isa = PBXFileReference; fileEncoding = 30; indentWidth = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = WebPDFView.mm; sourceTree = "<group>"; tabWidth = 8; usesTabs = 0; };
51E94C6806C0347500A9B09E /* WebPDFRepresentation.h */ = {isa = PBXFileReference; fileEncoding = 30; indentWidth = 4; lastKnownFileType = sourcecode.c.h; path = WebPDFRepresentation.h; sourceTree = "<group>"; tabWidth = 8; usesTabs = 0; };
@@ -398,7 +450,6 @@
5241ADF30B1BC48A004012BD /* WebCache.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = WebCache.h; sourceTree = "<group>"; };
5241ADF40B1BC48A004012BD /* WebCache.mm */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.objcpp; path = WebCache.mm; sourceTree = "<group>"; };
5D1638F20E35B45D00F3038E /* EmptyProtocolDefinitions.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = EmptyProtocolDefinitions.h; sourceTree = "<group>"; };
- 5D4ADD680D1620350064BBB0 /* WebPlugInStreamLoaderDelegate.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = WebPlugInStreamLoaderDelegate.h; sourceTree = "<group>"; };
5D7BF8120C2A1D90008CE06D /* WebInspector.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = WebInspector.h; sourceTree = "<group>"; };
5D7BF8130C2A1D90008CE06D /* WebInspector.mm */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.objcpp; path = WebInspector.mm; sourceTree = "<group>"; };
5DE83A750D0F7F9400CAD12A /* English */ = {isa = PBXFileReference; lastKnownFileType = wrapper.nib; name = English; path = English.lproj/WebJavaScriptTextInputPanel.nib; sourceTree = SOURCE_ROOT; };
@@ -439,7 +490,7 @@
8398847A03426FB000BC5F5E /* WebNSImageExtras.h */ = {isa = PBXFileReference; fileEncoding = 4; indentWidth = 4; lastKnownFileType = sourcecode.c.h; path = WebNSImageExtras.h; sourceTree = "<group>"; tabWidth = 8; usesTabs = 0; };
8398847B03426FB000BC5F5E /* WebNSImageExtras.m */ = {isa = PBXFileReference; fileEncoding = 4; indentWidth = 4; lastKnownFileType = sourcecode.c.objc; path = WebNSImageExtras.m; sourceTree = "<group>"; tabWidth = 8; usesTabs = 0; };
83E4AF46036652150000E506 /* WebBasePluginPackage.h */ = {isa = PBXFileReference; fileEncoding = 4; indentWidth = 4; lastKnownFileType = sourcecode.c.h; path = WebBasePluginPackage.h; sourceTree = "<group>"; tabWidth = 8; usesTabs = 0; };
- 83E4AF47036652150000E506 /* WebBasePluginPackage.m */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.objcpp; fileEncoding = 4; indentWidth = 4; path = WebBasePluginPackage.m; sourceTree = "<group>"; tabWidth = 8; usesTabs = 0; };
+ 83E4AF47036652150000E506 /* WebBasePluginPackage.mm */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.objcpp; fileEncoding = 4; indentWidth = 4; path = WebBasePluginPackage.mm; sourceTree = "<group>"; tabWidth = 8; usesTabs = 0; };
83E4AF4B036659440000E506 /* WebPluginPackage.h */ = {isa = PBXFileReference; fileEncoding = 4; indentWidth = 4; lastKnownFileType = sourcecode.c.h; path = WebPluginPackage.h; sourceTree = "<group>"; tabWidth = 8; usesTabs = 0; };
83E4AF4C036659440000E506 /* WebPluginPackage.m */ = {isa = PBXFileReference; fileEncoding = 4; indentWidth = 4; lastKnownFileType = sourcecode.c.objc; path = WebPluginPackage.m; sourceTree = "<group>"; tabWidth = 8; usesTabs = 0; };
83E679780726D7CF006C7A36 /* WebPluginViewFactoryPrivate.h */ = {isa = PBXFileReference; fileEncoding = 4; indentWidth = 4; lastKnownFileType = sourcecode.c.h; path = WebPluginViewFactoryPrivate.h; sourceTree = "<group>"; tabWidth = 8; usesTabs = 0; };
@@ -476,6 +527,8 @@
9345DDB20365FFD0008635CE /* WebNSControlExtras.h */ = {isa = PBXFileReference; fileEncoding = 4; indentWidth = 4; lastKnownFileType = sourcecode.c.h; path = WebNSControlExtras.h; sourceTree = "<group>"; tabWidth = 8; usesTabs = 0; };
9345DDB30365FFD0008635CE /* WebNSControlExtras.m */ = {isa = PBXFileReference; fileEncoding = 4; indentWidth = 4; lastKnownFileType = sourcecode.c.objc; path = WebNSControlExtras.m; sourceTree = "<group>"; tabWidth = 8; usesTabs = 0; };
934C11660D8710BB00C32ABD /* WebDynamicScrollBarsViewInternal.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = WebDynamicScrollBarsViewInternal.h; sourceTree = "<group>"; };
+ 934C4A900F01406C009372C0 /* WebNSObjectExtras.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = WebNSObjectExtras.mm; sourceTree = "<group>"; };
+ 934C4A9F0F0141F7009372C0 /* WebResourceInternal.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = WebResourceInternal.h; sourceTree = "<group>"; };
939811320824BF01008DF038 /* Info.plist */ = {isa = PBXFileReference; indentWidth = 4; lastKnownFileType = text.plist.xml; name = Info.plist; path = mac/Info.plist; sourceTree = SOURCE_ROOT; tabWidth = 8; usesTabs = 1; };
939811330824BF01008DF038 /* WebKit.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = WebKit.framework; sourceTree = BUILT_PRODUCTS_DIR; };
93AEB17D032C1735008635CE /* WebKitLogging.h */ = {isa = PBXFileReference; fileEncoding = 4; indentWidth = 4; lastKnownFileType = sourcecode.c.h; path = WebKitLogging.h; sourceTree = "<group>"; tabWidth = 8; usesTabs = 0; };
@@ -555,8 +608,6 @@
F5C2869502846DCD018635CA /* Cocoa.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Cocoa.framework; path = /System/Library/Frameworks/Cocoa.framework; sourceTree = "<absolute>"; };
F5E0A76E02B8FEE401C1A525 /* WebURLsWithTitles.h */ = {isa = PBXFileReference; fileEncoding = 30; indentWidth = 4; lastKnownFileType = sourcecode.c.h; path = WebURLsWithTitles.h; sourceTree = "<group>"; tabWidth = 8; usesTabs = 0; };
F5E0A76F02B8FEE401C1A525 /* WebURLsWithTitles.m */ = {isa = PBXFileReference; fileEncoding = 30; indentWidth = 4; lastKnownFileType = sourcecode.c.objc; path = WebURLsWithTitles.m; sourceTree = "<group>"; tabWidth = 8; usesTabs = 0; };
- F5EBC45502134BC301CA1520 /* WebBaseNetscapePluginView.h */ = {isa = PBXFileReference; fileEncoding = 4; indentWidth = 4; lastKnownFileType = sourcecode.c.h; path = WebBaseNetscapePluginView.h; sourceTree = "<group>"; tabWidth = 8; usesTabs = 0; };
- F5EBC45602134BC301CA1520 /* WebBaseNetscapePluginView.mm */ = {isa = PBXFileReference; fileEncoding = 4; indentWidth = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = WebBaseNetscapePluginView.mm; sourceTree = "<group>"; tabWidth = 8; usesTabs = 0; };
F5F7171E0288493C018635CA /* WebNetscapePluginPackage.h */ = {isa = PBXFileReference; fileEncoding = 4; indentWidth = 4; lastKnownFileType = sourcecode.c.h; path = WebNetscapePluginPackage.h; sourceTree = "<group>"; tabWidth = 8; usesTabs = 0; };
F5F7171F0288493C018635CA /* WebNetscapePluginPackage.m */ = {isa = PBXFileReference; fileEncoding = 4; indentWidth = 4; lastKnownFileType = sourcecode.c.objc; path = WebNetscapePluginPackage.m; sourceTree = "<group>"; tabWidth = 8; usesTabs = 0; };
F5F717200288493C018635CA /* WebPluginDatabase.h */ = {isa = PBXFileReference; fileEncoding = 4; indentWidth = 4; lastKnownFileType = sourcecode.c.h; path = WebPluginDatabase.h; sourceTree = "<group>"; tabWidth = 8; usesTabs = 0; };
@@ -572,7 +623,7 @@
F79B974804019934036909D2 /* CarbonUtils.h */ = {isa = PBXFileReference; fileEncoding = 30; indentWidth = 4; lastKnownFileType = sourcecode.c.h; path = CarbonUtils.h; sourceTree = "<group>"; tabWidth = 8; usesTabs = 0; };
F79B974904019934036909D2 /* CarbonUtils.m */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.objc; path = CarbonUtils.m; sourceTree = "<group>"; usesTabs = 0; };
F7EBEE9003F9DBA103CA0DE6 /* CarbonWindowAdapter.h */ = {isa = PBXFileReference; fileEncoding = 30; indentWidth = 4; lastKnownFileType = sourcecode.c.h; path = CarbonWindowAdapter.h; sourceTree = "<group>"; tabWidth = 8; usesTabs = 0; };
- F7EBEE9103F9DBA103CA0DE6 /* CarbonWindowAdapter.m */ = {isa = PBXFileReference; fileEncoding = 30; indentWidth = 4; lastKnownFileType = sourcecode.c.objc; path = CarbonWindowAdapter.m; sourceTree = "<group>"; tabWidth = 8; usesTabs = 0; };
+ F7EBEE9103F9DBA103CA0DE6 /* CarbonWindowAdapter.mm */ = {isa = PBXFileReference; fileEncoding = 30; indentWidth = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = CarbonWindowAdapter.mm; sourceTree = "<group>"; tabWidth = 8; usesTabs = 0; };
F7EBEE9203F9DBA103CA0DE6 /* CarbonWindowContentView.h */ = {isa = PBXFileReference; fileEncoding = 30; indentWidth = 4; lastKnownFileType = sourcecode.c.h; path = CarbonWindowContentView.h; sourceTree = "<group>"; tabWidth = 8; usesTabs = 0; };
F7EBEE9303F9DBA103CA0DE6 /* CarbonWindowContentView.m */ = {isa = PBXFileReference; fileEncoding = 30; indentWidth = 4; lastKnownFileType = sourcecode.c.objc; path = CarbonWindowContentView.m; sourceTree = "<group>"; tabWidth = 8; usesTabs = 0; };
F7EBEE9403F9DBA103CA0DE6 /* CarbonWindowFrame.h */ = {isa = PBXFileReference; fileEncoding = 30; indentWidth = 4; lastKnownFileType = sourcecode.c.h; path = CarbonWindowFrame.h; sourceTree = "<group>"; tabWidth = 8; usesTabs = 0; };
@@ -595,6 +646,7 @@
939811290824BF01008DF038 /* Carbon.framework in Frameworks */,
9398112A0824BF01008DF038 /* Cocoa.framework in Frameworks */,
9398112B0824BF01008DF038 /* JavaScriptCore.framework in Frameworks */,
+ 1A20D08B0ED384F20043FA9F /* QuartzCore.framework in Frameworks */,
9398112F0824BF01008DF038 /* Security.framework in Frameworks */,
9398112C0824BF01008DF038 /* WebCore.framework in Frameworks */,
9398112E0824BF01008DF038 /* libicucore.dylib in Frameworks */,
@@ -644,10 +696,11 @@
children = (
F5C2869402846DCD018635CA /* Carbon.framework */,
F5C2869502846DCD018635CA /* Cocoa.framework */,
- 830E81E005853AC000AD0891 /* Security.framework */,
- 93D623DD051E791F002F47DD /* libicucore.dylib */,
F738C9E903FAD3DF0321FBE0 /* JavaScriptCore.framework */,
+ 1A20D08A0ED384F20043FA9F /* QuartzCore.framework */,
+ 830E81E005853AC000AD0891 /* Security.framework */,
F738C9EA03FAD3DF0321FBE0 /* WebCore.framework */,
+ 93D623DD051E791F002F47DD /* libicucore.dylib */,
);
name = "Frameworks and Libraries";
sourceTree = "<group>";
@@ -657,15 +710,15 @@
089C1665FE841158C02AAC07 /* Resources */ = {
isa = PBXGroup;
children = (
+ 9325FBDC07D829AE00159862 /* IDNScriptWhiteList.txt */,
939811320824BF01008DF038 /* Info.plist */,
5DE83A7D0D0F7FAD00CAD12A /* Localizable.strings */,
ED3B48DE0CC51F7E00DFF1EB /* StringsNotToBeLocalized.txt */,
- F5883BDE025E5C6A01000102 /* nullplugin.tiff */,
- F5B67130023EDF8901C1A525 /* url_icon.tiff */,
- 9325FBDC07D829AE00159862 /* IDNScriptWhiteList.txt */,
5DE83A740D0F7F9400CAD12A /* WebJavaScriptTextInputPanel.nib */,
5DE83A760D0F7F9400CAD12A /* WebViewEditingContextMenu.nib */,
5DE83A780D0F7F9400CAD12A /* WebViewEditingContextMenuOld.nib */,
+ F5883BDE025E5C6A01000102 /* nullplugin.tiff */,
+ F5B67130023EDF8901C1A525 /* url_icon.tiff */,
);
name = Resources;
path = mac/Resources;
@@ -673,6 +726,31 @@
tabWidth = 4;
usesTabs = 0;
};
+ 1A1F91430ECBB16F006351DA /* Hosted */ = {
+ isa = PBXGroup;
+ children = (
+ 1A8DED4E0EE88B8A00F25022 /* HostedNetscapePluginStream.h */,
+ 1A8DED4F0EE88B8A00F25022 /* HostedNetscapePluginStream.mm */,
+ 1AAF5CE40EDDE1FE008D883D /* NetscapePluginHostManager.h */,
+ 1AAF5CE50EDDE1FE008D883D /* NetscapePluginHostManager.mm */,
+ 1AAF5CE60EDDE1FE008D883D /* NetscapePluginHostProxy.h */,
+ 1AAF5CE70EDDE1FE008D883D /* NetscapePluginHostProxy.mm */,
+ 1AAF5CE80EDDE1FE008D883D /* NetscapePluginInstanceProxy.h */,
+ 1AAF5CE90EDDE1FE008D883D /* NetscapePluginInstanceProxy.mm */,
+ 1A2DBE9D0F251E3A0036F8A6 /* ProxyInstance.h */,
+ 1A2DBE9E0F251E3A0036F8A6 /* ProxyInstance.mm */,
+ 1AAF5FBD0EDE3A92008D883D /* WebHostedNetscapePluginView.h */,
+ 1AAF5FBE0EDE3A92008D883D /* WebHostedNetscapePluginView.mm */,
+ 1AAF588A0EDCCEA3008D883D /* WebKitPluginAgent.defs */,
+ 1AAF588B0EDCCEA3008D883D /* WebKitPluginAgentReply.defs */,
+ 1AAF588C0EDCCEA3008D883D /* WebKitPluginClient.defs */,
+ 1AAF588D0EDCCEA3008D883D /* WebKitPluginHost.defs */,
+ 1AAF588E0EDCCEA3008D883D /* WebKitPluginHostTypes.defs */,
+ 1AAF5D080EDDE71D008D883D /* WebKitPluginHostTypes.h */,
+ );
+ path = Hosted;
+ sourceTree = "<group>";
+ };
1A9C78030EBBC455008599D4 /* Events */ = {
isa = PBXGroup;
children = (
@@ -707,8 +785,8 @@
children = (
1C904FD50BA9DD0F0081E9D0 /* Base.xcconfig */,
1C904FD40BA9DD0F0081E9D0 /* DebugRelease.xcconfig */,
- 1C904FD20BA9DD0F0081E9D0 /* WebKit.xcconfig */,
1C904FD30BA9DD0F0081E9D0 /* Version.xcconfig */,
+ 1C904FD20BA9DD0F0081E9D0 /* WebKit.xcconfig */,
);
name = Configurations;
path = mac/Configurations;
@@ -720,6 +798,7 @@
isa = PBXGroup;
children = (
5D1638F20E35B45D00F3038E /* EmptyProtocolDefinitions.h */,
+ 1CCFFD120B1F81F2002EE926 /* OldWebAssertions.c */,
5DE92FEE0BD7017E0059A5FD /* WebAssertions.h */,
5241ADF30B1BC48A004012BD /* WebCache.h */,
5241ADF40B1BC48A004012BD /* WebCache.mm */,
@@ -730,8 +809,8 @@
ABDDF20C08EB0DDC001E1241 /* WebDownloadInternal.h */,
DD89681E09AA87240097E7F0 /* WebElementDictionary.h */,
DD89681F09AA87240097E7F0 /* WebElementDictionary.mm */,
- 1CA57D600AED6A470009BDD0 /* WebGraphicsExtras.h */,
1CA57D610AED6A470009BDD0 /* WebGraphicsExtras.c */,
+ 1CA57D600AED6A470009BDD0 /* WebGraphicsExtras.h */,
F528E3E9031E91AD01CA2ACA /* WebIconDatabase.h */,
F528E3EA031E91AD01CA2ACA /* WebIconDatabase.mm */,
51B2A0FF0ADB15D0002A9BEE /* WebIconDatabaseDelegate.h */,
@@ -749,8 +828,8 @@
7082F56F038EADAA00A80180 /* WebKitNSStringExtras.h */,
7082F570038EADAA00A80180 /* WebKitNSStringExtras.m */,
F53444CE02E87CBA018635CA /* WebKitStatistics.h */,
- F53444D202E87D4B018635CA /* WebKitStatisticsPrivate.h */,
F53444CF02E87CBA018635CA /* WebKitStatistics.m */,
+ F53444D202E87D4B018635CA /* WebKitStatisticsPrivate.h */,
BEE52D4A0473032500CA289C /* WebKitSystemBits.h */,
BEE52D4B0473032500CA289C /* WebKitSystemBits.m */,
1C0D40850AC1C8F40009C113 /* WebKitVersionChecks.h */,
@@ -777,6 +856,7 @@
51494D220C7EC1B6004178C5 /* WebNSNotificationCenterExtras.h */,
51494D230C7EC1B7004178C5 /* WebNSNotificationCenterExtras.m */,
93D1FE13067EB10B009CE68A /* WebNSObjectExtras.h */,
+ 934C4A900F01406C009372C0 /* WebNSObjectExtras.mm */,
ED2B2474033A2DA800C1A526 /* WebNSPasteboardExtras.h */,
ED2B2475033A2DA800C1A526 /* WebNSPasteboardExtras.mm */,
EDD1A5C605C83987008E3150 /* WebNSPrintOperationExtras.h */,
@@ -794,7 +874,6 @@
F59668C802AD2923018635CA /* WebStringTruncator.h */,
F59668C902AD2923018635CA /* WebStringTruncator.m */,
DD7CDEE60A23BA9E00069928 /* WebTypesInternal.h */,
- 1CCFFD120B1F81F2002EE926 /* OldWebAssertions.c */,
);
name = Misc;
path = mac/Misc;
@@ -809,8 +888,8 @@
3944607E020F50ED0ECA1767 /* WebBackForwardList.mm */,
51C714FA0B20F79F00E5E33C /* WebBackForwardListInternal.h */,
22F219CB08D236730030E078 /* WebBackForwardListPrivate.h */,
- 65DA2608052CC18700A97B31 /* WebHistory.mm */,
F520FB190221DEFD01C1A525 /* WebHistory.h */,
+ 65DA2608052CC18700A97B31 /* WebHistory.mm */,
93FDE9320D79CAF30074F029 /* WebHistoryInternal.h */,
3944607F020F50ED0ECA1767 /* WebHistoryItem.h */,
39446080020F50ED0ECA1767 /* WebHistoryItem.mm */,
@@ -877,18 +956,21 @@
isa = PBXGroup;
children = (
1A9C78030EBBC455008599D4 /* Events */,
- F5F717230288493C018635CA /* npapi.mm */,
- 1A7F9C4B0DD3DDEA0028F8A5 /* nptextinput.h */,
+ 1A1F91430ECBB16F006351DA /* Hosted */,
F5A672B90263866E01000102 /* WebBaseNetscapePluginStream.h */,
F5A672BA0263866E01000102 /* WebBaseNetscapePluginStream.mm */,
- F5EBC45502134BC301CA1520 /* WebBaseNetscapePluginView.h */,
- F5EBC45602134BC301CA1520 /* WebBaseNetscapePluginView.mm */,
- BCDFA9120C10B93E00D3A10C /* WebKitPluginContainerView.mm */,
- BCDFA8F80C10B6F500D3A10C /* WebKitPluginContainerView.h */,
+ 1A4DF5E20EC8D104006BD4B4 /* WebBaseNetscapePluginView.h */,
+ 1A4DF5E30EC8D104006BD4B4 /* WebBaseNetscapePluginView.mm */,
+ 226E9E6909D0AA8200F3A2BC /* WebNetscapeDeprecatedFunctions.c */,
+ 226E9E6809D0AA8200F3A2BC /* WebNetscapeDeprecatedFunctions.h */,
F5F7171E0288493C018635CA /* WebNetscapePluginPackage.h */,
F5F7171F0288493C018635CA /* WebNetscapePluginPackage.m */,
- 226E9E6809D0AA8200F3A2BC /* WebNetscapeDeprecatedFunctions.h */,
- 226E9E6909D0AA8200F3A2BC /* WebNetscapeDeprecatedFunctions.c */,
+ 1A4DF5200EC8C74D006BD4B4 /* WebNetscapePluginView.h */,
+ 1A4DF5210EC8C74D006BD4B4 /* WebNetscapePluginView.mm */,
+ 1A77B02C0EE7730500C8A1F9 /* WebPluginRequest.h */,
+ 1A77B02D0EE7730500C8A1F9 /* WebPluginRequest.m */,
+ F5F717230288493C018635CA /* npapi.mm */,
+ 1A7F9C4B0DD3DDEA0028F8A5 /* nptextinput.h */,
);
name = "Netscape Plug-ins";
sourceTree = "<group>";
@@ -896,19 +978,21 @@
848DFF430365F71500CA2ACA /* WebKit Plug-ins */ = {
isa = PBXGroup;
children = (
+ 51863EFC065419EB00E9E8DD /* WebJavaPlugIn.h */,
+ BCDFA8F80C10B6F500D3A10C /* WebKitPluginContainerView.h */,
+ BCDFA9120C10B93E00D3A10C /* WebKitPluginContainerView.mm */,
848DFF840365FE6A00CA2ACA /* WebPlugin.h */,
- 225F881409F97E8A00423A40 /* WebPluginPrivate.h */,
848DFF850365FE6A00CA2ACA /* WebPluginContainer.h */,
- 65836F5E07EE425900682F95 /* WebPluginContainerPrivate.h */,
65E1150307EFFEBF009B8BF7 /* WebPluginContainerCheck.h */,
65E1150407EFFEBF009B8BF7 /* WebPluginContainerCheck.mm */,
+ 65836F5E07EE425900682F95 /* WebPluginContainerPrivate.h */,
8467275C0367158500CA2ACA /* WebPluginController.h */,
8467275D0367158500CA2ACA /* WebPluginController.mm */,
83E4AF4B036659440000E506 /* WebPluginPackage.h */,
83E4AF4C036659440000E506 /* WebPluginPackage.m */,
+ 225F881409F97E8A00423A40 /* WebPluginPrivate.h */,
848DFF860365FE6A00CA2ACA /* WebPluginViewFactory.h */,
83E679780726D7CF006C7A36 /* WebPluginViewFactoryPrivate.h */,
- 51863EFC065419EB00E9E8DD /* WebJavaPlugIn.h */,
);
name = "WebKit Plug-ins";
sourceTree = "<group>";
@@ -916,64 +1000,65 @@
9C7CABBB0190A37C0ECA16EA /* WebView */ = {
isa = PBXGroup;
children = (
- F834AAD50E64B1C700E2737C /* WebTextIterator.h */,
- F834AAD60E64B1C700E2737C /* WebTextIterator.mm */,
F52CA6BD02DF9D0F018635CA /* HTML */,
51E94C0706C02CA300A9B09E /* PDF */,
8373435A0624EE0D00F3B289 /* WebArchive.h */,
+ 8373435B0624EE0D00F3B289 /* WebArchive.mm */,
933D659903413FF2008635CE /* WebClipView.h */,
+ 933D659A03413FF2008635CE /* WebClipView.m */,
39446070020F50ED0ECA1767 /* WebDataSource.h */,
+ 39446071020F50ED0ECA1767 /* WebDataSource.mm */,
658A40950A14853B005E6987 /* WebDataSourceInternal.h */,
39446072020F50ED0ECA1767 /* WebDataSourcePrivate.h */,
35081DAE02B6D4F50ACA2ACA /* WebDocument.h */,
ED21B9810528F7AA003299AC /* WebDocumentInternal.h */,
65FFB7FA0AD0B7D30048CD05 /* WebDocumentLoaderMac.h */,
+ 65FFB7FB0AD0B7D30048CD05 /* WebDocumentLoaderMac.mm */,
833987810543012D00EE146E /* WebDocumentPrivate.h */,
3944606B020F50ED0ECA1767 /* WebDynamicScrollBarsView.h */,
+ 3944606C020F50ED0ECA1767 /* WebDynamicScrollBarsView.m */,
934C11660D8710BB00C32ABD /* WebDynamicScrollBarsViewInternal.h */,
BE4FBECB0653DF47005EDE15 /* WebEditingDelegate.h */,
1C8CB0790AE9830C00B1F6E9 /* WebEditingDelegatePrivate.h */,
2D81DAB203EB0B2D00A80166 /* WebFormDelegate.h */,
+ 2D81DAB303EB0B2D00A80166 /* WebFormDelegate.m */,
2D36FD5E03F78F9E00A80166 /* WebFormDelegatePrivate.h */,
39446074020F50ED0ECA1767 /* WebFrame.h */,
+ F5143A370221DCCE01A80181 /* WebFrame.mm */,
930D02BD06275F710076701E /* WebFrameInternal.h */,
5152FAE5033FC52200CA2ACD /* WebFrameLoadDelegate.h */,
9CF0E249021361B00ECA16EA /* WebFramePrivate.h */,
51A8B52E04282B5900CA2D3A /* WebFrameView.h */,
+ 51A8B52F04282B5900CA2D3A /* WebFrameView.mm */,
51A8B53204282BD200CA2D3A /* WebFrameViewInternal.h */,
93C6F14507920B93002449CD /* WebFrameViewPrivate.h */,
51443F9A0429392B00CA2D3A /* WebPolicyDelegate.h */,
+ 51443F9B0429392B00CA2D3A /* WebPolicyDelegate.mm */,
51443F9C0429392B00CA2D3A /* WebPolicyDelegatePrivate.h */,
EDE850CD06ECC79E005FAB05 /* WebPreferenceKeysPrivate.h */,
3944606E020F50ED0ECA1767 /* WebPreferences.h */,
+ F5AEBB3D024A527601C1A526 /* WebPreferences.mm */,
9CAE9D070252A4130ECA16EA /* WebPreferencesPrivate.h */,
F5F81C3902B67C26018635CA /* WebRenderNode.h */,
F5F81C3A02B67C26018635CA /* WebRenderNode.mm */,
84311A1205EAAAF00088EDA4 /* WebResource.h */,
- 84311AF105EAB12B0088EDA4 /* WebResourcePrivate.h */,
+ 84311A1305EAAAF00088EDA4 /* WebResource.mm */,
+ 934C4A9F0F0141F7009372C0 /* WebResourceInternal.h */,
513D422E034CF55A00CA2ACD /* WebResourceLoadDelegate.h */,
656D333D0AF21AE900212169 /* WebResourceLoadDelegatePrivate.h */,
+ 84311AF105EAB12B0088EDA4 /* WebResourcePrivate.h */,
7E6FEF0508985A7200C44C3F /* WebScriptDebugDelegate.h */,
+ 7E6FEF0608985A7200C44C3F /* WebScriptDebugDelegate.mm */,
C0167BF60D7F5DD00028696E /* WebScriptDebugger.h */,
C0167BF70D7F5DD00028696E /* WebScriptDebugger.mm */,
+ F834AAD50E64B1C700E2737C /* WebTextIterator.h */,
+ F834AAD60E64B1C700E2737C /* WebTextIterator.mm */,
515E27CC0458C86500CA2D3A /* WebUIDelegate.h */,
65A7D44A0568AB2600E70EF6 /* WebUIDelegatePrivate.h */,
51A8B579042834F700CA2D3A /* WebView.h */,
+ 51A8B57A042834F700CA2D3A /* WebView.mm */,
930D02BB06275F640076701E /* WebViewInternal.h */,
51A8B57D0428353A00CA2D3A /* WebViewPrivate.h */,
- 8373435B0624EE0D00F3B289 /* WebArchive.mm */,
- 933D659A03413FF2008635CE /* WebClipView.m */,
- 39446071020F50ED0ECA1767 /* WebDataSource.mm */,
- 65FFB7FB0AD0B7D30048CD05 /* WebDocumentLoaderMac.mm */,
- 3944606C020F50ED0ECA1767 /* WebDynamicScrollBarsView.m */,
- 2D81DAB303EB0B2D00A80166 /* WebFormDelegate.m */,
- F5143A370221DCCE01A80181 /* WebFrame.mm */,
- 51A8B52F04282B5900CA2D3A /* WebFrameView.mm */,
- 51443F9B0429392B00CA2D3A /* WebPolicyDelegate.mm */,
- F5AEBB3D024A527601C1A526 /* WebPreferences.mm */,
- 84311A1305EAAAF00088EDA4 /* WebResource.mm */,
- 7E6FEF0608985A7200C44C3F /* WebScriptDebugDelegate.mm */,
- 51A8B57A042834F700CA2D3A /* WebView.mm */,
);
name = WebView;
path = mac/WebView;
@@ -1000,8 +1085,8 @@
isa = PBXGroup;
children = (
846171F90624AE5B0071A4A3 /* WebDOMOperations.h */,
- 84AE905F062DE6A80075BBF9 /* WebDOMOperationsPrivate.h */,
846171FA0624AE5B0071A4A3 /* WebDOMOperations.mm */,
+ 84AE905F062DE6A80075BBF9 /* WebDOMOperationsPrivate.h */,
);
name = DOM;
path = mac/DOM;
@@ -1012,7 +1097,7 @@
F5B36B400281DE87018635CB /* WebCoreSupport */ = {
isa = PBXGroup;
children = (
- 51CBFCAC0D10E6C5002DBF51 /* WebCachedPagePlatformData.h */,
+ 51CBFCAC0D10E6C5002DBF51 /* WebCachedFramePlatformData.h */,
14D8252D0AF955090004F057 /* WebChromeClient.h */,
14D8252E0AF955090004F057 /* WebChromeClient.mm */,
065AD5A10B0C32C7005A2B1D /* WebContextMenuClient.h */,
@@ -1027,18 +1112,18 @@
51494CD50C7EBDE0004178C5 /* WebIconDatabaseClient.mm */,
9CE1F8A302A5C6F30ECA2ACD /* WebImageRendererFactory.m */,
06693DDA0BFBA85200216072 /* WebInspectorClient.h */,
- 1C7B0C650EB2464D00A28502 /* WebInspectorClientCF.cpp */,
06693DDB0BFBA85200216072 /* WebInspectorClient.mm */,
+ 1C7B0C650EB2464D00A28502 /* WebInspectorClientCF.cpp */,
9345D4EA0365C5B2008635CE /* WebJavaScriptTextInputPanel.h */,
9345D4EB0365C5B2008635CE /* WebJavaScriptTextInputPanel.m */,
84723BE3056D719E0044BFEA /* WebKeyGenerator.h */,
84723BE4056D719E0044BFEA /* WebKeyGenerator.m */,
+ A7D3C5BA0B5773C5002CA450 /* WebPasteboardHelper.h */,
+ A7D3C5BB0B5773C5002CA450 /* WebPasteboardHelper.mm */,
93EB178E09F88D510091F8FF /* WebSystemInterface.h */,
93EB178C09F88D460091F8FF /* WebSystemInterface.m */,
F5F7174C02885C5B018635CA /* WebViewFactory.h */,
F5F7174D02885C5B018635CA /* WebViewFactory.mm */,
- A7D3C5BA0B5773C5002CA450 /* WebPasteboardHelper.h */,
- A7D3C5BB0B5773C5002CA450 /* WebPasteboardHelper.mm */,
);
name = WebCoreSupport;
path = mac/WebCoreSupport;
@@ -1049,17 +1134,16 @@
F5EBC45202134BB601CA1520 /* Plugins */ = {
isa = PBXGroup;
children = (
- 224100F2091818D900D2D266 /* WebPluginsPrivate.h */,
- 224100F80918190100D2D266 /* WebPluginsPrivate.m */,
848DFF410365F6FB00CA2ACA /* Netscape Plug-ins */,
848DFF430365F71500CA2ACA /* WebKit Plug-ins */,
83E4AF46036652150000E506 /* WebBasePluginPackage.h */,
- 83E4AF47036652150000E506 /* WebBasePluginPackage.m */,
+ 83E4AF47036652150000E506 /* WebBasePluginPackage.mm */,
F5883BE0025E5E9D01000102 /* WebNullPluginView.h */,
F5883BE1025E5E9D01000102 /* WebNullPluginView.mm */,
F5F717200288493C018635CA /* WebPluginDatabase.h */,
F5F717210288493C018635CA /* WebPluginDatabase.mm */,
- 5D4ADD680D1620350064BBB0 /* WebPlugInStreamLoaderDelegate.h */,
+ 224100F2091818D900D2D266 /* WebPluginsPrivate.h */,
+ 224100F80918190100D2D266 /* WebPluginsPrivate.m */,
);
name = Plugins;
path = mac/Plugins;
@@ -1071,8 +1155,8 @@
isa = PBXGroup;
children = (
F7EBEECF03F9DBBD03CA0DE6 /* AppKit Overrides */,
- F7EBEED203F9DBFE03CA0DE6 /* Glue */,
F7EBEED103F9DBEB03CA0DE6 /* C API */,
+ F7EBEED203F9DBFE03CA0DE6 /* Glue */,
);
name = Carbon;
path = mac/Carbon;
@@ -1084,7 +1168,7 @@
isa = PBXGroup;
children = (
F7EBEE9003F9DBA103CA0DE6 /* CarbonWindowAdapter.h */,
- F7EBEE9103F9DBA103CA0DE6 /* CarbonWindowAdapter.m */,
+ F7EBEE9103F9DBA103CA0DE6 /* CarbonWindowAdapter.mm */,
F7EBEE9203F9DBA103CA0DE6 /* CarbonWindowContentView.h */,
F7EBEE9303F9DBA103CA0DE6 /* CarbonWindowContentView.m */,
F7EBEE9403F9DBA103CA0DE6 /* CarbonWindowFrame.h */,
@@ -1118,9 +1202,9 @@
children = (
F8CA15B5029A39D901000122 /* WebAuthenticationPanel.h */,
F8CA15B6029A39D901000122 /* WebAuthenticationPanel.m */,
+ 9345D17B0365BF35008635CE /* WebAuthenticationPanel.nib */,
93154EF103A41270008635CE /* WebPanelAuthenticationHandler.h */,
93154EF203A41270008635CE /* WebPanelAuthenticationHandler.m */,
- 9345D17B0365BF35008635CE /* WebAuthenticationPanel.nib */,
);
name = Panels;
path = mac/Panels;
@@ -1139,8 +1223,13 @@
939810650824BF01008DF038 /* CarbonWindowAdapter.h in Headers */,
939810660824BF01008DF038 /* CarbonWindowContentView.h in Headers */,
939810670824BF01008DF038 /* CarbonWindowFrame.h in Headers */,
+ 5D1638F30E35B45D00F3038E /* EmptyProtocolDefinitions.h in Headers */,
939810680824BF01008DF038 /* HIViewAdapter.h in Headers */,
939810690824BF01008DF038 /* HIWebView.h in Headers */,
+ 1A8DED500EE88B8A00F25022 /* HostedNetscapePluginStream.h in Headers */,
+ 1AAF5CEA0EDDE1FE008D883D /* NetscapePluginHostManager.h in Headers */,
+ 1AAF5CEC0EDDE1FE008D883D /* NetscapePluginHostProxy.h in Headers */,
+ 1AAF5CEE0EDDE1FE008D883D /* NetscapePluginInstanceProxy.h in Headers */,
9398109A0824BF01008DF038 /* WebArchive.h in Headers */,
5DE92FEF0BD7017E0059A5FD /* WebAssertions.h in Headers */,
939810290824BF01008DF038 /* WebAuthenticationPanel.h in Headers */,
@@ -1148,10 +1237,10 @@
51C714FB0B20F79F00E5E33C /* WebBackForwardListInternal.h in Headers */,
22F219CC08D236730030E078 /* WebBackForwardListPrivate.h in Headers */,
9398102B0824BF01008DF038 /* WebBaseNetscapePluginStream.h in Headers */,
- 9398102C0824BF01008DF038 /* WebBaseNetscapePluginView.h in Headers */,
+ 1A4DF5E40EC8D104006BD4B4 /* WebBaseNetscapePluginView.h in Headers */,
9398102E0824BF01008DF038 /* WebBasePluginPackage.h in Headers */,
5241ADF50B1BC48A004012BD /* WebCache.h in Headers */,
- 51CBFCAD0D10E6C5002DBF51 /* WebCachedPagePlatformData.h in Headers */,
+ 51CBFCAD0D10E6C5002DBF51 /* WebCachedFramePlatformData.h in Headers */,
14D8252F0AF955090004F057 /* WebChromeClient.h in Headers */,
939810490824BF01008DF038 /* WebClipView.h in Headers */,
065AD5A30B0C32C7005A2B1D /* WebContextMenuClient.h in Headers */,
@@ -1177,6 +1266,7 @@
ABDDF20D08EB0DDC001E1241 /* WebDownloadInternal.h in Headers */,
A70936AF0B5608DC00CDB48E /* WebDragClient.h in Headers */,
939810510824BF01008DF038 /* WebDynamicScrollBarsView.h in Headers */,
+ 934C11670D8710BB00C32ABD /* WebDynamicScrollBarsViewInternal.h in Headers */,
9398109E0824BF01008DF038 /* WebEditingDelegate.h in Headers */,
1C8CB07A0AE9830C00B1F6E9 /* WebEditingDelegatePrivate.h in Headers */,
4BF99F900AE050BC00815C2B /* WebEditorClient.h in Headers */,
@@ -1199,15 +1289,19 @@
939810A10824BF01008DF038 /* WebHTMLViewInternal.h in Headers */,
939810580824BF01008DF038 /* WebHTMLViewPrivate.h in Headers */,
939810120824BF01008DF038 /* WebHistory.h in Headers */,
+ 93FDE9330D79CAF30074F029 /* WebHistoryInternal.h in Headers */,
939810130824BF01008DF038 /* WebHistoryItem.h in Headers */,
939810630824BF01008DF038 /* WebHistoryItemInternal.h in Headers */,
51FDC4D30B0AF5C100F84EB3 /* WebHistoryItemPrivate.h in Headers */,
939810140824BF01008DF038 /* WebHistoryPrivate.h in Headers */,
+ 1AAF5FBF0EDE3A92008D883D /* WebHostedNetscapePluginView.h in Headers */,
939810180824BF01008DF038 /* WebIconDatabase.h in Headers */,
51494CD60C7EBDE0004178C5 /* WebIconDatabaseClient.h in Headers */,
51B2A1000ADB15D0002A9BEE /* WebIconDatabaseDelegate.h in Headers */,
9304B3000B02341500F7850D /* WebIconDatabaseInternal.h in Headers */,
939810190824BF01008DF038 /* WebIconDatabasePrivate.h in Headers */,
+ 1A2D754D0DE480B900F0A648 /* WebIconFetcher.h in Headers */,
+ 1A2D75500DE4810E00F0A648 /* WebIconFetcherInternal.h in Headers */,
5D7BF8140C2A1D90008CE06D /* WebInspector.h in Headers */,
06693DDC0BFBA85200216072 /* WebInspectorClient.h in Headers */,
939810A00824BF01008DF038 /* WebJavaPlugIn.h in Headers */,
@@ -1218,7 +1312,13 @@
9398106D0824BF01008DF038 /* WebKitErrorsPrivate.h in Headers */,
9398101D0824BF01008DF038 /* WebKitLogging.h in Headers */,
9398101E0824BF01008DF038 /* WebKitNSStringExtras.h in Headers */,
+ 1AAF58940EDCCF15008D883D /* WebKitPluginAgent.defs in Headers */,
+ 1AAF58950EDCCF15008D883D /* WebKitPluginAgentReply.defs in Headers */,
+ 1AAF58960EDCCF15008D883D /* WebKitPluginClient.defs in Headers */,
BCDFA8F90C10B6F500D3A10C /* WebKitPluginContainerView.h in Headers */,
+ 1AAF58970EDCCF15008D883D /* WebKitPluginHost.defs in Headers */,
+ 1AAF58980EDCCF15008D883D /* WebKitPluginHostTypes.defs in Headers */,
+ 1AAF5D090EDDE71D008D883D /* WebKitPluginHostTypes.h in Headers */,
939810470824BF01008DF038 /* WebKitPrefix.h in Headers */,
9398101F0824BF01008DF038 /* WebKitStatistics.h in Headers */,
939810200824BF01008DF038 /* WebKitStatisticsPrivate.h in Headers */,
@@ -1244,7 +1344,11 @@
939810240824BF01008DF038 /* WebNSViewExtras.h in Headers */,
939810250824BF01008DF038 /* WebNSWindowExtras.h in Headers */,
226E9E6A09D0AA8200F3A2BC /* WebNetscapeDeprecatedFunctions.h in Headers */,
+ 1AEA66D40DC6B1FF003D12BF /* WebNetscapePluginEventHandler.h in Headers */,
+ 1AEA66D80DC6B209003D12BF /* WebNetscapePluginEventHandlerCarbon.h in Headers */,
+ 1AEA6A500DC8CE2F003D12BF /* WebNetscapePluginEventHandlerCocoa.h in Headers */,
939810310824BF01008DF038 /* WebNetscapePluginPackage.h in Headers */,
+ 1A4DF5220EC8C74D006BD4B4 /* WebNetscapePluginView.h in Headers */,
1C68F66F095B5FC100C2984E /* WebNodeHighlight.h in Headers */,
1C68F671095B5FC100C2984E /* WebNodeHighlightView.h in Headers */,
939810340824BF01008DF038 /* WebNullPluginView.h in Headers */,
@@ -1252,7 +1356,6 @@
939810A40824BF01008DF038 /* WebPDFView.h in Headers */,
9398102A0824BF01008DF038 /* WebPanelAuthenticationHandler.h in Headers */,
A7D3C5BC0B5773C5002CA450 /* WebPasteboardHelper.h in Headers */,
- 5D4ADD690D1620350064BBB0 /* WebPlugInStreamLoaderDelegate.h in Headers */,
939810350824BF01008DF038 /* WebPlugin.h in Headers */,
939810360824BF01008DF038 /* WebPluginContainer.h in Headers */,
939810B10824BF01008DF038 /* WebPluginContainerCheck.h in Headers */,
@@ -1261,6 +1364,7 @@
939810380824BF01008DF038 /* WebPluginDatabase.h in Headers */,
939810390824BF01008DF038 /* WebPluginPackage.h in Headers */,
225F881509F97E8A00423A40 /* WebPluginPrivate.h in Headers */,
+ 1A77B02E0EE7730500C8A1F9 /* WebPluginRequest.h in Headers */,
9398103A0824BF01008DF038 /* WebPluginViewFactory.h in Headers */,
939810AC0824BF01008DF038 /* WebPluginViewFactoryPrivate.h in Headers */,
224100F3091818D900D2D266 /* WebPluginsPrivate.h in Headers */,
@@ -1271,14 +1375,17 @@
9398105E0824BF01008DF038 /* WebPreferencesPrivate.h in Headers */,
9398105F0824BF01008DF038 /* WebRenderNode.h in Headers */,
939810880824BF01008DF038 /* WebResource.h in Headers */,
+ 934C4AA00F0141F7009372C0 /* WebResourceInternal.h in Headers */,
939810600824BF01008DF038 /* WebResourceLoadDelegate.h in Headers */,
656D333E0AF21AE900212169 /* WebResourceLoadDelegatePrivate.h in Headers */,
939810890824BF01008DF038 /* WebResourcePrivate.h in Headers */,
7E6FEF0808985A7200C44C3F /* WebScriptDebugDelegate.h in Headers */,
+ C0167BF80D7F5DD00028696E /* WebScriptDebugger.h in Headers */,
51079D180CED11B00077247D /* WebSecurityOriginInternal.h in Headers */,
51079D190CED11B00077247D /* WebSecurityOriginPrivate.h in Headers */,
939810270824BF01008DF038 /* WebStringTruncator.h in Headers */,
93EB178F09F88D510091F8FF /* WebSystemInterface.h in Headers */,
+ F834AAD70E64B1C700E2737C /* WebTextIterator.h in Headers */,
DD7CDEE70A23BA9E00069928 /* WebTypesInternal.h in Headers */,
939810750824BF01008DF038 /* WebUIDelegate.h in Headers */,
939810830824BF01008DF038 /* WebUIDelegatePrivate.h in Headers */,
@@ -1287,17 +1394,8 @@
939810460824BF01008DF038 /* WebViewFactory.h in Headers */,
9398109B0824BF01008DF038 /* WebViewInternal.h in Headers */,
939810710824BF01008DF038 /* WebViewPrivate.h in Headers */,
- 93FDE9330D79CAF30074F029 /* WebHistoryInternal.h in Headers */,
- C0167BF80D7F5DD00028696E /* WebScriptDebugger.h in Headers */,
- 934C11670D8710BB00C32ABD /* WebDynamicScrollBarsViewInternal.h in Headers */,
- 1AEA66D40DC6B1FF003D12BF /* WebNetscapePluginEventHandler.h in Headers */,
- 1AEA66D80DC6B209003D12BF /* WebNetscapePluginEventHandlerCarbon.h in Headers */,
- 1AEA6A500DC8CE2F003D12BF /* WebNetscapePluginEventHandlerCocoa.h in Headers */,
1A7F9C4C0DD3DDEA0028F8A5 /* nptextinput.h in Headers */,
- 1A2D754D0DE480B900F0A648 /* WebIconFetcher.h in Headers */,
- 1A2D75500DE4810E00F0A648 /* WebIconFetcherInternal.h in Headers */,
- 5D1638F30E35B45D00F3038E /* EmptyProtocolDefinitions.h in Headers */,
- F834AAD70E64B1C700E2737C /* WebTextIterator.h in Headers */,
+ 1A2DBE9F0F251E3A0036F8A6 /* ProxyInstance.h in Headers */,
);
runOnlyForDeploymentPostprocessing = 0;
};
@@ -1315,6 +1413,7 @@
939810B20824BF01008DF038 /* Resources */,
939810BB0824BF01008DF038 /* Sources */,
939D054F09DA02D500984996 /* Check For Global Initializers */,
+ 9337D6540EBFE54D00DA3CB5 /* Check For Exit Time Destructors */,
5D0D54210E98631D0029E223 /* Check For Weak VTables */,
939811270824BF01008DF038 /* Frameworks */,
1C395DE20C6BE8E0000D1E52 /* Generate 64-bit Export File */,
@@ -1436,6 +1535,20 @@
shellPath = /bin/sh;
shellScript = "# Touch Info.plist to let Xcode know it needs to copy it into the built product\ntouch \"$PROJECT_DIR/mac/Info.plist\"\n";
};
+ 9337D6540EBFE54D00DA3CB5 /* Check For Exit Time Destructors */ = {
+ isa = PBXShellScriptBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ );
+ inputPaths = (
+ );
+ name = "Check For Exit Time Destructors";
+ outputPaths = (
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ shellPath = /bin/sh;
+ shellScript = "if [ -f ../WebKitTools/Scripts/check-for-exit-time-destructors ]; then\n ../WebKitTools/Scripts/check-for-exit-time-destructors || exit $?\nfi";
+ };
939811300824BF01008DF038 /* Make Frameworks Symbolic Link */ = {
isa = PBXShellScriptBuildPhase;
buildActionMask = 8;
@@ -1474,18 +1587,22 @@
buildActionMask = 2147483647;
files = (
939811010824BF01008DF038 /* CarbonUtils.m in Sources */,
- 939810FD0824BF01008DF038 /* CarbonWindowAdapter.m in Sources */,
+ 939810FD0824BF01008DF038 /* CarbonWindowAdapter.mm in Sources */,
939810FE0824BF01008DF038 /* CarbonWindowContentView.m in Sources */,
939810FF0824BF01008DF038 /* CarbonWindowFrame.m in Sources */,
939811000824BF01008DF038 /* HIViewAdapter.m in Sources */,
939811020824BF01008DF038 /* HIWebView.m in Sources */,
+ 1A8DED510EE88B8A00F25022 /* HostedNetscapePluginStream.mm in Sources */,
+ 1AAF5CEB0EDDE1FE008D883D /* NetscapePluginHostManager.mm in Sources */,
+ 1AAF5CED0EDDE1FE008D883D /* NetscapePluginHostProxy.mm in Sources */,
+ 1AAF5CEF0EDDE1FE008D883D /* NetscapePluginInstanceProxy.mm in Sources */,
1CCFFD130B1F81F2002EE926 /* OldWebAssertions.c in Sources */,
9398111D0824BF01008DF038 /* WebArchive.mm in Sources */,
939810CF0824BF01008DF038 /* WebAuthenticationPanel.m in Sources */,
939810BC0824BF01008DF038 /* WebBackForwardList.mm in Sources */,
939810D10824BF01008DF038 /* WebBaseNetscapePluginStream.mm in Sources */,
- 939810D20824BF01008DF038 /* WebBaseNetscapePluginView.mm in Sources */,
- 939810D30824BF01008DF038 /* WebBasePluginPackage.m in Sources */,
+ 1A4DF5E50EC8D104006BD4B4 /* WebBaseNetscapePluginView.mm in Sources */,
+ 939810D30824BF01008DF038 /* WebBasePluginPackage.mm in Sources */,
5241ADF60B1BC48A004012BD /* WebCache.mm in Sources */,
14D825300AF955090004F057 /* WebChromeClient.mm in Sources */,
939810EB0824BF01008DF038 /* WebClipView.m in Sources */,
@@ -1515,17 +1632,23 @@
939810F40824BF01008DF038 /* WebHTMLView.mm in Sources */,
939811130824BF01008DF038 /* WebHistory.mm in Sources */,
939810BD0824BF01008DF038 /* WebHistoryItem.mm in Sources */,
+ 1AAF5FC00EDE3A92008D883D /* WebHostedNetscapePluginView.mm in Sources */,
939810C10824BF01008DF038 /* WebIconDatabase.mm in Sources */,
51494CD70C7EBDE0004178C5 /* WebIconDatabaseClient.mm in Sources */,
+ 1A2D754E0DE480B900F0A648 /* WebIconFetcher.mm in Sources */,
939810E30824BF01008DF038 /* WebImageRendererFactory.m in Sources */,
5D7BF8150C2A1D90008CE06D /* WebInspector.mm in Sources */,
06693DDD0BFBA85200216072 /* WebInspectorClient.mm in Sources */,
+ 1C7B0C660EB2464D00A28502 /* WebInspectorClientCF.cpp in Sources */,
939810E40824BF01008DF038 /* WebJavaScriptTextInputPanel.m in Sources */,
939811170824BF01008DF038 /* WebKeyGenerator.m in Sources */,
939811030824BF01008DF038 /* WebKitErrors.m in Sources */,
939810C30824BF01008DF038 /* WebKitLogging.m in Sources */,
939810C40824BF01008DF038 /* WebKitNSStringExtras.m in Sources */,
+ 1AAF5D0F0EDDE7A7008D883D /* WebKitPluginAgent.defs in Sources */,
+ 1AAF5D000EDDE604008D883D /* WebKitPluginClient.defs in Sources */,
BCDFA9130C10B93E00D3A10C /* WebKitPluginContainerView.mm in Sources */,
+ 1AAF5CF10EDDE586008D883D /* WebKitPluginHost.defs in Sources */,
939810C50824BF01008DF038 /* WebKitStatistics.m in Sources */,
9398110E0824BF01008DF038 /* WebKitSystemBits.m in Sources */,
1C0D40880AC1C8F40009C113 /* WebKitVersionChecks.m in Sources */,
@@ -1539,6 +1662,7 @@
65EEDE58084FFC9E0002DB25 /* WebNSFileManagerExtras.m in Sources */,
939810C70824BF01008DF038 /* WebNSImageExtras.m in Sources */,
51494D250C7EC1B7004178C5 /* WebNSNotificationCenterExtras.m in Sources */,
+ 934C4A910F01406C009372C0 /* WebNSObjectExtras.mm in Sources */,
939810C80824BF01008DF038 /* WebNSPasteboardExtras.mm in Sources */,
939811190824BF01008DF038 /* WebNSPrintOperationExtras.m in Sources */,
939811120824BF01008DF038 /* WebNSURLExtras.mm in Sources */,
@@ -1547,7 +1671,11 @@
939810C90824BF01008DF038 /* WebNSViewExtras.m in Sources */,
939810CA0824BF01008DF038 /* WebNSWindowExtras.m in Sources */,
226E9E6B09D0AA8200F3A2BC /* WebNetscapeDeprecatedFunctions.c in Sources */,
+ 1AEA66D50DC6B1FF003D12BF /* WebNetscapePluginEventHandler.mm in Sources */,
+ 1AEA66D90DC6B209003D12BF /* WebNetscapePluginEventHandlerCarbon.mm in Sources */,
+ 1AEA6A510DC8CE2F003D12BF /* WebNetscapePluginEventHandlerCocoa.mm in Sources */,
939810D60824BF01008DF038 /* WebNetscapePluginPackage.m in Sources */,
+ 1A4DF5230EC8C74D006BD4B4 /* WebNetscapePluginView.mm in Sources */,
1C68F670095B5FC100C2984E /* WebNodeHighlight.m in Sources */,
1C68F672095B5FC100C2984E /* WebNodeHighlightView.m in Sources */,
939810D90824BF01008DF038 /* WebNullPluginView.mm in Sources */,
@@ -1559,26 +1687,23 @@
939810DA0824BF01008DF038 /* WebPluginController.mm in Sources */,
939810DB0824BF01008DF038 /* WebPluginDatabase.mm in Sources */,
939810DC0824BF01008DF038 /* WebPluginPackage.m in Sources */,
+ 1A77B02F0EE7730500C8A1F9 /* WebPluginRequest.m in Sources */,
224100F90918190100D2D266 /* WebPluginsPrivate.m in Sources */,
939811080824BF01008DF038 /* WebPolicyDelegate.mm in Sources */,
939810F80824BF01008DF038 /* WebPreferences.mm in Sources */,
939810F90824BF01008DF038 /* WebRenderNode.mm in Sources */,
9398111A0824BF01008DF038 /* WebResource.mm in Sources */,
7E6FEF0908985A7200C44C3F /* WebScriptDebugDelegate.mm in Sources */,
+ C0167BF90D7F5DD00028696E /* WebScriptDebugger.mm in Sources */,
51079D170CED11B00077247D /* WebSecurityOrigin.mm in Sources */,
939810CC0824BF01008DF038 /* WebStringTruncator.m in Sources */,
93EB178D09F88D460091F8FF /* WebSystemInterface.m in Sources */,
+ F834AAD80E64B1C700E2737C /* WebTextIterator.mm in Sources */,
939810BE0824BF01008DF038 /* WebURLsWithTitles.m in Sources */,
939811070824BF01008DF038 /* WebView.mm in Sources */,
939810E80824BF01008DF038 /* WebViewFactory.mm in Sources */,
939810DD0824BF01008DF038 /* npapi.mm in Sources */,
- C0167BF90D7F5DD00028696E /* WebScriptDebugger.mm in Sources */,
- 1AEA66D50DC6B1FF003D12BF /* WebNetscapePluginEventHandler.mm in Sources */,
- 1AEA66D90DC6B209003D12BF /* WebNetscapePluginEventHandlerCarbon.mm in Sources */,
- 1AEA6A510DC8CE2F003D12BF /* WebNetscapePluginEventHandlerCocoa.mm in Sources */,
- 1A2D754E0DE480B900F0A648 /* WebIconFetcher.mm in Sources */,
- F834AAD80E64B1C700E2737C /* WebTextIterator.mm in Sources */,
- 1C7B0C660EB2464D00A28502 /* WebInspectorClientCF.cpp in Sources */,
+ 1A2DBEA00F251E3A0036F8A6 /* ProxyInstance.mm in Sources */,
);
runOnlyForDeploymentPostprocessing = 0;
};
diff --git a/WebKit/android/TimeCounter.cpp b/WebKit/android/TimeCounter.cpp
index 0dc0f3e..96fb180 100644
--- a/WebKit/android/TimeCounter.cpp
+++ b/WebKit/android/TimeCounter.cpp
@@ -31,11 +31,19 @@
#include "CString.h"
#include "Cache.h"
#include "KURL.h"
+#include "GCController.h"
+#include "JSDOMWindow.h"
+#include "Node.h"
+#include "Nodes.h"
#include "SystemTime.h"
+#include "StyleBase.h"
#include <runtime/JSGlobalObject.h>
+#include <runtime/JSLock.h>
#include <utils/Log.h>
+using namespace JSC;
using namespace WebCore;
+using namespace WTF;
namespace android {
@@ -86,7 +94,7 @@ void TimeCounter::recordNoCounter(enum Type type, const char* functionName)
LOGW("***** %s() used %d ms\n", functionName, elapsed);
}
-void TimeCounter::report(const KURL& url, int live, int dead)
+void TimeCounter::report(const KURL& url, int live, int dead, size_t arenaSize)
{
String urlString = url;
int totalTime = static_cast<int>((currentTime() - sStartTotalTime) * 1000);
@@ -103,6 +111,14 @@ void TimeCounter::report(const KURL& url, int live, int dead)
LOGD("%s", scratch);
}
LOGD("Current cache has %d bytes live and %d bytes dead", live, dead);
+ LOGD("Current render arena takes %d bytes", arenaSize);
+ JSLock lock(false);
+ Heap::Statistics jsHeapStatistics = JSDOMWindow::commonJSGlobalData()->heap.statistics();
+ LOGD("Current JavaScript heap size is %d and has %d bytes free",
+ jsHeapStatistics.size, jsHeapStatistics.free);
+ LOGD("Current JavaScript nodes use %d bytes", JSC::Node::reportJavaScriptNodesSize());
+ LOGD("Current CSS styles use %d bytes", StyleBase::reportStyleSize());
+ LOGD("Current DOM nodes use %d bytes", WebCore::Node::reportDOMNodesSize());
}
void TimeCounter::reportNow()
diff --git a/WebKit/android/TimeCounter.h b/WebKit/android/TimeCounter.h
index d1b2dff..f15deef 100644
--- a/WebKit/android/TimeCounter.h
+++ b/WebKit/android/TimeCounter.h
@@ -28,7 +28,7 @@
#ifdef ANDROID_INSTRUMENT
-#include "SystemTime.h"
+#include <wtf/CurrentTime.h>
namespace WebCore {
@@ -61,7 +61,7 @@ public:
static void record(enum Type type, const char* functionName);
static void recordNoCounter(enum Type type, const char* functionName);
- static void report(const WebCore::KURL& , int live, int dead);
+ static void report(const WebCore::KURL& , int live, int dead, size_t arenaSize);
static void reportNow();
static void reset();
static void start(enum Type type);
@@ -80,9 +80,9 @@ private:
class TimeCounterAuto {
public:
TimeCounterAuto(TimeCounter::Type type) :
- m_type(type), m_startTime(WebCore::get_thread_msec()) {}
+ m_type(type), m_startTime(WTF::get_thread_msec()) {}
~TimeCounterAuto() {
- uint32_t time = WebCore::get_thread_msec();
+ uint32_t time = WTF::get_thread_msec();
TimeCounter::sEndWebCoreThreadTime = time;
TimeCounter::sTotalTimeUsed[m_type] += time - m_startTime;
TimeCounter::sCounter[m_type]++;
diff --git a/WebKit/android/WebCoreSupport/ChromeClientAndroid.cpp b/WebKit/android/WebCoreSupport/ChromeClientAndroid.cpp
index abc6a32..714a7d8 100644
--- a/WebKit/android/WebCoreSupport/ChromeClientAndroid.cpp
+++ b/WebKit/android/WebCoreSupport/ChromeClientAndroid.cpp
@@ -245,6 +245,18 @@ PlatformWidget ChromeClientAndroid::platformWindow() const {
return viewBridge;
}
+// new to webkit4 (Feb 27, 2009)
+void ChromeClientAndroid::contentsSizeChanged(Frame*, const IntSize&) const
+{
+ notImplemented();
+}
+
+// new to webkit4 (Feb 27, 2009)
+void ChromeClientAndroid::formStateDidChange(const Node*)
+{
+ notImplemented();
+}
+
void ChromeClientAndroid::mouseDidMoveOverElement(const HitTestResult&, unsigned int) {}
void ChromeClientAndroid::setToolTip(const String&) {}
void ChromeClientAndroid::print(Frame*) {}
diff --git a/WebKit/android/WebCoreSupport/ChromeClientAndroid.h b/WebKit/android/WebCoreSupport/ChromeClientAndroid.h
index 60b3a8f..7343c88 100644
--- a/WebKit/android/WebCoreSupport/ChromeClientAndroid.h
+++ b/WebKit/android/WebCoreSupport/ChromeClientAndroid.h
@@ -97,6 +97,7 @@ namespace android {
virtual IntPoint screenToWindow(const IntPoint&) const;
virtual IntRect windowToScreen(const IntRect&) const;
virtual PlatformWidget platformWindow() const;
+ virtual void contentsSizeChanged(Frame*, const IntSize&) const;
// End methods used by HostWindow.
virtual void mouseDidMoveOverElement(const HitTestResult&, unsigned int);
@@ -109,6 +110,10 @@ namespace android {
virtual void runOpenPanel(Frame*, PassRefPtr<FileChooser>);
+ // Notification that the given form element has changed. This function
+ // will be called frequently, so handling should be very fast.
+ virtual void formStateDidChange(const Node*);
+
// Android-specific
void setWebFrame(android::WebFrame* webframe);
private:
diff --git a/WebKit/android/WebCoreSupport/EditorClientAndroid.cpp b/WebKit/android/WebCoreSupport/EditorClientAndroid.cpp
index fb71fa2..780ea53 100644
--- a/WebKit/android/WebCoreSupport/EditorClientAndroid.cpp
+++ b/WebKit/android/WebCoreSupport/EditorClientAndroid.cpp
@@ -46,6 +46,7 @@ void EditorClientAndroid::pageDestroyed() {
bool EditorClientAndroid::shouldDeleteRange(Range*) { return true; }
bool EditorClientAndroid::shouldShowDeleteInterface(HTMLElement*) { notImplemented(); return false; }
bool EditorClientAndroid::smartInsertDeleteEnabled() { notImplemented(); return false; }
+bool EditorClientAndroid::isSelectTrailingWhitespaceEnabled(){ notImplemented(); return false; }
bool EditorClientAndroid::isContinuousSpellCheckingEnabled() { notImplemented(); return false; }
void EditorClientAndroid::toggleContinuousSpellChecking() { notImplemented(); }
bool EditorClientAndroid::isGrammarCheckingEnabled() { notImplemented(); return false; }
diff --git a/WebKit/android/WebCoreSupport/EditorClientAndroid.h b/WebKit/android/WebCoreSupport/EditorClientAndroid.h
index fc35761..42e9c43 100644
--- a/WebKit/android/WebCoreSupport/EditorClientAndroid.h
+++ b/WebKit/android/WebCoreSupport/EditorClientAndroid.h
@@ -41,6 +41,7 @@ public:
virtual bool shouldDeleteRange(Range*);
virtual bool shouldShowDeleteInterface(HTMLElement*);
virtual bool smartInsertDeleteEnabled();
+ virtual bool isSelectTrailingWhitespaceEnabled();
virtual bool isContinuousSpellCheckingEnabled();
virtual void toggleContinuousSpellChecking();
virtual bool isGrammarCheckingEnabled();
@@ -58,6 +59,7 @@ public:
virtual bool shouldApplyStyle(CSSStyleDeclaration*, Range*);
// virtual bool shouldChangeTypingStyle(CSSStyleDeclaration* fromStyle, CSSStyleDeclaration* toStyle);
// virtual bool doCommandBySelector(SEL selector);
+ virtual bool shouldMoveRangeAfterDelete(Range*, Range*);
virtual void didBeginEditing();
virtual void respondToChangedContents();
@@ -79,6 +81,9 @@ public:
virtual void undo();
virtual void redo();
+ virtual void handleKeyboardEvent(KeyboardEvent*);
+ virtual void handleInputMethodKeydown(KeyboardEvent*);
+
virtual void textFieldDidBeginEditing(Element*);
virtual void textFieldDidEndEditing(Element*);
virtual void textDidChangeInTextField(Element*);
@@ -95,11 +100,8 @@ public:
virtual void showSpellingUI(bool show);
virtual bool spellingUIIsShowing();
virtual void getGuessesForWord(const String&, Vector<String>& guesses);
- virtual bool shouldMoveRangeAfterDelete(Range*, Range*);
virtual void setInputMethodState(bool);
- virtual void handleKeyboardEvent(KeyboardEvent*);
- virtual void handleInputMethodKeydown(KeyboardEvent*);
// Android specific:
void setPage(Page* page) { m_page = page; }
void setFromClick(bool fromClick) { m_notFromClick = !fromClick; }
diff --git a/WebKit/android/WebCoreSupport/FrameLoaderClientAndroid.cpp b/WebKit/android/WebCoreSupport/FrameLoaderClientAndroid.cpp
index 8782132..95a9cf6 100644
--- a/WebKit/android/WebCoreSupport/FrameLoaderClientAndroid.cpp
+++ b/WebKit/android/WebCoreSupport/FrameLoaderClientAndroid.cpp
@@ -29,6 +29,7 @@
#include "android_graphics.h"
#include "CString.h"
#include "DocumentLoader.h"
+#include "Frame.h"
#include "FrameLoader.h"
#include "FrameLoaderClientAndroid.h"
#include "FrameTree.h"
@@ -77,20 +78,6 @@ namespace android {
static const int EXTRA_LAYOUT_DELAY = 1000;
-// FIXME: Need some data for how big this should be.
-#define MAX_SESSION_HISTORY 50
-static WTF::Vector<KURL> gSessionHistory;
-
-bool historyContains(const UChar* chars, unsigned len) {
- const KURL url(String(chars, len));
- WTF::Vector<KURL>::const_iterator end = gSessionHistory.end();
- for (WTF::Vector<KURL>::const_iterator i = gSessionHistory.begin(); i != end; ++i) {
- if (equalIgnoringRef(url, *i))
- return true;
- }
- return false;
-}
-
FrameLoaderClientAndroid::FrameLoaderClientAndroid(WebFrame* webframe)
: m_frame(NULL)
, m_webFrame(webframe) {
@@ -116,18 +103,6 @@ bool FrameLoaderClientAndroid::hasWebView() const {
return true;
}
-bool FrameLoaderClientAndroid::hasFrameView() const {
- // FIXME,
- // need to revisit for sub-frame case
- return true;
-}
-
-bool FrameLoaderClientAndroid::privateBrowsingEnabled() const {
- // FIXME, are we going to support private browsing?
- notImplemented();
- return false;
-}
-
void FrameLoaderClientAndroid::makeRepresentation(DocumentLoader*) {
// don't use representation
verifiedOk();
@@ -160,16 +135,6 @@ void FrameLoaderClientAndroid::detachedFromParent3() {
notImplemented();
}
-void FrameLoaderClientAndroid::detachedFromParent4() {
- // FIXME, ready to release view
- notImplemented();
-}
-
-void FrameLoaderClientAndroid::loadedFromPageCache() {
- // don't support page cache
- verifiedOk();
-}
-
// This function is responsible for associating the "id" with a given
// subresource load. The following functions that accept an "id" are
// called for each subresource, so they should not be dispatched to the m_frame.
@@ -183,6 +148,12 @@ void FrameLoaderClientAndroid::dispatchWillSendRequest(DocumentLoader*, unsigned
lowPriority_notImplemented();
}
+bool FrameLoaderClientAndroid::shouldUseCredentialStorage(DocumentLoader*, unsigned long identifier)
+{
+ notImplemented();
+ return false;
+}
+
void FrameLoaderClientAndroid::dispatchDidReceiveAuthenticationChallenge(DocumentLoader*,
unsigned long id, const AuthenticationChallenge&) {
lowPriority_notImplemented();
@@ -289,14 +260,17 @@ void FrameLoaderClientAndroid::dispatchDidCommitLoad() {
WebViewCore::getWebViewCore(m_frame->view())->updateFrameGeneration(m_frame);
}
-static void loadDataIntoFrame(Frame* frame, const String& url,
+static void loadDataIntoFrame(Frame* frame, KURL baseUrl, const String& url,
const String& data) {
- ResourceRequest request(url);
+ if (baseUrl.isEmpty()) {
+ baseUrl = blankURL();
+ }
+ ResourceRequest request(baseUrl);
CString cstr = data.utf8();
RefPtr<WebCore::SharedBuffer> buf = WebCore::SharedBuffer::create(cstr.data(), cstr.length());
SubstituteData subData(buf, String("text/html"), String("utf-8"),
- request.url());
- frame->loader()->load(request, subData);
+ KURL(KURL(), url));
+ frame->loader()->load(request, subData, false);
}
void FrameLoaderClientAndroid::dispatchDidFailProvisionalLoad(const ResourceError& error) {
@@ -359,7 +333,8 @@ void FrameLoaderClientAndroid::dispatchDidFailProvisionalLoad(const ResourceErro
// Create the request and the substitute data and tell the FrameLoader to
// load with the replacement data.
- loadDataIntoFrame(m_frame, error.failingURL(), s);
+ loadDataIntoFrame(m_frame, m_frame->loader()->baseURL(),
+ error.failingURL(), s);
// Delete the asset.
delete a;
@@ -382,14 +357,19 @@ void FrameLoaderClientAndroid::dispatchDidFinishLoad() {
void FrameLoaderClientAndroid::dispatchDidFirstLayout() {
ASSERT(m_frame);
m_frame->document()->setExtraLayoutDelay(EXTRA_LAYOUT_DELAY);
- // FIXME: Need to figure out if we need didLayout or didFirstLayout
- // see WebViewCore::didLayout
+ // we need to do this here instead of dispatchDidFirstVisuallyNonEmptyLayout
+ // so that about:blank will update the screen.
if (!m_frame->tree()->parent()) {
// Only need to notify Java side for the top frame
WebViewCore::getWebViewCore(m_frame->view())->didFirstLayout();
}
}
+void FrameLoaderClientAndroid::dispatchDidFirstVisuallyNonEmptyLayout()
+{
+ notImplemented();
+}
+
Frame* FrameLoaderClientAndroid::dispatchCreatePage() {
ASSERT(m_frame);
#ifdef ANDROID_MULTIPLE_WINDOWS
@@ -526,10 +506,6 @@ void FrameLoaderClientAndroid::setMainDocumentError(DocumentLoader* docLoader, c
error.localizedDescription(), error.failingURL());
}
-void FrameLoaderClientAndroid::clearUnarchivingState(DocumentLoader*) {
- notImplemented();
-}
-
// This function is called right before the progress is updated.
void FrameLoaderClientAndroid::willChangeEstimatedProgress() {
verifiedOk();
@@ -589,24 +565,16 @@ void FrameLoaderClientAndroid::finishedLoading(DocumentLoader* docLoader) {
committedLoad(docLoader, 0, 0);
}
-void FrameLoaderClientAndroid::finalSetupForReplace(DocumentLoader*) {
- notImplemented();
-}
-
-void FrameLoaderClientAndroid::updateGlobalHistoryForStandardLoad(const KURL& url) {
+void FrameLoaderClientAndroid::updateGlobalHistory() {
ASSERT(m_frame);
- const String& str = url.string();
- if (!historyContains(str.characters(), str.length())) {
- if (gSessionHistory.size() == MAX_SESSION_HISTORY)
- gSessionHistory.remove(0);
- gSessionHistory.append(url);
- }
- m_webFrame->updateVisitedHistory(url, false);
+ ASSERT(m_frame->loader()->documentLoader());
+ m_webFrame->updateVisitedHistory(m_frame->loader()->documentLoader()->urlForHistory(), false);
}
-void FrameLoaderClientAndroid::updateGlobalHistoryForReload(const KURL& url) {
- ASSERT(m_frame);
- m_webFrame->updateVisitedHistory(url, true);
+void FrameLoaderClientAndroid::updateGlobalHistoryForRedirectWithoutHistoryItem() {
+ // Note, do we need to do anything where there is no HistoryItem? If we call
+ // updateGlobalHistory(), we will add bunch of "data:xxx" urls for gmail.com
+ // which is not what we want. Opt to do nothing now.
}
bool FrameLoaderClientAndroid::shouldGoToHistoryItem(HistoryItem* item) const {
@@ -629,27 +597,27 @@ void FrameLoaderClientAndroid::committedLoad(DocumentLoader* loader, const char*
}
ResourceError FrameLoaderClientAndroid::cancelledError(const ResourceRequest& request) {
- return ResourceError(String(), InternalErrorCancelled, String(), String());
+ return ResourceError(String(), InternalErrorCancelled, request.url(), String());
}
ResourceError FrameLoaderClientAndroid::cannotShowURLError(const ResourceRequest& request) {
- return ResourceError(String(), InternalErrorCannotShowUrl, String(), String());
+ return ResourceError(String(), InternalErrorCannotShowUrl, request.url(), String());
}
ResourceError FrameLoaderClientAndroid::interruptForPolicyChangeError(const ResourceRequest& request) {
- return ResourceError(String(), InternalErrorInterrupted, String(), String());
+ return ResourceError(String(), InternalErrorInterrupted, request.url(), String());
}
ResourceError FrameLoaderClientAndroid::cannotShowMIMETypeError(const ResourceResponse& request) {
- return ResourceError(String(), InternalErrorCannotShowMimeType, String(), String());
+ return ResourceError(String(), InternalErrorCannotShowMimeType, request.url(), String());
}
ResourceError FrameLoaderClientAndroid::fileDoesNotExistError(const ResourceResponse& request) {
- return ResourceError(String(), InternalErrorFileDoesNotExist, String(), String());
+ return ResourceError(String(), InternalErrorFileDoesNotExist, request.url(), String());
}
ResourceError FrameLoaderClientAndroid::pluginWillHandleLoadError(const ResourceResponse& request) {
- return ResourceError(String(), InternalErrorPluginWillHandleLoadError, String(), String());
+ return ResourceError(String(), InternalErrorPluginWillHandleLoadError, request.url(), String());
}
bool FrameLoaderClientAndroid::shouldFallBack(const ResourceError&) {
@@ -657,29 +625,6 @@ bool FrameLoaderClientAndroid::shouldFallBack(const ResourceError&) {
return false;
}
-void FrameLoaderClientAndroid::setDefersLoading(bool) {
- notImplemented();
-}
-
-bool FrameLoaderClientAndroid::willUseArchive(ResourceLoader*, const ResourceRequest&,
- const KURL& originalURL) const {
- lowPriority_notImplemented();
- return false;
-}
-
-bool FrameLoaderClientAndroid::isArchiveLoadPending(ResourceLoader*) const {
- lowPriority_notImplemented();
- return false;
-}
-
-void FrameLoaderClientAndroid::cancelPendingArchiveLoad(ResourceLoader*) {
- notImplemented();
-}
-
-void FrameLoaderClientAndroid::clearArchivedResources() {
- notImplemented();
-}
-
bool FrameLoaderClientAndroid::canHandleRequest(const ResourceRequest& request) const {
ASSERT(m_frame);
// Don't allow hijacking of intrapage navigation
@@ -811,6 +756,49 @@ String FrameLoaderClientAndroid::userAgent(const KURL& u) {
return m_webFrame->userAgentForURL(&u);
}
+void FrameLoaderClientAndroid::savePlatformDataToCachedFrame(WebCore::CachedFrame*) {
+ notImplemented();
+}
+
+void FrameLoaderClientAndroid::transitionToCommittedFromCachedFrame(WebCore::CachedFrame*) {
+ notImplemented();
+}
+
+void FrameLoaderClientAndroid::transitionToCommittedForNewPage() {
+ ASSERT(m_frame);
+ if (m_frame->settings() && !m_frame->settings()->usesPageCache()) {
+ m_webFrame->transitionToCommitted(m_frame);
+ return;
+ }
+
+ // Remember the old WebFrameView
+ WebFrameView* webFrameView = static_cast<WebFrameView*> (
+ m_frame->view()->platformWidget());
+ Retain(webFrameView);
+
+ // Remove the old FrameView
+ m_frame->setView(NULL);
+
+ // Create a new FrameView and associate it with the saved webFrameView
+ FrameView* view = new FrameView(m_frame);
+ webFrameView->setView(view);
+
+ Release(webFrameView);
+
+ // Give the new FrameView to the Frame
+ m_frame->setView(view);
+
+ // Deref since FrameViews are created with a ref of 1
+ view->deref();
+
+ if (m_frame->ownerRenderer())
+ m_frame->ownerRenderer()->setWidget(view);
+
+ m_frame->view()->initScrollbars();
+
+ m_webFrame->transitionToCommitted(m_frame);
+}
+
bool FrameLoaderClientAndroid::canCachePage() const {
return true;
}
@@ -880,7 +868,7 @@ static bool isValidYouTubeVideo(const String& path)
for (unsigned int i = sizeof(slash_v_slash); i < len; i++) {
char c = data[i];
// Check for alpha-numeric characters only.
- if (WTF::isASCIIAlphanumeric(c))
+ if (WTF::isASCIIAlphanumeric(c) || c == '_' || c == '-')
continue;
// The url can have more parameters such as &hl=en after the video id.
// Once we start seeing extra parameters we can return true.
@@ -891,7 +879,10 @@ static bool isValidYouTubeVideo(const String& path)
static bool isYouTubeUrl(const KURL& url, const String& mimeType)
{
- return url.host().endsWith("youtube.com") && isValidYouTubeVideo(url.path())
+ String host = url.host();
+ bool youtube = host.endsWith("youtube.com")
+ || host.endsWith("youtube-nocookie.com");
+ return youtube && isValidYouTubeVideo(url.path())
&& equalIgnoringCase(mimeType, "application/x-shockwave-flash");
}
@@ -905,7 +896,7 @@ Widget* FrameLoaderClientAndroid::createPlugin(
bool loadManually) {
// Create an iframe for youtube urls.
if (isYouTubeUrl(url, mimeType)) {
- RefPtr<Frame> frame = createFrame(KURL(), String(),
+ RefPtr<Frame> frame = createFrame(blankURL(), String(),
static_cast<HTMLFrameOwnerElement*>(element),
String(), false, 0, 0);
if (frame) {
@@ -928,7 +919,7 @@ Widget* FrameLoaderClientAndroid::createPlugin(
s = s.replace("VIDEO_ID", videoId);
delete a;
loadDataIntoFrame(frame.get(),
- "file:///android_asset/webkit/", s);
+ KURL("file:///android_asset/webkit/"), String(), s);
return frame->view();
}
return NULL;
@@ -1046,61 +1037,4 @@ void FrameLoaderClientAndroid::didAddIconForPageUrl(const String& pageUrl) {
dispatchDidReceiveIcon();
}
}
-
-// functions new to Feb-19 tip of tree merge:
-// According to the changelog:
-// The very Mac-centric "makeDocumentView", "setDocumentViewFromCachedPage",
-// and "saveDocumentViewToCachedPage" become "transitionToCommittedForNewPage",
-// "transitionToCommittedFromCachedPage", and "savePlatformDataToCachedPage"
-// accordingly
-void FrameLoaderClientAndroid::savePlatformDataToCachedPage(CachedPage*) {
- // don't support page cache
- verifiedOk();
-}
-
-void FrameLoaderClientAndroid::transitionToCommittedFromCachedPage(CachedPage*) {
- // don't support page cache
- verifiedOk();
-}
-
-void FrameLoaderClientAndroid::transitionToCommittedForNewPage() {
- ASSERT(m_frame);
- if (m_frame->settings() && !m_frame->settings()->usesPageCache()) {
- m_webFrame->transitionToCommitted(m_frame);
- return;
- }
-
- // Remember the old WebFrameView
- WebFrameView* webFrameView = static_cast<WebFrameView*> (
- m_frame->view()->platformWidget());
- Retain(webFrameView);
-
- // Remove the old FrameView
- m_frame->setView(NULL);
-
- // Create a new FrameView and associate it with the saved webFrameView
- FrameView* view = new FrameView(m_frame);
- webFrameView->setView(view);
-
- Release(webFrameView);
-
- // Give the new FrameView to the Frame
- m_frame->setView(view);
-
- // Deref since FrameViews are created with a ref of 1
- view->deref();
-
- if (m_frame->ownerRenderer())
- m_frame->ownerRenderer()->setWidget(view);
-
- m_frame->view()->initScrollbars();
-
- m_webFrame->transitionToCommitted(m_frame);
-}
-
-// new as of webkit 34152
-void FrameLoaderClientAndroid::updateGlobalHistory(const KURL& url) {
- m_webFrame->updateVisitedHistory(url, false);
-}
-
}
diff --git a/WebKit/android/WebCoreSupport/FrameLoaderClientAndroid.h b/WebKit/android/WebCoreSupport/FrameLoaderClientAndroid.h
index 58b296e..9d71c9d 100644
--- a/WebKit/android/WebCoreSupport/FrameLoaderClientAndroid.h
+++ b/WebKit/android/WebCoreSupport/FrameLoaderClientAndroid.h
@@ -50,9 +50,6 @@ namespace android {
virtual void frameLoaderDestroyed();
virtual bool hasWebView() const; // mainly for assertions
- virtual bool hasFrameView() const; // ditto
-
- virtual bool privateBrowsingEnabled() const;
virtual void makeRepresentation(DocumentLoader*);
virtual void forceLayout();
@@ -62,13 +59,11 @@ namespace android {
virtual void detachedFromParent2();
virtual void detachedFromParent3();
- virtual void detachedFromParent4();
-
- virtual void loadedFromPageCache();
virtual void assignIdentifierToInitialRequest(unsigned long identifier, DocumentLoader*, const ResourceRequest&);
virtual void dispatchWillSendRequest(DocumentLoader*, unsigned long identifier, ResourceRequest&, const ResourceResponse& redirectResponse);
+ virtual bool shouldUseCredentialStorage(DocumentLoader*, unsigned long identifier);
virtual void dispatchDidReceiveAuthenticationChallenge(DocumentLoader*, unsigned long identifier, const AuthenticationChallenge&);
virtual void dispatchDidCancelAuthenticationChallenge(DocumentLoader*, unsigned long identifier, const AuthenticationChallenge&);
virtual void dispatchDidReceiveResponse(DocumentLoader*, unsigned long identifier, const ResourceResponse&);
@@ -92,6 +87,7 @@ namespace android {
virtual void dispatchDidFinishDocumentLoad();
virtual void dispatchDidFinishLoad();
virtual void dispatchDidFirstLayout();
+ virtual void dispatchDidFirstVisuallyNonEmptyLayout();
virtual Frame* dispatchCreatePage();
virtual void dispatchShow();
@@ -108,7 +104,6 @@ namespace android {
virtual void dispatchDidLoadMainResource(DocumentLoader*);
virtual void revertToProvisionalState(DocumentLoader*);
virtual void setMainDocumentError(DocumentLoader*, const ResourceError&);
- virtual void clearUnarchivingState(DocumentLoader*);
virtual void willChangeEstimatedProgress();
virtual void didChangeEstimatedProgress();
@@ -125,11 +120,10 @@ namespace android {
virtual void committedLoad(DocumentLoader*, const char*, int);
virtual void finishedLoading(DocumentLoader*);
- virtual void finalSetupForReplace(DocumentLoader*);
- virtual void updateGlobalHistory(const KURL&);
- virtual void updateGlobalHistoryForStandardLoad(const KURL&);
- virtual void updateGlobalHistoryForReload(const KURL&);
+ virtual void updateGlobalHistory();
+ virtual void updateGlobalHistoryForRedirectWithoutHistoryItem();
+
virtual bool shouldGoToHistoryItem(HistoryItem*) const;
#ifdef ANDROID_HISTORY_CLIENT
virtual void dispatchDidAddHistoryItem(HistoryItem*) const;
@@ -148,13 +142,6 @@ namespace android {
virtual bool shouldFallBack(const ResourceError&);
- virtual void setDefersLoading(bool);
-
- virtual bool willUseArchive(ResourceLoader*, const ResourceRequest&, const KURL& originalURL) const;
- virtual bool isArchiveLoadPending(ResourceLoader*) const;
- virtual void cancelPendingArchiveLoad(ResourceLoader*);
- virtual void clearArchivedResources();
-
virtual bool canHandleRequest(const ResourceRequest&) const;
virtual bool canShowMIMEType(const String& MIMEType) const;
virtual bool representationExistsForURLScheme(const String& URLScheme) const;
@@ -172,6 +159,10 @@ namespace android {
virtual String userAgent(const KURL&);
+ virtual void savePlatformDataToCachedFrame(WebCore::CachedFrame*);
+ virtual void transitionToCommittedFromCachedFrame(WebCore::CachedFrame*);
+ virtual void transitionToCommittedForNewPage();
+
virtual bool canCachePage() const;
virtual void download(ResourceHandle*, const ResourceRequest&, const ResourceRequest&, const ResourceResponse&);
@@ -188,14 +179,10 @@ namespace android {
virtual String overrideMediaType() const;
virtual void windowObjectCleared();
-
virtual void didPerformFirstNavigation() const;
+
virtual void registerForIconNotification(bool listen = true);
- virtual void savePlatformDataToCachedPage(CachedPage*);
- virtual void transitionToCommittedFromCachedPage(CachedPage*);
- virtual void transitionToCommittedForNewPage();
-
// WebIconDatabaseClient api
virtual void didAddIconForPageUrl(const String& pageUrl);
diff --git a/WebKit/android/jni/PictureSet.cpp b/WebKit/android/jni/PictureSet.cpp
index 65aac8f..50b2a27 100644
--- a/WebKit/android/jni/PictureSet.cpp
+++ b/WebKit/android/jni/PictureSet.cpp
@@ -36,7 +36,7 @@
#include "SkRect.h"
#include "SkRegion.h"
#include "SkStream.h"
-#include "SystemTime.h"
+#include <wtf/CurrentTime.h>
#define MAX_DRAW_TIME 100
#define MIN_SPLITTABLE 400
@@ -270,9 +270,9 @@ bool PictureSet::draw(SkCanvas* canvas)
}
canvas->translate(pathBounds.fLeft, pathBounds.fTop);
canvas->save();
- uint32_t startTime = WebCore::get_thread_msec();
+ uint32_t startTime = WTF::get_thread_msec();
canvas->drawPicture(*working->mPicture);
- size_t elapsed = working->mElapsed = WebCore::get_thread_msec() - startTime;
+ size_t elapsed = working->mElapsed = WTF::get_thread_msec() - startTime;
working->mWroteElapsed = true;
if (maxElapsed < elapsed && (pathBounds.width() >= MIN_SPLITTABLE ||
pathBounds.height() >= MIN_SPLITTABLE))
diff --git a/WebKit/android/jni/WebCoreFrameBridge.cpp b/WebKit/android/jni/WebCoreFrameBridge.cpp
index e14a534..5ec70c6 100644
--- a/WebKit/android/jni/WebCoreFrameBridge.cpp
+++ b/WebKit/android/jni/WebCoreFrameBridge.cpp
@@ -69,6 +69,7 @@
#include "RenderView.h"
#include "ResourceHandle.h"
#include "ScriptController.h"
+#include "ScriptValue.h"
#include "SelectionController.h"
#include "Settings.h"
#include "SubstituteData.h"
@@ -96,6 +97,7 @@
#ifdef ANDROID_INSTRUMENT
#include "TimeCounter.h"
+#include <runtime/JSLock.h>
#endif
namespace android {
@@ -385,7 +387,7 @@ WebFrame::loadStarted(WebCore::Frame* frame)
if (loadType == WebCore::FrameLoadTypeReplace ||
loadType == WebCore::FrameLoadTypeSame ||
- (loadType == WebCore::FrameLoadTypeRedirectWithLockedHistory &&
+ (loadType == WebCore::FrameLoadTypeRedirectWithLockedBackForwardList &&
!isMainFrame))
return;
@@ -787,7 +789,7 @@ static void LoadUrl(JNIEnv *env, jobject obj, jstring url)
WebCore::String webcoreUrl = to_string(env, url);
WebCore::ResourceRequest request(webcoreUrl);
LOGV("LoadUrl %s", webcoreUrl.latin1().data());
- pFrame->loader()->load(request);
+ pFrame->loader()->load(request, false);
}
@@ -816,7 +818,7 @@ static void LoadData(JNIEnv *env, jobject obj, jstring baseUrl, jstring data,
WebCore::KURL(to_string(env, failUrl)));
// Perform the load
- pFrame->loader()->load(request, substituteData);
+ pFrame->loader()->load(request, substituteData, false);
}
static void StopLoading(JNIEnv *env, jobject obj)
@@ -876,10 +878,15 @@ static void Reload(JNIEnv *env, jobject obj, jboolean allowStale)
LOG_ASSERT(pFrame, "nativeReload must take a valid frame pointer!");
WebCore::FrameLoader* loader = pFrame->loader();
- if (allowStale)
- loader->reloadAllowingStaleData(loader->documentLoader()->overrideEncoding());
- else
- loader->reload();
+ if (allowStale) {
+ // load the current page with FrameLoadTypeIndexedBackForward so that it
+ // will use cache when it is possible
+ WebCore::Page* page = pFrame->page();
+ WebCore::HistoryItem* item = page->backForwardList()->currentItem();
+ if (item)
+ page->goToItem(item, FrameLoadTypeIndexedBackForward);
+ } else
+ loader->reload(true);
}
static void GoBackOrForward(JNIEnv *env, jobject obj, jint pos)
@@ -906,15 +913,11 @@ static jobject StringByEvaluatingJavaScriptFromString(JNIEnv *env, jobject obj,
WebCore::Frame* pFrame = GET_NATIVE_FRAME(env, obj);
LOG_ASSERT(pFrame, "stringByEvaluatingJavaScriptFromString must take a valid frame pointer!");
- JSC::JSValue* r =
+ WebCore::ScriptValue value =
pFrame->loader()->executeScript(to_string(env, script), true);
WebCore::String result = WebCore::String();
- if (r) {
- // note: r->getString() returns a UString.
- result = WebCore::String(r->isString() ? r->getString() :
- r->toString(pFrame->script()->globalObject()->globalExec()));
- }
-
+ if (!value.getString(result))
+ return NULL;
unsigned len = result.length();
if (len == 0)
return NULL;
@@ -942,13 +945,17 @@ static void AddJavascriptInterface(JNIEnv *env, jobject obj, jint nativeFramePoi
JSC::Bindings::setJavaVM(vm);
// Add the binding to JS environment
JSC::ExecState* exec = window->globalExec();
- JSC::JSObject *addedObject = JSC::Bindings::Instance::createRuntimeObject(
- exec, JSC::Bindings::JavaInstance::create(javascriptObj, root));
- // Add the binding name to the window's table of child objects.
- JSC::PutPropertySlot slot;
- window->put(exec,
- JSC::Identifier(exec, to_string(env, interfaceName)),
- addedObject, slot);
+ JSC::JSObject *addedObject = JSC::Bindings::JavaInstance::create(javascriptObj,
+ root)->createRuntimeObject(exec);
+ const jchar* s = env->GetStringChars(interfaceName, NULL);
+ if (s) {
+ // Add the binding name to the window's table of child objects.
+ JSC::PutPropertySlot slot;
+ window->put(exec, JSC::Identifier(exec, (const UChar *)s,
+ env->GetStringLength(interfaceName)), addedObject, slot);
+ env->ReleaseStringChars(interfaceName, s);
+ checkException(env);
+ }
}
}
@@ -972,6 +979,13 @@ static void ClearCache(JNIEnv *env, jobject obj)
{
#ifdef ANDROID_INSTRUMENT
TimeCounterAuto counter(TimeCounter::NativeCallbackTimeCounter);
+
+ JSC::JSLock lock(false);
+ JSC::Heap::Statistics jsHeapStatistics = WebCore::JSDOMWindow::commonJSGlobalData()->heap.statistics();
+ LOGD("About to gc and JavaScript heap size is %d and has %d bytes free",
+ jsHeapStatistics.size, jsHeapStatistics.free);
+ LOGD("About to clear cache and current cache has %d bytes live and %d bytes dead",
+ cache()->getLiveSize(), cache()->getDeadSize());
#endif
if (!WebCore::cache()->disabled()) {
// Disabling the cache will remove all resources from the cache. They may
@@ -1182,7 +1196,7 @@ static JNINativeMethod gBrowserFrameNativeMethods[] = {
(void*) CreateFrame },
{ "nativeDestroyFrame", "()V",
(void*) DestroyFrame },
- { "stopLoading", "()V",
+ { "nativeStopLoading", "()V",
(void*) StopLoading },
{ "nativeLoadUrl", "(Ljava/lang/String;)V",
(void*) LoadUrl },
diff --git a/WebKit/android/jni/WebHistory.cpp b/WebKit/android/jni/WebHistory.cpp
index 8a75230..cd6e0f1 100644
--- a/WebKit/android/jni/WebHistory.cpp
+++ b/WebKit/android/jni/WebHistory.cpp
@@ -39,6 +39,7 @@
#include "FrameLoaderClientAndroid.h"
#include "FrameTree.h"
#include "HistoryItem.h"
+#include "IconDatabase.h"
#include "Page.h"
#include "TextEncoding.h"
#include "WebCoreFrameBridge.h"
@@ -142,9 +143,10 @@ static void WebHistoryRestoreIndex(JNIEnv* env, jobject obj, jint frame, jint in
{
LOG_ASSERT(frame, "RestoreState needs a valid Frame pointer!");
WebCore::Frame* pFrame = (WebCore::Frame*)frame;
+ WebCore::Page* page = pFrame->page();
// Set the current index in the list.
- WebCore::BackForwardList* list = pFrame->page()->backForwardList();
+ WebCore::BackForwardList* list = page->backForwardList();
WebCore::HistoryItem* currentItem = list->entries()[index].get();
list->goToItem(currentItem);
@@ -153,12 +155,9 @@ static void WebHistoryRestoreIndex(JNIEnv* env, jobject obj, jint frame, jint in
loader->setCurrentHistoryItem(currentItem);
loader->setPreviousHistoryItem(list->backItem());
- // Update the request with the current item's info.
- WebCore::ResourceRequest& request = loader->documentLoader()->request();
- request.setURL(currentItem->url());
- request.setMainDocumentURL(currentItem->url());
- // Reload the current page
- loader->reloadAllowingStaleData(loader->documentLoader()->overrideEncoding());
+ // load the current page with FrameLoadTypeIndexedBackForward so that it
+ // will use cache when it is possible
+ page->goToItem(currentItem, FrameLoadTypeIndexedBackForward);
}
static void WebHistoryInflate(JNIEnv* env, jobject obj, jint frame, jbyteArray data)
@@ -200,13 +199,13 @@ static void WebHistoryInflate(JNIEnv* env, jobject obj, jint frame, jbyteArray d
#endif
}
-// 7 empty strings + no document state + children count = 9 unsigned values
+// 6 empty strings + no document state + children count = 8 unsigned values
// 1 char for isTargetItem
// ANDROID_HISTORY_CLIENT adds 1 int for scale.
#ifdef ANDROID_HISTORY_CLIENT
-#define HISTORY_MIN_SIZE ((int)(sizeof(unsigned) * 10 + sizeof(char)))
-#else
#define HISTORY_MIN_SIZE ((int)(sizeof(unsigned) * 9 + sizeof(char)))
+#else
+#define HISTORY_MIN_SIZE ((int)(sizeof(unsigned) * 8 + sizeof(char)))
#endif
jbyteArray WebHistory::Flatten(JNIEnv* env, WTF::Vector<char>& v, WebCore::HistoryItem* item)
@@ -420,9 +419,6 @@ static void write_item(WTF::Vector<char>& v, WebCore::HistoryItem* item)
// Form content type
write_string(v, item->formContentType());
- // Form referrer
- write_string(v, item->formReferrer());
-
// Form data
const WebCore::FormData* formData = item->formData();
if (formData)
@@ -552,7 +548,6 @@ static bool read_item_recursive(WebCore::HistoryItem* newItem,
// Generate a new ResourceRequest object for populating form information.
WebCore::String formContentType;
- WebCore::String formReferrer;
WTF::PassRefPtr<WebCore::FormData> formData = NULL;
// Read the form content type
@@ -569,20 +564,6 @@ static bool read_item_recursive(WebCore::HistoryItem* newItem,
if (end - data < sizeofUnsigned)
return false;
- // Read the form referrer
- memcpy(&l, data, sizeofUnsigned);
- data += sizeofUnsigned;
- if (l) {
- LOGV("Referrer %d %.*s", l, l, data);
- if (data + l < end)
- formReferrer = e.decode(data, l);
- else
- return false;
- data += l;
- }
- if (end - data < sizeofUnsigned)
- return false;
-
// Read the form data
memcpy(&l, data, sizeofUnsigned);
data += sizeofUnsigned;
@@ -602,7 +583,6 @@ static bool read_item_recursive(WebCore::HistoryItem* newItem,
WebCore::ResourceRequest r;
r.setHTTPMethod("POST");
r.setHTTPContentType(formContentType);
- r.setHTTPReferrer(formReferrer);
r.setHTTPBody(formData);
newItem->setFormInfoFromRequest(r);
}
@@ -756,12 +736,6 @@ static void unit_test()
ptr = (const char*)test3;
*(int*)(test3 + offset) = 4000;
LOG_ASSERT(!read_item_recursive(testItem, &ptr, HISTORY_MIN_SIZE), "4000 length contentType should fail!");
- // Form referrer
- offset += 4;
- memset(test3, 0, HISTORY_MIN_SIZE);
- ptr = (const char*)test3;
- *(int*)(test3 + offset) = 4000;
- LOG_ASSERT(!read_item_recursive(testItem, &ptr, HISTORY_MIN_SIZE), "4000 length referrer should fail!");
// Form data
offset += 4;
memset(test3, 0, HISTORY_MIN_SIZE);
diff --git a/WebKit/android/jni/WebViewCore.cpp b/WebKit/android/jni/WebViewCore.cpp
index d9f9cec..0da3974 100644
--- a/WebKit/android/jni/WebViewCore.cpp
+++ b/WebKit/android/jni/WebViewCore.cpp
@@ -82,7 +82,6 @@
#include "SkPicture.h"
#include "SkUtils.h"
#include "StringImpl.h"
-#include "SystemTime.h"
#include "Text.h"
#include "TypingCommand.h"
#include "WebCoreFrameBridge.h"
@@ -91,6 +90,7 @@
#include "android_graphics.h"
#include <ui/KeycodeLabels.h>
#include "jni_utility.h"
+#include <wtf/CurrentTime.h>
#if DEBUG_NAV_UI
#include "SkTime.h"
@@ -299,8 +299,8 @@ static bool layoutIfNeededRecursive(WebCore::Frame* f)
return true;
if (v->needsLayout())
- v->layout();
-
+ v->layout(f->tree()->parent());
+
WebCore::Frame* child = f->tree()->firstChild();
bool success = true;
while (child) {
@@ -401,7 +401,12 @@ void WebViewCore::checkNavCache()
m_lastFocusedBounds.x(), m_lastFocusedBounds.y(),
m_lastFocusedBounds.width(), m_lastFocusedBounds.height(),
oldBounds.x(), oldBounds.y(), oldBounds.width(), oldBounds.height());
- unsigned latestVersion = m_mainFrame->document()->domTreeVersion();
+ unsigned latestVersion = 0;
+ // as domTreeVersion only increment, we can just check the sum to see whether
+ // we need to update the frame cache
+ for (Frame* frame = m_mainFrame; frame; frame = frame->tree()->traverseNext()) {
+ latestVersion += frame->document()->domTreeVersion();
+ }
if (m_lastFocused != oldFocusNode || m_lastFocusedBounds != oldBounds
|| m_findIsUp || latestVersion != m_domtree_version) {
m_lastFocused = oldFocusNode;
@@ -827,7 +832,7 @@ void WebViewCore::setSizeScreenWidthAndScale(int width, int height,
}
}
r->setNeedsLayoutAndPrefWidthsRecalc();
- m_mainFrame->forceLayout(true);
+ m_mainFrame->forceLayout();
// scroll to restore current screen center
if (!node)
return;
@@ -1164,7 +1169,7 @@ bool WebViewCore::finalKitFocus(WebCore::Frame* frame, WebCore::Node* node,
// a valid frame. Do not want to make a call on frame unless it is valid.
WebCore::PlatformMouseEvent mouseEvent(m_mousePos, m_mousePos,
WebCore::NoButton, WebCore::MouseEventMoved, 1, false, false, false,
- false, WebCore::currentTime());
+ false, WTF::currentTime());
frame->eventHandler()->handleMouseMoveEvent(mouseEvent);
bool valid = builder.validNode(frame, node);
if (!donotChangeDOMFocus) {
@@ -1259,8 +1264,7 @@ static int findTextBoxIndex(WebCore::Node* node, const WebCore::IntPoint& pt)
DBG_NAV_LOGD("node=%p pt=(%d,%d) renderText=0", node, pt.x(), pt.y());
return -3; // error
}
- int renderX, renderY;
- renderText->absolutePosition(renderX, renderY);
+ FloatPoint absPt = renderText->localToAbsolute();
WebCore::InlineTextBox *textBox = renderText->firstTextBox();
int globalX, globalY;
CacheBuilder::GetGlobalOffset(node, &globalX, &globalY);
@@ -1271,11 +1275,11 @@ static int findTextBoxIndex(WebCore::Node* node, const WebCore::IntPoint& pt)
int textBoxEnd = textBoxStart + textBox->len();
if (textBoxEnd <= textBoxStart)
continue;
- WebCore::IntRect bounds = textBox->selectionRect(renderX, renderY,
+ WebCore::IntRect bounds = textBox->selectionRect(absPt.x(), absPt.y(),
textBoxStart, textBoxEnd);
if (!bounds.contains(x, y))
continue;
- int offset = textBox->offsetForPosition(x - renderX);
+ int offset = textBox->offsetForPosition(x - absPt.x());
#if DEBUG_NAV_UI
int prior = offset > 0 ? textBox->positionForOffset(offset - 1) : -1;
int current = textBox->positionForOffset(offset);
@@ -1283,7 +1287,7 @@ static int findTextBoxIndex(WebCore::Node* node, const WebCore::IntPoint& pt)
DBG_NAV_LOGD(
"offset=%d pt.x=%d globalX=%d renderX=%d x=%d "
"textBox->x()=%d textBox->start()=%d prior=%d current=%d next=%d",
- offset, pt.x(), globalX, renderX, x,
+ offset, pt.x(), globalX, absPt.x(), x,
textBox->xPos(), textBox->start(), prior, current, next
);
#endif
@@ -1785,7 +1789,7 @@ bool WebViewCore::handleMouseClick(WebCore::Frame* framePtr, WebCore::Node* node
for (int i = 0; i < size; i++) {
if (listItems[i]->hasTagName(WebCore::HTMLNames::optionTag)) {
WebCore::HTMLOptionElement* option = static_cast<WebCore::HTMLOptionElement*>(listItems[i]);
- *names.append() = stringConverter(option->optionText());
+ *names.append() = stringConverter(option->text());
*enabledArray.append() = option->disabled() ? 0 : 1;
if (multiple && option->selected())
*selectedArray.append() = i;
@@ -1810,12 +1814,12 @@ bool WebViewCore::handleMouseClick(WebCore::Frame* framePtr, WebCore::Node* node
DBG_NAV_LOGD("m_mousePos={%d,%d}", m_mousePos.x(), m_mousePos.y());
WebCore::PlatformMouseEvent mouseDown(m_mousePos, m_mousePos, WebCore::LeftButton,
WebCore::MouseEventPressed, 1, false, false, false, false,
- WebCore::currentTime());
+ WTF::currentTime());
// ignore the return from as it will return true if the hit point can trigger selection change
framePtr->eventHandler()->handleMousePressEvent(mouseDown);
WebCore::PlatformMouseEvent mouseUp(m_mousePos, m_mousePos, WebCore::LeftButton,
WebCore::MouseEventReleased, 1, false, false, false, false,
- WebCore::currentTime());
+ WTF::currentTime());
bool handled = framePtr->eventHandler()->handleMouseReleaseEvent(mouseUp);
webFrame->setUserInitiatedClick(false);
return handled;
@@ -1953,9 +1957,8 @@ void WebViewCore::snapToAnchor()
{
if (m_snapAnchorNode) {
if (m_snapAnchorNode->inDocument()) {
- int rx, ry;
- m_snapAnchorNode->renderer()->absolutePosition(rx, ry);
- scrollTo(rx, ry);
+ FloatPoint pt = m_snapAnchorNode->renderer()->localToAbsolute();
+ scrollTo(pt.x(), pt.y());
} else {
m_snapAnchorNode = 0;
}
diff --git a/WebKit/android/nav/CacheBuilder.cpp b/WebKit/android/nav/CacheBuilder.cpp
index 9150830..8c350bf 100644
--- a/WebKit/android/nav/CacheBuilder.cpp
+++ b/WebKit/android/nav/CacheBuilder.cpp
@@ -113,39 +113,6 @@ void CacheBuilder::Debug::comma(const char* str) {
print(", ");
}
-int CacheBuilder::Debug::flowBoxes(RenderFlow* flow, int ifIndex, int indent) {
- char scratch[256];
- const InlineFlowBox* box = flow->firstLineBox();
- if (box == NULL)
- return ifIndex;
- do {
- newLine();
- int i = snprintf(scratch, sizeof(scratch), "// render flow:%p"
- " box:%p%.*s", flow, box, indent, " ");
- for (; box; box = box->nextFlowBox()) {
- i += snprintf(&scratch[i], sizeof(scratch) - i,
- " [%d]:{%d, %d, %d, %d}", ++ifIndex,
- box->xPos(), box->yPos(), box->width(), box->height());
- if (ifIndex % 4 == 0)
- break;
- }
- print(scratch);
- } while (box);
- RenderObject const * const end = flow->lastChild();
- if (end == NULL)
- return ifIndex;
- indent += 2;
- if (indent > 8)
- indent = 8;
- for (const RenderObject* renderer = flow->firstChild(); renderer != end;
- renderer = renderer->nextSibling())
- {
- if (renderer->isInlineFlow())
- ifIndex = flowBoxes((RenderFlow*) renderer, ifIndex, indent);
- }
- return ifIndex;
-}
-
void CacheBuilder::Debug::flush() {
int len;
do {
@@ -542,16 +509,16 @@ void CacheBuilder::Debug::groups() {
InlineTextBox* textBox = renderText->firstTextBox();
unsigned rectIndex = 0;
while (textBox) {
- int renderX, renderY;
- renderText->absolutePosition(renderX, renderY);
- IntRect rect = textBox->selectionRect(renderX, renderY, 0, INT_MAX);
+ FloatPoint pt = renderText->localToAbsolute();
+ IntRect rect = textBox->selectionRect((int) pt.x(), (int) pt.y(), 0, INT_MAX);
mIndex = 0;
mIndex += snprintf(&mBuffer[mIndex], mBufferSize - mIndex, "{ %d, %d, %d, %d, %d",
nodeIndex, rect.x(), rect.y(), rect.width(), rect.height());
mIndex += snprintf(&mBuffer[mIndex], mBufferSize - mIndex, ", %d, %d, %d",
- textBox->len(), textBox->selectionHeight(), textBox->selectionTop());
+ textBox->len(), 0 /*textBox->selectionHeight()*/,
+ 0 /*textBox->selectionTop()*/);
mIndex += snprintf(&mBuffer[mIndex], mBufferSize - mIndex, ", %d, %d, %d",
- textBox->spaceAdd(), textBox->start(), textBox->textPos());
+ 0 /*textBox->spaceAdd()*/, textBox->start(), 0 /*textBox->textPos()*/);
mIndex += snprintf(&mBuffer[mIndex], mBufferSize - mIndex, ", %d, %d, %d, %d",
textBox->xPos(), textBox->yPos(), textBox->width(), textBox->height());
mIndex += snprintf(&mBuffer[mIndex], mBufferSize - mIndex, ", %d }, // %d ",
@@ -711,29 +678,24 @@ void CacheBuilder::Debug::renderTree(RenderObject* renderer, int indent,
" hasBackground:%s isInlineFlow:%s isBlockFlow:%s"
" textOverflow:%s",
vis == VISIBLE ? "visible" : vis == HIDDEN ? "hidden" : "collapse",
- style->opacity(), renderer->width(), renderer->height(),
+ style->opacity(), 0 /*renderer->width()*/, 0 /*renderer->height()*/,
style->hasBackground() ? "true" : "false",
- renderer->isInlineFlow() ? "true" : "false",
+ 0 /*renderer->isInlineFlow()*/ ? "true" : "false",
renderer->isBlockFlow() ? "true" : "false",
style->textOverflow() ? "true" : "false"
);
print(scratch);
newLine(indent);
- const IntRect& oRect = renderer->overflowRect(true);
+ const IntRect& oRect = renderer->absoluteClippedOverflowRect();
const IntRect& cRect = renderer->getOverflowClipRect(0,0);
snprintf(scratch, sizeof(scratch),
"// render xPos:%d yPos:%d overflowRect:{%d, %d, %d, %d} "
" getOverflowClipRect:{%d, %d, %d, %d} ",
- renderer->xPos(), renderer->yPos(),
+ 0 /*renderer->xPos()*/, 0 /*renderer->yPos()*/,
oRect.x(), oRect.y(), oRect.width(), oRect.height(),
cRect.x(), cRect.y(), cRect.width(), cRect.height()
);
print(scratch);
- if (renderer->isInlineFlow()) {
- RenderFlow* renderFlow = (RenderFlow*) renderer;
- int ifIndex = 0;
- flowBoxes(renderFlow, ifIndex, 0);
- }
}
tryParent:
RenderObject* parent = renderer->parent();
@@ -1141,7 +1103,7 @@ void CacheBuilder::BuildFrame(Frame* root, Frame* frame,
clip.mHasClip = hasClip;
clip.mDirection = direction;
if (columns != NULL) {
- const IntRect& oRect = nodeRenderer->overflowRect(true);
+ const IntRect& oRect = ((RenderBox*)nodeRenderer)->overflowRect(true);
clip.mBounds.move(oRect.x(), oRect.y());
}
}
@@ -1249,13 +1211,13 @@ void CacheBuilder::BuildFrame(Frame* root, Frame* frame,
}
bounds = node->getRect();
// For Bank of America site
- if (isTextField && nodeRenderer->paddingLeft() > 100) {
- int paddingLeft = nodeRenderer->paddingLeft();
- int paddingTop = nodeRenderer->paddingTop();
+ if (isTextField && ((RenderBox*)nodeRenderer)->paddingLeft() > 100) {
+ int paddingLeft = ((RenderBox*)nodeRenderer)->paddingLeft();
+ int paddingTop = ((RenderBox*)nodeRenderer)->paddingTop();
int x = bounds.x() + paddingLeft;
int y = bounds.y() + paddingTop;
- int width = bounds.width() - paddingLeft - nodeRenderer->paddingRight();
- int height = bounds.height() - paddingTop - nodeRenderer->paddingBottom();
+ int width = bounds.width() - paddingLeft - ((RenderBox*)nodeRenderer)->paddingRight();
+ int height = bounds.height() - paddingTop - ((RenderBox*)nodeRenderer)->paddingBottom();
bounds.setLocation(IntPoint(x, y));
bounds.setSize(IntSize(width, height));
}
@@ -2964,14 +2926,14 @@ bool CacheBuilder::ConstructPartRects(Node* node, const IntRect& bounds,
if (renderer->hasOverflowClip() == false) {
if (nodeIsAnchor && test->hasTagName(HTMLNames::divTag)) {
IntRect bounds = renderer->absoluteBoundingBoxRect(); // x, y fixup done by AddPartRect
- int left = bounds.x() + renderer->paddingLeft()
- + renderer->borderLeft();
- int top = bounds.y() + renderer->paddingTop()
- + renderer->borderTop();
- int right = bounds.right() - renderer->paddingRight()
- - renderer->borderRight();
- int bottom = bounds.bottom() - renderer->paddingBottom()
- - renderer->borderBottom();
+ int left = bounds.x() + ((RenderBox*)renderer)->paddingLeft()
+ + ((RenderBox*)renderer)->borderLeft();
+ int top = bounds.y() + ((RenderBox*)renderer)->paddingTop()
+ + ((RenderBox*)renderer)->borderTop();
+ int right = bounds.right() - ((RenderBox*)renderer)->paddingRight()
+ - ((RenderBox*)renderer)->borderRight();
+ int bottom = bounds.bottom() - ((RenderBox*)renderer)->paddingBottom()
+ - ((RenderBox*)renderer)->borderBottom();
if (left >= right || top >= bottom)
continue;
bounds = IntRect(left, top, right - left, bottom - top);
@@ -3016,8 +2978,7 @@ bool CacheBuilder::ConstructTextRect(Text* textNode,
EVisibility vis = renderText->style()->visibility();
StringImpl* string = textNode->string();
const UChar* chars = string->characters();
- int renderX, renderY;
- renderText->absolutePosition(renderX, renderY);
+ FloatPoint pt = renderText->localToAbsolute();
do {
int textBoxStart = textBox->start();
int textBoxEnd = textBoxStart + textBox->len();
@@ -3025,7 +2986,7 @@ bool CacheBuilder::ConstructTextRect(Text* textNode,
continue;
if (textBoxEnd > relEnd)
textBoxEnd = relEnd;
- IntRect bounds = textBox->selectionRect(renderX, renderY,
+ IntRect bounds = textBox->selectionRect((int) pt.x(), (int) pt.y(),
start, textBoxEnd);
bounds.intersect(clipBounds);
if (bounds.isEmpty())
diff --git a/WebKit/android/nav/CacheBuilder.h b/WebKit/android/nav/CacheBuilder.h
index 07040e2..32ae0af 100644
--- a/WebKit/android/nav/CacheBuilder.h
+++ b/WebKit/android/nav/CacheBuilder.h
@@ -243,7 +243,6 @@ public:
private:
void attr(const AtomicString& name, const AtomicString& value);
void comma(const char* str);
- int flowBoxes(RenderFlow* flow, int ifIndex, int indent);
void flush();
Frame* frameAnd() const;
void frames();
diff --git a/WebKit/android/nav/CachedFrame.cpp b/WebKit/android/nav/CachedFrame.cpp
index 4db9e40..0eefad1 100644
--- a/WebKit/android/nav/CachedFrame.cpp
+++ b/WebKit/android/nav/CachedFrame.cpp
@@ -330,8 +330,8 @@ CachedNode* CachedFrame::find(WebCore::Node* node) // !!! probably debugging onl
}
#endif
-const CachedNode* CachedFrame::findBestAt(const WebCore::IntRect& rect,
- int* best, const CachedNode** directHit, const CachedFrame** framePtr, int* x, int* y) const
+const CachedNode* CachedFrame::findBestAt(const WebCore::IntRect& rect, int* best,
+ bool* inside, const CachedNode** directHit, const CachedFrame** framePtr, int* x, int* y) const
{
const CachedNode* result = NULL;
int rectWidth = rect.width();
@@ -387,13 +387,17 @@ const CachedNode* CachedFrame::findBestAt(const WebCore::IntRect& rect,
both.intersect(testRect);
if (both.isEmpty())
continue;
+ bool testInside = testRect.contains(center);
+ if (*inside && !testInside)
+ continue;
WebCore::IntPoint testCenter = WebCore::IntPoint(testRect.x() +
(testRect.width() >> 1), testRect.y() + (testRect.height() >> 1));
int dx = testCenter.x() - center.x();
int dy = testCenter.y() - center.y();
int distance = dx * dx + dy * dy;
- if (*best > distance) {
+ if ((!*inside && testInside) || *best > distance) {
*best = distance;
+ *inside = testInside;
result = test;
*framePtr = this;
*x = both.x() + (both.width() >> 1);
@@ -404,7 +408,7 @@ const CachedNode* CachedFrame::findBestAt(const WebCore::IntRect& rect,
}
for (const CachedFrame* frame = mCachedFrames.begin();
frame != mCachedFrames.end(); frame++) {
- const CachedNode* frameResult = frame->findBestAt(rect, best, directHit,
+ const CachedNode* frameResult = frame->findBestAt(rect, best, inside, directHit,
framePtr, x, y);
if (NULL != frameResult)
result = frameResult;
diff --git a/WebKit/android/nav/CachedFrame.h b/WebKit/android/nav/CachedFrame.h
index 8e77470..dc20e15 100644
--- a/WebKit/android/nav/CachedFrame.h
+++ b/WebKit/android/nav/CachedFrame.h
@@ -71,7 +71,7 @@ public:
bool directionChange() const;
const CachedNode* document() const { return mCachedNodes.begin(); }
bool empty() const { return mCachedNodes.size() < 2; } // must have 1 past doc
- const CachedNode* findBestAt(const WebCore::IntRect& , int* best,
+ const CachedNode* findBestAt(const WebCore::IntRect& , int* best, bool* inside,
const CachedNode** , const CachedFrame** , int* x, int* y) const;
const CachedFrame* findBestFrameAt(int x, int y) const;
const CachedNode* findBestHitAt(const WebCore::IntRect& ,
diff --git a/WebKit/android/nav/CachedRoot.cpp b/WebKit/android/nav/CachedRoot.cpp
index 4a50c80..a123e55 100644
--- a/WebKit/android/nav/CachedRoot.cpp
+++ b/WebKit/android/nav/CachedRoot.cpp
@@ -595,9 +595,10 @@ const CachedNode* CachedRoot::findAt(const WebCore::IntRect& rect,
const CachedFrame** framePtr, int* x, int* y) const
{
int best = INT_MAX;
+ bool inside = false;
(const_cast<CachedRoot*>(this))->resetClippedOut();
const CachedNode* directHit = NULL;
- const CachedNode* node = findBestAt(rect, &best, &directHit, framePtr, x, y);
+ const CachedNode* node = findBestAt(rect, &best, &inside, &directHit, framePtr, x, y);
DBG_NAV_LOGD("node=%d (%p)", node == NULL ? 0 : node->index(),
node == NULL ? NULL : node->nodePointer());
if (node == NULL) {
diff --git a/WebKit/android/plugins/ANPTypefaceInterface.cpp b/WebKit/android/plugins/ANPTypefaceInterface.cpp
index 5878f3f..17b3067 100644
--- a/WebKit/android/plugins/ANPTypefaceInterface.cpp
+++ b/WebKit/android/plugins/ANPTypefaceInterface.cpp
@@ -28,7 +28,7 @@
#include "SkANP.h"
static ANPTypeface* anp_createFromName(const char name[], ANPTypefaceStyle s) {
- SkTypeface* tf = SkTypeface::Create(name,
+ SkTypeface* tf = SkTypeface::CreateFromName(name,
static_cast<SkTypeface::Style>(s));
return reinterpret_cast<ANPTypeface*>(tf);
}
@@ -53,7 +53,7 @@ static void anp_unref(ANPTypeface* tf) {
}
static ANPTypefaceStyle anp_getStyle(const ANPTypeface* tf) {
- SkTypeface::Style s = tf ? tf->getStyle() : SkTypeface::kNormal;
+ SkTypeface::Style s = tf ? tf->style() : SkTypeface::kNormal;
return static_cast<ANPTypefaceStyle>(s);
}
diff --git a/WebKit/android/stl/algorithm b/WebKit/android/stl/algorithm
index 8255def..33968ab 100644
--- a/WebKit/android/stl/algorithm
+++ b/WebKit/android/stl/algorithm
@@ -58,6 +58,7 @@ namespace WebCore {
#include <float.h>
#include <math.h>
#include <stdint.h>
+#include <stddef.h>
#ifndef WCHAR_MAX
#define WCHAR_MAX 0xFFFF
@@ -182,7 +183,7 @@ _NUMERIC_LIMITS (unsigned long long, 0, ULLONG_MAX, 0, false, true, true);
#endif
//--------------------------------------------------------------------------------------
-typedef int ptrdiff_t;
+using ::ptrdiff_t;
typedef bool (* Comparator)(const void*, const void*);
extern void sort(const void** start, const void** end, Comparator comp);
diff --git a/WebKit/cf/ChangeLog b/WebKit/cf/ChangeLog
index 3e06358..d651266 100644
--- a/WebKit/cf/ChangeLog
+++ b/WebKit/cf/ChangeLog
@@ -1,3 +1,9 @@
+2008-12-09 Dimitri Glazkov <dglazkov@chromium.org>
+
+ Fix bustage.
+
+ * WebCoreSupport/WebInspectorClientCF.cpp:
+
2008-10-24 Adam Roben <aroben@apple.com>
Windows build fix
diff --git a/WebKit/cf/WebCoreSupport/WebInspectorClientCF.cpp b/WebKit/cf/WebCoreSupport/WebInspectorClientCF.cpp
index a4cb934..443a35d 100644
--- a/WebKit/cf/WebCoreSupport/WebInspectorClientCF.cpp
+++ b/WebKit/cf/WebCoreSupport/WebInspectorClientCF.cpp
@@ -25,14 +25,18 @@
// FIXME: On Windows, we require all WebKit source files to include config.h
// before including any other files. Failing to include config.h will leave
-// WTF_PLATFORM_CF undefined, causing build failures in this file. But Mac
-// doesn't have a config.h for WebKit, so we can't include the Windows one
-// here. For now we can just define WTF_PLATFORM_CF manually, but we need a
-// better long-term solution.
+// WTF_PLATFORM_CF and WTF_USE_JSC undefined, causing build failures in this
+// file. But Mac doesn't have a config.h for WebKit, so we can't include the
+// Windows one here. For now we can just define WTF_PLATFORM_CF and WTF_USE_JSC
+// manually, but we need a better long-term solution.
#ifndef WTF_PLATFORM_CF
#define WTF_PLATFORM_CF 1
#endif
+#ifndef WTF_USE_JSC
+#define WTF_USE_JSC 1
+#endif
+
#include "WebInspectorClient.h"
#include <CoreFoundation/CoreFoundation.h>
diff --git a/WebKit/gtk/ChangeLog b/WebKit/gtk/ChangeLog
index 166be63..e6dc216 100644
--- a/WebKit/gtk/ChangeLog
+++ b/WebKit/gtk/ChangeLog
@@ -1,3 +1,695 @@
+2009-02-03 Mark Rowe <mrowe@apple.com>
+
+ Merge r40508.
+
+ 2009-02-02 Geoffrey Garen <ggaren@apple.com>
+
+ Reviewed by Sam Weinig.
+
+ Track redirects in global history.
+
+ Keep GTK building.
+
+ * WebCoreSupport/FrameLoaderClientGtk.cpp:
+ (WebKit::FrameLoaderClient::createFrame):
+ (WebKit::FrameLoaderClient::updateGlobalHistoryForRedirectWithoutHistoryItem):
+ * WebCoreSupport/FrameLoaderClientGtk.h:
+
+2009-02-03 Mark Rowe <mrowe@apple.com>
+
+ Merge r40436.
+
+ 2009-01-30 Geoffrey Garen <ggaren@apple.com>
+
+ Build fix.
+
+ * WebCoreSupport/FrameLoaderClientGtk.cpp:
+ (WebKit::FrameLoaderClient::createFrame):
+
+2009-01-27 Brady Eidson <beidson@apple.com>
+
+ Reviewed by Dan Bernstein
+
+ Rework FrameLoaderClient to work on a CachedFrame basis instead of CachedPage
+
+ * WebCoreSupport/FrameLoaderClientGtk.cpp:
+ (WebKit::FrameLoaderClient::savePlatformDataToCachedFrame):
+ (WebKit::FrameLoaderClient::transitionToCommittedFromCachedFrame):
+ * WebCoreSupport/FrameLoaderClientGtk.h:
+
+2009-01-25 Darin Adler <darin@apple.com>
+
+ Try to fix GTK build.
+
+ * webkit/webkitwebview.cpp: Added include of FloatQuad.h.
+
+2009-01-13 Alexander V. Butenko <alex@digiqube.com>
+
+ Reviewed by Holger Freyther.
+
+ https://bugs.webkit.org/show_bug.cgi?id=23279
+
+ Fix crash on WebView dispose stage.
+
+ Add null checks to webkit_web_view_set_scroll_adjustments and
+ webkit_web_view_get_accessible as they get called from within
+ the dispose.
+
+ * webkit/webkitwebview.cpp:
+
+2009-01-11 Xan Lopez <xan@gnome.org>
+
+ Reviewed by Holger Freyther.
+
+ Use NULL instead of 0 when dealing with pointers, as agreed for
+ the coding style of the WebKit GTK port for its GTK+ specific
+ files.
+
+ * webkit/webkitwebview.cpp:
+
+2009-01-11 Xan Lopez <xan@gnome.org>
+
+ Reviewed by Holger Freyther.
+
+ Add padding to the class structs to avoid breaking ABI each time
+ we add stuff there.
+
+ * webkit/webkitnetworkrequest.h:
+ * webkit/webkitwebbackforwardlist.h:
+ * webkit/webkitwebhistoryitem.h:
+ * webkit/webkitwebnavigationaction.h:
+ * webkit/webkitwebpolicydecision.h:
+ * webkit/webkitwebview.h:
+
+2009-01-09 Benjamin Otte <otte@gnome.org>
+
+ Reviewed by Holger Freyther.
+
+ https://bugs.webkit.org/show_bug.cgi?id=23194
+
+ make the finalize function the dispose function. Not releasing held
+ objects in dispose can cause crashers later.
+
+ * webkit/webkitwebview.cpp:
+
+2009-01-09 Benjamin Otte <otte@gnome.org>
+
+ Reviewed by Holger Freyther.
+
+ https://bugs.webkit.org/show_bug.cgi?id=23194
+
+ Remove broken code that uses a fallback. The previous code did 2
+ policy decisions which caused crashes.
+ Download is still notImplemented();
+
+ * webkit/webkitwebpolicydecision.cpp:
+ (_WebKitWebPolicyDecisionPrivate::webkit_web_policy_decision_download):
+
+2009-01-03 Xan Lopez <xan@gnome.org>
+
+ Reviewed by Holger Freyther.
+
+ [GTK] Need a public method to reload view bypassing cache
+ https://bugs.webkit.org/show_bug.cgi?id=19815
+
+ * webkit/webkitwebview.cpp:
+ * webkit/webkitwebview.h:
+
+ Add webkit_web_view_reload_bypass_cache.
+
+2009-01-07 Holger Hans Peter Freyther <zecke@selfish.org>
+
+ Reviewed by Maciej Stachowiak.
+
+ Add private API to get the number of active animations of
+ a frame. This is required by the DumpRenderTree utility.
+
+ * webkit/webkitprivate.h:
+ * webkit/webkitwebframe.cpp:
+
+2009-01-05 Adam Treat <adam.treat@torchmobile.com>
+
+ Fix build
+
+ * WebCoreSupport/ChromeClientGtk.h:
+
+2009-01-05 Adam Treat <adam.treat@torchmobile.com>
+
+ Reviewed by George Staikos.
+
+ Build fix for contentsSizeChanged
+
+ * WebCoreSupport/ChromeClientGtk.cpp:
+ (WebKit::ChromeClient::contentsSizeChanged):
+ * WebCoreSupport/ChromeClientGtk.h:
+
+2009-01-04 Adam Treat <adam.treat@torchmobile.com>
+
+ Reviewed by George Staikos.
+
+ Make the gtk port build with the new fixedLayoutSize feature
+
+ * WebCoreSupport/FrameLoaderClientGtk.cpp:
+ (WebKit::FrameLoaderClient::transitionToCommittedForNewPage):
+
+2009-01-03 Holger Hans Peter Freyther <zecke@selfish.org>
+
+ Reviewed by Darin Adler.
+
+ [GTK] Fix the reference counting of WebKitWebFrames
+
+ The ownership is the following: WebKitWebView owns a WebCore::Page.
+ WebKitWebView is creating one WebKitWebFrame which will be the
+ mainFrame of the WebCore::Page (having the reference on the Frame).
+
+ The FrameLoaderClient has the reference of the WebKitWebFrame for
+ the main frame and also any other frame. This means when the
+ WebCore::Frame goes away the FrameLoaderClient will go away which
+ will normally remove the last reference of the WebKitWebFrame. Because
+ an API user might have g_object_ref'ed the WebKitWebFrame null
+ checks had to be added to WebKitWebFrame.
+
+ For WebCore::Frames created by the FrameLoaderClient the ownership
+ will be passed down to the FrameTree, the WebKitWebFrame is not holding
+ a reference to the WebCore::Frame.
+
+ Do not g_object_unref the mainFrame in the destructor of the
+ WebKitWebFrame as this will happen from within the WebCore::Page
+ destruction. Do not hold a reference to the WebCore::Frame (circle) in
+ WebKitWebFrame, add null checks as the WebCore::Frame might have gone
+ away. Do not keep track of the FrameLoaderClient in the private
+ structures as it was mostly unusued.
+
+ https://bugs.webkit.org/show_bug.cgi?id=21837
+
+ * WebCoreSupport/FrameLoaderClientGtk.cpp:
+ (WebKit::FrameLoaderClient::frameLoaderDestroyed):
+ (WebKit::FrameLoaderClient::createFrame):
+ * tests/main.c: Add test case.
+ (test_webkit_web_frame_create_destroy):
+ (test_webkit_web_frame_lifetime):
+ (main):
+ * webkit/webkitprivate.cpp:
+ (WebKit::core):
+ * webkit/webkitprivate.h:
+ * webkit/webkitwebframe.cpp:
+ * webkit/webkitwebview.cpp:
+
+2009-01-02 Holger Hans Peter Freyther <zecke@selfish.org>
+
+ Unreviewed build fix.
+
+ * WebCoreSupport/FrameLoaderClientGtk.cpp:
+
+2008-12-31 Holger Hans Peter Freyther <zecke@selfish.org>
+
+ Reviewed by Nikolas Zimmermann.
+
+ https://bugs.webkit.org/show_bug.cgi?id=17045
+
+ Add section information for View, Frame, Settings, HistoryItem, BackForwardList, WindowFeatures and Inspector
+
+ Add section information and informal examples for WebKitWebView,
+ WebKitWebFrame, WebKitWebSettings, WebKitWebNetworkRequest,
+ WebKitWebWindowFeatures, WebKitWebHistoryItem,
+ WebKitWebBackForwardList and WebKitWebInspector.
+
+ * docs/webkitgtk-sections.txt: Decide to not document some bits
+ * webkit/webkitnetworkrequest.cpp:
+ * webkit/webkitwebbackforwardlist.cpp:
+ * webkit/webkitwebframe.cpp:
+ * webkit/webkitwebhistoryitem.cpp:
+ * webkit/webkitwebhistoryitem.h:
+ * webkit/webkitwebinspector.cpp:
+ * webkit/webkitwebsettings.cpp:
+ * webkit/webkitwebsettings.h:
+ * webkit/webkitwebview.cpp:
+ * webkit/webkitwebwindowfeatures.cpp:
+
+2008-12-21 Xan Lopez <xan@gnome.org>
+
+ Reviewed by Holger Freyther.
+
+ https://bugs.webkit.org/show_bug.cgi?id=16092
+ [GTK] Middle-mouse click should allow opening a URL in a new tab
+
+ Add mouse button and keyboard state modifiers info to navigation action.
+
+ * WebCoreSupport/FrameLoaderClientGtk.cpp:
+ (WebKit::FrameLoaderClient::dispatchDecidePolicyForNavigationAction):
+ * webkit/webkitwebnavigationaction.cpp:
+ (_WebKitWebNavigationActionPrivate::):
+ (_WebKitWebNavigationActionPrivate::webkit_web_navigation_action_get_property):
+ (_WebKitWebNavigationActionPrivate::webkit_web_navigation_action_set_property):
+ (_WebKitWebNavigationActionPrivate::webkit_web_navigation_action_class_init):
+ (_WebKitWebNavigationActionPrivate::webkit_web_navigation_action_get_button):
+ (_WebKitWebNavigationActionPrivate::webkit_web_navigation_action_get_modifier_state):
+ * webkit/webkitwebnavigationaction.h:
+
+2008-12-19 Marco Barisione <marco.barisione@collabora.co.uk>
+
+ Reviewed by Holger Freyther.
+
+ http://bugs.webkit.org/show_bug.cgi?id=16562
+ [gtk] Implement WebPolicyDelegate methods
+
+ Original work by Pierre-Luc Beaudoin. Final touches by Gustavo
+ Noronha.
+
+ This implements the delegates methods of WebPolicyDelegate.
+ Since Gtk+/C doesn't have delegate methods, they are replaced with
+ signals.
+
+ A new object WebKitWebPolicyDecision allows the browser to delay its
+ response in certain cases. WebKitWebNavigationAction contains the
+ information about what caused a navigation request.
+
+ * WebCoreSupport/FrameLoaderClientGtk.cpp:
+ (WebKit::FrameLoaderClient::FrameLoaderClient):
+ (WebKit::FrameLoaderClient::~FrameLoaderClient):
+ (WebKit::FrameLoaderClient::dispatchDecidePolicyForMIMEType):
+ (WebKit::FrameLoaderClient::dispatchDecidePolicyForNewWindowAction):
+ (WebKit::FrameLoaderClient::dispatchDecidePolicyForNavigationAction):
+ (WebKit::FrameLoaderClient::cancelPolicyCheck):
+ (WebKit::FrameLoaderClient::canShowMIMEType):
+ * WebCoreSupport/FrameLoaderClientGtk.h:
+ * webkit/webkit.h:
+ * webkit/webkitdefines.h:
+ * webkit/webkitprivate.cpp:
+ (WebKit::kit):
+ (WebKit::core):
+ * webkit/webkitprivate.h:
+ * webkit/webkitwebnavigationaction.cpp: Added.
+ (_WebKitWebNavigationActionPrivate::):
+ (_WebKitWebNavigationActionPrivate::webkit_web_navigation_action_get_property):
+ (_WebKitWebNavigationActionPrivate::webkit_web_navigation_action_set_property):
+ (_WebKitWebNavigationActionPrivate::webkit_web_navigation_action_init):
+ (_WebKitWebNavigationActionPrivate::webkit_web_navigation_action_finalize):
+ (_WebKitWebNavigationActionPrivate::webkit_web_navigation_action_class_init):
+ (_WebKitWebNavigationActionPrivate::webkit_web_navigation_action_get_reason):
+ (_WebKitWebNavigationActionPrivate::webkit_web_navigation_action_set_reason):
+ (_WebKitWebNavigationActionPrivate::webkit_web_navigation_action_get_original_uri):
+ (_WebKitWebNavigationActionPrivate::webkit_web_navigation_action_set_original_uri):
+ * webkit/webkitwebnavigationaction.h: Added.
+ * webkit/webkitwebpolicydecision.cpp: Added.
+ (_WebKitWebPolicyDecisionPrivate::webkit_web_policy_decision_class_init):
+ (_WebKitWebPolicyDecisionPrivate::webkit_web_policy_decision_init):
+ (_WebKitWebPolicyDecisionPrivate::webkit_web_policy_decision_new):
+ (_WebKitWebPolicyDecisionPrivate::webkit_web_policy_decision_use):
+ (_WebKitWebPolicyDecisionPrivate::webkit_web_policy_decision_ignore):
+ (_WebKitWebPolicyDecisionPrivate::webkit_web_policy_decision_download):
+ (_WebKitWebPolicyDecisionPrivate::webkit_web_policy_decision_cancel):
+ * webkit/webkitwebpolicydecision.h: Added.
+ * webkit/webkitwebview.cpp:
+ * webkit/webkitwebview.h:
+
+2008-12-18 Dan Bernstein <mitz@apple.com>
+
+ Reviewed by Sam Weinig.
+
+ - stub out FrameLoaderClient::shouldUseCredentialStorage().
+
+ * WebCoreSupport/FrameLoaderClientGtk.cpp:
+ (WebKit::FrameLoaderClient::shouldUseCredentialStorage):
+ * WebCoreSupport/FrameLoaderClientGtk.h:
+
+2008-12-18 Sam Weinig <sam@webkit.org>
+
+ Reviewed by John Sullivan.
+
+ Stub out FrameLoaderClient::dispatchDidFirstVisuallyNonEmptyLayout()
+
+ * WebCoreSupport/FrameLoaderClientGtk.cpp:
+ (WebKit::FrameLoaderClient::dispatchDidFirstVisuallyNonEmptyLayout):
+ * WebCoreSupport/FrameLoaderClientGtk.h:
+
+2008-12-13 Holger Hans Peter Freyther <zecke@selfish.org>
+
+ Reviewed by Cameron Zwarich.
+
+ [GTK] Fix crash with LayoutTests/fast/loader/frame-creation-removal.html
+
+ Call WebCore::Frame::init after the frame has been given
+ a name and been added to the FrameTree of the parent.
+
+ Removing the call to init is fine as FrameLoaderClientGtk::createFrame
+ is the only user of webkit_web_frame_init_with_web_view and is already
+ calling WebCore::Frame::init.
+
+ * webkit/webkitwebframe.cpp:
+
+2008-12-13 Adam Bergkvist <adam.bergkvist@ericsson.com>
+
+ Reviewed by Holger Freyther.
+
+ https://bugs.webkit.org/show_bug.cgi?id=22779
+
+ Check for GTK version >= 2.14.0 before using gtk_test_init.
+
+ * tests/main.c:
+ (main):
+
+2008-12-13 Zan Dobersek <zandobersek@gmail.com>
+
+ Reviewed by Darin Adler.
+
+ https://bugs.webkit.org/show_bug.cgi?id=22039
+
+ Implement animation and transition pausing as needed by DumpRenderTree.
+
+ * webkit/webkitprivate.h:
+ * webkit/webkitwebframe.cpp:
+
+2008-11-29 Holger Hans Peter Freyther <zecke@selfish.org>
+
+ Rubber-stamped by Simon Hausmann.
+
+ https://bugs.webkit.org/show_bug.cgi?id=22574
+
+ Make webkit_web_view_set_window_features internal
+
+ Calling this method will not result in a notify::window-features
+ signal being emitted. This would allow replacing a
+ WebKitWebWindowFeature on a WebKitWebView without anyone noticing
+ and the client code would monitor the wrong object.
+
+ * WebCoreSupport/ChromeClientGtk.cpp:
+ (WebKit::ChromeClient::createWindow):
+ * webkit/webkitwebview.cpp:
+ * webkit/webkitwebview.h:
+
+2008-12-09 Brett Wilson <brettw@chromium.org>
+
+ Reviewed by Dave Hyatt.
+
+ https://bugs.webkit.org/show_bug.cgi?id=22177
+
+ Add a callback on ChromeClient that the state of form elements on
+ the page has changed. This is to allow clients implementing session
+ saving to know when the current state is dirty.
+
+ * WebCoreSupport/ChromeClientGtk.h:
+ (WebKit::ChromeClient::formStateDidChange):
+
+2008-12-07 Holger Hans Peter Freyther <zecke@selfish.org>
+
+ Reviewed by Eric Seidel.
+
+ [Gtk+] Use glib's unit test facilities to test the WebKit/Gtk+ API
+
+ https://bugs.webkit.org/show_bug.cgi?id=22491
+
+ Add the skeleton to WebKit/gtk/tests and integrate that into the
+ buildsystem. Testing support was added in glib 2.16. For versions
+ using glib < 2.16 we compile an empty application.
+
+ * tests/main.c: Added. https://bugs.webkit.org/show_bug.cgi?id=21837
+ will be the first consumer.
+ (main):
+
+2008-12-06 Simon Fraser <simon.fraser@apple.com>
+
+ Reviewed by Dave Hyatt
+
+ https://bugs.webkit.org/show_bug.cgi?id=15671
+
+ Renderer::caretRect() is now localCaretRect(), which needs
+ converting to absolute coordinates (taking transforms into account).
+
+ * webkit/webkitwebview.cpp:
+
+2008-12-01 Xan Lopez <xan@gnome.org>
+
+ Reviewed by Holger Freyther.
+
+ http://bugs.webkit.org/show_bug.cgi?id=22553
+ Remove unneeded GObject casts.
+
+ Remove unneeded casts to GObject in functions that take a gpointer
+ argument.
+
+ * WebCoreSupport/ChromeClientGtk.cpp:
+ (WebKit::ChromeClient::setWindowRect):
+ (WebKit::ChromeClient::createWindow):
+ (WebKit::ChromeClient::setToolbarsVisible):
+ (WebKit::ChromeClient::toolbarsVisible):
+ (WebKit::ChromeClient::setStatusbarVisible):
+ (WebKit::ChromeClient::statusbarVisible):
+ (WebKit::ChromeClient::setScrollbarsVisible):
+ (WebKit::ChromeClient::scrollbarsVisible):
+ (WebKit::ChromeClient::setMenubarVisible):
+ (WebKit::ChromeClient::menubarVisible):
+ (WebKit::ChromeClient::setToolTip):
+ * WebCoreSupport/InspectorClientGtk.cpp:
+ (WebKit::InspectorClient::createPage):
+ * webkit/webkitwebframe.cpp:
+ * webkit/webkitwebview.cpp:
+ * webkit/webkitwebwindowfeatures.cpp:
+ (_WebKitWebWindowFeaturesPrivate::webkit_web_window_features_new_from_core_features):
+
+2008-11-29 Christian Dywan <christian@twotoasts.de>
+
+ Reviewed by Holger Freyther.
+
+ http://bugs.webkit.org/show_bug.cgi?id=17122
+ [GTK] Bad font default settings
+
+ Implement a property "enforce-96-dpi" in WebKitWebSettings
+ that can be enabled to force the view to assume 96 DPI.
+
+ * webkit/webkitwebsettings.cpp:
+ (_WebKitWebSettingsPrivate::):
+ (_WebKitWebSettingsPrivate::webkit_web_settings_class_init):
+ (_WebKitWebSettingsPrivate::webkit_web_settings_set_property):
+ (_WebKitWebSettingsPrivate::webkit_web_settings_get_property):
+ * webkit/webkitwebview.cpp:
+
+2008-11-28 Holger Hans Peter Freyther <zecke@selfish.org>
+
+ Reviewed by Nikolas Zimmermann.
+
+ Simplify the code. There is no reason to have code like
+ if (true) return false; which is using temporary variables.
+
+ * webkit/webkitwebview.cpp:
+
+2008-11-28 Holger Hans Peter Freyther <zecke@selfish.org>
+
+ Reviewed by Nikolas Zimmermann.
+
+ Remove bogus null checks. The WebKitWebView own's a WebCore::Page
+ which is owning a WebCore::ChromeClient. There is no way that a
+ WebCore::ChromeClient is still around when the WebKitWebView is gone.
+
+ m_webView can only be null when a ChromeClient gets constructed with
+ a null WebKitWebView which is not allowed.
+
+ * WebCoreSupport/ChromeClientGtk.cpp:
+ (WebKit::ChromeClient::ChromeClient):
+ (WebKit::ChromeClient::windowRect):
+ (WebKit::ChromeClient::setWindowRect):
+ (WebKit::ChromeClient::pageRect):
+ (WebKit::ChromeClient::focus):
+ (WebKit::ChromeClient::unfocus):
+ (WebKit::ChromeClient::show):
+ (WebKit::ChromeClient::setToolbarsVisible):
+ (WebKit::ChromeClient::toolbarsVisible):
+ (WebKit::ChromeClient::setStatusbarVisible):
+ (WebKit::ChromeClient::statusbarVisible):
+ (WebKit::ChromeClient::setScrollbarsVisible):
+ (WebKit::ChromeClient::setMenubarVisible):
+ (WebKit::ChromeClient::menubarVisible):
+ (WebKit::ChromeClient::canTakeFocus):
+ (WebKit::ChromeClient::repaint):
+ (WebKit::ChromeClient::scroll):
+ (WebKit::ChromeClient::platformWindow):
+
+2008-11-28 Gustavo Noronha Silva <gns@gnome.org>
+
+ Reviewed and slightly modified by Holger Freyther.
+
+ https://bugs.webkit.org/show_bug.cgi?id=19130
+
+ ChromeClient::createWindow and friends need to be implemented
+
+ Code from Gustavo Noronha and Marco Barisione
+ <marco.barisione@collabora.co.uk> in this change set.
+
+ Implemented all the ChromeClient interfaces needed to have new
+ window creation functioning and exposed to client code. We
+ implemented a mirror GObject to the WindowFeatures object provided
+ by WebCore.
+
+ * WebCoreSupport/ChromeClientGtk.cpp:
+ (WebKit::ChromeClient::windowRect):
+ (WebKit::ChromeClient::setWindowRect):
+ (WebKit::ChromeClient::unfocus):
+ (WebKit::ChromeClient::createWindow):
+ (WebKit::ChromeClient::show):
+ (WebKit::ChromeClient::setToolbarsVisible):
+ (WebKit::ChromeClient::toolbarsVisible):
+ (WebKit::ChromeClient::setStatusbarVisible):
+ (WebKit::ChromeClient::statusbarVisible):
+ (WebKit::ChromeClient::setScrollbarsVisible):
+ (WebKit::ChromeClient::scrollbarsVisible):
+ (WebKit::ChromeClient::setMenubarVisible):
+ (WebKit::ChromeClient::menubarVisible):
+ (WebKit::ChromeClient::setResizable):
+ * WebCoreSupport/FrameLoaderClientGtk.cpp:
+ (WebKit::FrameLoaderClient::dispatchDecidePolicyForNewWindowAction):
+ (WebKit::FrameLoaderClient::dispatchShow):
+ (WebKit::FrameLoaderClient::dispatchCreatePage):
+ * webkit/webkit.h:
+ * webkit/webkitdefines.h:
+ * webkit/webkitprivate.h:
+ * webkit/webkitwebview.cpp:
+ * webkit/webkitwebview.h:
+ * webkit/webkitwebwindowfeatures.cpp: Added.
+ (_WebKitWebWindowFeaturesPrivate::webkit_web_window_features_class_init):
+ (_WebKitWebWindowFeaturesPrivate::webkit_web_window_features_init):
+ (_WebKitWebWindowFeaturesPrivate::webkit_web_window_features_finalize):
+ (_WebKitWebWindowFeaturesPrivate::webkit_web_window_features_set_property):
+ (_WebKitWebWindowFeaturesPrivate::webkit_web_window_features_get_property):
+ (_WebKitWebWindowFeaturesPrivate::webkit_web_window_features_new):
+ (_WebKitWebWindowFeaturesPrivate::webkit_web_window_features_new_from_core_features):
+ (_WebKitWebWindowFeaturesPrivate::webkit_web_window_features_equal):
+ * webkit/webkitwebwindowfeatures.h: Added.
+
+2008-11-24 Darin Fisher <darin@chromium.org>
+
+ Fix bustage.
+
+ http://bugs.webkit.org/show_bug.cgi?id=15643
+
+ * WebCoreSupport/EditorClientGtk.cpp:
+ (WebKit::EditorClient::isSelectTrailingWhitespaceEnabled):
+ * WebCoreSupport/EditorClientGtk.h:
+
+2008-11-24 Darin Adler <darin@apple.com>
+
+ Reviewed by Dan Bernstein.
+
+ - https://bugs.webkit.org/show_bug.cgi?id=22470
+ remove unneeded URL argument from FrameLoaderClient::updateGlobalHistory
+
+ * WebCoreSupport/FrameLoaderClientGtk.cpp:
+ (WebKit::FrameLoaderClient::updateGlobalHistory): Remove argument.
+ * WebCoreSupport/FrameLoaderClientGtk.h: Ditto.
+
+2008-11-24 Christian Dywan <christian@twotoasts.de>
+
+ Reviewed by Holger Freyther.
+
+ http://bugs.webkit.org/show_bug.cgi?id=17122
+ [GTK] Bad font default settings
+
+ * webkit/webkitwebsettings.cpp:
+ (_WebKitWebSettingsPrivate::webkit_web_settings_class_init):
+ Use default font size 12 instead of 10
+
+2008-11-24 Zan Dobersek <zandobersek@gmail.com>
+
+ Reviewed by Holger Freyther.
+
+ https://bugs.webkit.org/show_bug.cgi?id=22039
+
+ Implement a semi-private function for adding a directory to
+ PluginDatabase's paths.
+
+ * webkit/webkitprivate.h:
+ * webkit/webkitwebsettings.cpp:
+ (_WebKitWebSettingsPrivate::webkit_web_settings_add_extra_plugin_directory):
+
+2008-11-23 Holger Hans Peter Freyther <zecke@selfish.org>
+
+ Rubber-stamped by Sam Weinig.
+
+ Add gtk-doc configuration/source for the WebKit/Gtk+ Reference Manual
+
+ These files will be used by gtk-doc to generate the documentation. They
+ contain information how to group the symbols of our API, which objects
+ to inspect during the generation of the manual and how to display the
+ manual.
+
+ * docs/webkitgtk-docs.sgml: Added.
+ * docs/webkitgtk-overrides.txt: Added.
+ * docs/webkitgtk-sections.txt: Added.
+ * docs/webkitgtk.types: Added.
+
+2008-11-23 Holger Hans Peter Freyther <zecke@selfish.org>
+
+ Reviewed by Sam Weinig.
+
+ Make gtk-doc happy with the existing API documentation
+
+ - Mark the *Private pointers in the struct private
+ - Use Returns: where gtk-doc wants us to
+ - Fix the parameters to make gtk-doc happy
+ - Fix signal references
+
+ * webkit/webkitnetworkrequest.h:
+ * webkit/webkitwebbackforwardlist.cpp:
+ * webkit/webkitwebbackforwardlist.h:
+ * webkit/webkitwebframe.h:
+ * webkit/webkitwebhistoryitem.cpp:
+ * webkit/webkitwebinspector.cpp:
+ (_WebKitWebInspectorPrivate::webkit_web_inspector_class_init):
+ * webkit/webkitwebview.cpp:
+ * webkit/webkitwebview.h:
+
+2008-11-19 Darin Fisher <darin@chromium.org>
+
+ Bustage fix.
+
+ https://bugs.webkit.org/show_bug.cgi?id=22373
+ Ports busted by addition of ScriptValue.{h,cpp}
+
+ * webkit/webkitwebview.cpp:
+
+2008-11-18 Holger Hans Peter Freyther <zecke@selfish.org>
+
+ Reviewed by Simon Hausmann.
+
+ Attempt to share transitionToCommittedForNewPage of FrameLoaderClient with the different ports
+
+ After Hyatt's work on Widget and ScrollView there is little difference
+ between the implementation of Qt, Gtk+ and Win. In fact any kind of
+ difference is mostly a bug. Alp has fixed two of such errors for the Gtk+
+ port and the Qt port has at least one of them left.
+
+ The only difference between the implementations is in getting the the
+ IntSize for the new FrameView, the background color to be applied and
+ eventually some post processing.
+
+ Unify the implementations by providing a static helper function that
+ takes a Frame, IntSize, color and transparency bit and calling it from
+ the Gtk+, the Qt and the Windows port.
+
+ * WebCoreSupport/FrameLoaderClientGtk.cpp:
+ (WebKit::FrameLoaderClient::transitionToCommittedForNewPage):
+
+2008-11-16 Christian Dywan <christian@twoasts.de>
+
+ Reviewed by Holger Freyther.
+
+ https://bugs.webkit.org/show_bug.cgi?id=22207
+ [Gtk] Font sizes are not handled properly when updated at runtime
+
+ * webkit/webkitwebview.cpp: Move the DPI/ conversion into a
+ helper function and apply the logic in the notification callback.
+
+2008-11-06 Alp Toker <alp@nuanti.com>
+
+ Reviewed by Darin Adler.
+
+ https://bugs.webkit.org/show_bug.cgi?id=22047
+ GTK: Add support for multiple file selection in the file upload control
+
+ Implemented with GtkFileChooser.
+
+ * WebCoreSupport/ChromeClientGtk.cpp:
+ (WebKit::ChromeClient::runOpenPanel):
+
2008-11-03 Cameron Zwarich <zwarich@apple.com>
Rubber-stamped by Maciej Stachowiak.
diff --git a/WebKit/gtk/WebCoreSupport/ChromeClientGtk.cpp b/WebKit/gtk/WebCoreSupport/ChromeClientGtk.cpp
index 18ca5b3..3557a3f 100644
--- a/WebKit/gtk/WebCoreSupport/ChromeClientGtk.cpp
+++ b/WebKit/gtk/WebCoreSupport/ChromeClientGtk.cpp
@@ -1,7 +1,9 @@
/*
- * Copyright (C) 2007 Holger Hans Peter Freyther
+ * Copyright (C) 2007, 2008 Holger Hans Peter Freyther
* Copyright (C) 2007, 2008 Christian Dywan <christian@imendio.com>
* Copyright (C) 2008 Nuanti Ltd.
+ * Copyright (C) 2008 Alp Toker <alp@atoker.com>
+ * Copyright (C) 2008 Gustavo Noronha Silva <gns@gnome.org>
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
@@ -24,12 +26,14 @@
#include "FileSystem.h"
#include "FileChooser.h"
#include "FloatRect.h"
+#include "FrameLoadRequest.h"
#include "IntRect.h"
#include "PlatformString.h"
#include "CString.h"
#include "HitTestResult.h"
#include "KURL.h"
#include "webkitwebview.h"
+#include "webkitnetworkrequest.h"
#include "webkitprivate.h"
#include "NotImplemented.h"
#include "WindowFeatures.h"
@@ -48,6 +52,7 @@ namespace WebKit {
ChromeClient::ChromeClient(WebKitWebView* webView)
: m_webView(webView)
{
+ ASSERT(m_webView);
}
void ChromeClient::chromeDestroyed()
@@ -57,10 +62,8 @@ void ChromeClient::chromeDestroyed()
FloatRect ChromeClient::windowRect()
{
- if (!m_webView)
- return FloatRect();
GtkWidget* window = gtk_widget_get_toplevel(GTK_WIDGET(m_webView));
- if (window) {
+ if (GTK_WIDGET_TOPLEVEL(window)) {
gint left, top, width, height;
gtk_window_get_position(GTK_WINDOW(window), &left, &top);
gtk_window_get_size(GTK_WINDOW(window), &width, &height);
@@ -69,15 +72,21 @@ FloatRect ChromeClient::windowRect()
return FloatRect();
}
-void ChromeClient::setWindowRect(const FloatRect& r)
+void ChromeClient::setWindowRect(const FloatRect& rect)
{
- notImplemented();
+ IntRect intrect = IntRect(rect);
+ WebKitWebWindowFeatures* webWindowFeatures = webkit_web_view_get_window_features(m_webView);
+
+ g_object_set(webWindowFeatures,
+ "x", intrect.x(),
+ "y", intrect.y(),
+ "width", intrect.width(),
+ "height", intrect.height(),
+ NULL);
}
FloatRect ChromeClient::pageRect()
{
- if (!m_webView)
- return FloatRect();
GtkAllocation allocation = GTK_WIDGET(m_webView)->allocation;
return IntRect(allocation.x, allocation.y, allocation.width, allocation.height);
}
@@ -90,39 +99,38 @@ float ChromeClient::scaleFactor()
void ChromeClient::focus()
{
- if (!m_webView)
- return;
gtk_widget_grab_focus(GTK_WIDGET(m_webView));
}
void ChromeClient::unfocus()
{
- if (!m_webView)
- return;
GtkWidget* window = gtk_widget_get_toplevel(GTK_WIDGET(m_webView));
- if (window)
+ if (GTK_WIDGET_TOPLEVEL(window))
gtk_window_set_focus(GTK_WINDOW(window), NULL);
}
-Page* ChromeClient::createWindow(Frame*, const FrameLoadRequest&, const WindowFeatures& features)
+Page* ChromeClient::createWindow(Frame* frame, const FrameLoadRequest& frameLoadRequest, const WindowFeatures& coreFeatures)
{
- if (features.dialog) {
- notImplemented();
+ WebKitWebView* webView = 0;
+
+ g_signal_emit_by_name(m_webView, "create-web-view", kit(frame), &webView);
+
+ if (!webView)
return 0;
- } else {
- /* TODO: FrameLoadRequest is not used */
- WebKitWebView* webView = WEBKIT_WEB_VIEW_GET_CLASS(m_webView)->create_web_view(m_webView);
- if (!webView)
- return 0;
-
- WebKitWebViewPrivate* privateData = WEBKIT_WEB_VIEW_GET_PRIVATE(webView);
- return privateData->corePage;
- }
+
+ WebKitWebWindowFeatures* webWindowFeatures = webkit_web_window_features_new_from_core_features(coreFeatures);
+ g_object_set(webView, "window-features", webWindowFeatures, NULL);
+ g_object_unref(webWindowFeatures);
+
+ if (!frameLoadRequest.isEmpty())
+ webkit_web_view_open(webView, frameLoadRequest.resourceRequest().url().string().utf8().data());
+
+ return core(webView);
}
void ChromeClient::show()
{
- notImplemented();
+ webkit_web_view_notify_ready(m_webView);
}
bool ChromeClient::canRunModal()
@@ -136,52 +144,72 @@ void ChromeClient::runModal()
notImplemented();
}
-void ChromeClient::setToolbarsVisible(bool)
+void ChromeClient::setToolbarsVisible(bool visible)
{
- notImplemented();
+ WebKitWebWindowFeatures* webWindowFeatures = webkit_web_view_get_window_features(m_webView);
+
+ g_object_set(webWindowFeatures, "toolbar-visible", visible, NULL);
}
bool ChromeClient::toolbarsVisible()
{
- notImplemented();
- return false;
+ WebKitWebWindowFeatures* webWindowFeatures = webkit_web_view_get_window_features(m_webView);
+ gboolean visible;
+
+ g_object_get(webWindowFeatures, "toolbar-visible", &visible, NULL);
+ return visible;
}
-void ChromeClient::setStatusbarVisible(bool)
+void ChromeClient::setStatusbarVisible(bool visible)
{
- notImplemented();
+ WebKitWebWindowFeatures* webWindowFeatures = webkit_web_view_get_window_features(m_webView);
+
+ g_object_set(webWindowFeatures, "statusbar-visible", visible, NULL);
}
bool ChromeClient::statusbarVisible()
{
- notImplemented();
- return false;
+ WebKitWebWindowFeatures* webWindowFeatures = webkit_web_view_get_window_features(m_webView);
+ gboolean visible;
+
+ g_object_get(webWindowFeatures, "statusbar-visible", &visible, NULL);
+ return visible;
}
-void ChromeClient::setScrollbarsVisible(bool)
+void ChromeClient::setScrollbarsVisible(bool visible)
{
- notImplemented();
+ WebKitWebWindowFeatures* webWindowFeatures = webkit_web_view_get_window_features(m_webView);
+
+ g_object_set(webWindowFeatures, "scrollbar-visible", visible, NULL);
}
bool ChromeClient::scrollbarsVisible() {
- notImplemented();
- return false;
+ WebKitWebWindowFeatures* webWindowFeatures = webkit_web_view_get_window_features(m_webView);
+ gboolean visible;
+
+ g_object_get(webWindowFeatures, "scrollbar-visible", &visible, NULL);
+ return visible;
}
-void ChromeClient::setMenubarVisible(bool)
+void ChromeClient::setMenubarVisible(bool visible)
{
- notImplemented();
+ WebKitWebWindowFeatures* webWindowFeatures = webkit_web_view_get_window_features(m_webView);
+
+ g_object_set(webWindowFeatures, "menubar-visible", visible, NULL);
}
bool ChromeClient::menubarVisible()
{
- notImplemented();
- return false;
+ WebKitWebWindowFeatures* webWindowFeatures = webkit_web_view_get_window_features(m_webView);
+ gboolean visible;
+
+ g_object_get(webWindowFeatures, "menubar-visible", &visible, NULL);
+ return visible;
}
void ChromeClient::setResizable(bool)
{
- notImplemented();
+ // Ignored for now
}
void ChromeClient::closeWindowSoon()
@@ -191,8 +219,6 @@ void ChromeClient::closeWindowSoon()
bool ChromeClient::canTakeFocus(FocusDirection)
{
- if (!m_webView)
- return false;
return GTK_WIDGET_CAN_FOCUS(m_webView);
}
@@ -269,9 +295,6 @@ IntRect ChromeClient::windowResizerRect() const
void ChromeClient::repaint(const IntRect& windowRect, bool contentChanged, bool immediate, bool repaintContentOnly)
{
- if (!m_webView)
- return;
-
GdkRectangle rect = windowRect;
GdkWindow* window = GTK_WIDGET(m_webView)->window;
@@ -286,9 +309,6 @@ void ChromeClient::repaint(const IntRect& windowRect, bool contentChanged, bool
void ChromeClient::scroll(const IntSize& delta, const IntRect& rectToScroll, const IntRect& clipRect)
{
- if (!m_webView)
- return;
-
GdkWindow* window = GTK_WIDGET(m_webView)->window;
if (!window)
return;
@@ -328,7 +348,12 @@ IntPoint ChromeClient::screenToWindow(const IntPoint& point) const
PlatformWidget ChromeClient::platformWindow() const
{
- return m_webView ? GTK_WIDGET(m_webView) : 0;
+ return GTK_WIDGET(m_webView);
+}
+
+void ChromeClient::contentsSizeChanged(Frame*, const IntSize&) const
+{
+ notImplemented();
}
void ChromeClient::mouseDidMoveOverElement(const HitTestResult& hit, unsigned modifierFlags)
@@ -353,7 +378,7 @@ void ChromeClient::setToolTip(const String& toolTip)
{
#if GTK_CHECK_VERSION(2,12,0)
if (toolTip.isEmpty())
- g_object_set(G_OBJECT(m_webView), "has-tooltip", FALSE, NULL);
+ g_object_set(m_webView, "has-tooltip", FALSE, NULL);
else
gtk_widget_set_tooltip_text(GTK_WIDGET(m_webView), toolTip.utf8().data());
#else
@@ -381,9 +406,7 @@ void ChromeClient::exceededDatabaseQuota(Frame* frame, const String&)
void ChromeClient::runOpenPanel(Frame*, PassRefPtr<FileChooser> prpFileChooser)
{
- // FIXME: Support multiple files.
-
- RefPtr<FileChooser> fileChooser = prpFileChooser;
+ RefPtr<FileChooser> chooser = prpFileChooser;
GtkWidget* dialog = gtk_file_chooser_dialog_new(_("Upload File"),
GTK_WINDOW(gtk_widget_get_toplevel(GTK_WIDGET(platformWindow()))),
@@ -392,11 +415,26 @@ void ChromeClient::runOpenPanel(Frame*, PassRefPtr<FileChooser> prpFileChooser)
GTK_STOCK_OPEN, GTK_RESPONSE_ACCEPT,
NULL);
+ gtk_file_chooser_set_select_multiple(GTK_FILE_CHOOSER(dialog), chooser->allowsMultipleFiles());
+
if (gtk_dialog_run(GTK_DIALOG(dialog)) == GTK_RESPONSE_ACCEPT) {
- gchar* filename = gtk_file_chooser_get_filename(GTK_FILE_CHOOSER(dialog));
- if (filename)
- fileChooser->chooseFile(filenameToString(filename));
- g_free(filename);
+ if (gtk_file_chooser_get_select_multiple(GTK_FILE_CHOOSER(dialog))) {
+ GSList* filenames = gtk_file_chooser_get_filenames(GTK_FILE_CHOOSER(dialog));
+ Vector<String> names;
+ for (GSList* item = filenames ; item ; item = item->next) {
+ if (!item->data)
+ continue;
+ names.append(filenameToString(static_cast<char*>(item->data)));
+ g_free(item->data);
+ }
+ g_slist_free(filenames);
+ chooser->chooseFiles(names);
+ } else {
+ gchar* filename = gtk_file_chooser_get_filename(GTK_FILE_CHOOSER(dialog));
+ if (filename)
+ chooser->chooseFile(filenameToString(filename));
+ g_free(filename);
+ }
}
gtk_widget_destroy(dialog);
}
diff --git a/WebKit/gtk/WebCoreSupport/ChromeClientGtk.h b/WebKit/gtk/WebCoreSupport/ChromeClientGtk.h
index 04b3a26..299d023 100644
--- a/WebKit/gtk/WebCoreSupport/ChromeClientGtk.h
+++ b/WebKit/gtk/WebCoreSupport/ChromeClientGtk.h
@@ -89,6 +89,7 @@ namespace WebKit {
virtual WebCore::IntPoint screenToWindow(const WebCore::IntPoint&) const;
virtual WebCore::IntRect windowToScreen(const WebCore::IntRect&) const;
virtual PlatformWidget platformWindow() const;
+ virtual void contentsSizeChanged(WebCore::Frame*, const WebCore::IntSize&) const;
virtual void mouseDidMoveOverElement(const WebCore::HitTestResult&, unsigned modifierFlags);
@@ -100,6 +101,8 @@ namespace WebKit {
virtual void runOpenPanel(WebCore::Frame*, PassRefPtr<WebCore::FileChooser>);
+ virtual void formStateDidChange(const WebCore::Node*) { }
+
private:
WebKitWebView* m_webView;
WebCore::KURL m_hoveredLinkURL;
diff --git a/WebKit/gtk/WebCoreSupport/EditorClientGtk.cpp b/WebKit/gtk/WebCoreSupport/EditorClientGtk.cpp
index 62f1f27..e09178e 100644
--- a/WebKit/gtk/WebCoreSupport/EditorClientGtk.cpp
+++ b/WebKit/gtk/WebCoreSupport/EditorClientGtk.cpp
@@ -301,6 +301,12 @@ bool EditorClient::smartInsertDeleteEnabled()
return false;
}
+bool EditorClient::isSelectTrailingWhitespaceEnabled()
+{
+ notImplemented();
+ return false;
+}
+
void EditorClient::toggleContinuousSpellChecking()
{
notImplemented();
diff --git a/WebKit/gtk/WebCoreSupport/EditorClientGtk.h b/WebKit/gtk/WebCoreSupport/EditorClientGtk.h
index de31842..14514f5 100644
--- a/WebKit/gtk/WebCoreSupport/EditorClientGtk.h
+++ b/WebKit/gtk/WebCoreSupport/EditorClientGtk.h
@@ -53,6 +53,7 @@ namespace WebKit {
virtual bool shouldDeleteRange(WebCore::Range*);
virtual bool shouldShowDeleteInterface(WebCore::HTMLElement*);
virtual bool smartInsertDeleteEnabled();
+ virtual bool isSelectTrailingWhitespaceEnabled();
virtual bool isContinuousSpellCheckingEnabled();
virtual void toggleContinuousSpellChecking();
virtual bool isGrammarCheckingEnabled();
diff --git a/WebKit/gtk/WebCoreSupport/FrameLoaderClientGtk.cpp b/WebKit/gtk/WebCoreSupport/FrameLoaderClientGtk.cpp
index 8cea58f..55d5024 100644
--- a/WebKit/gtk/WebCoreSupport/FrameLoaderClientGtk.cpp
+++ b/WebKit/gtk/WebCoreSupport/FrameLoaderClientGtk.cpp
@@ -22,7 +22,9 @@
#include "config.h"
#include "FrameLoaderClientGtk.h"
+#include "Color.h"
#include "DocumentLoader.h"
+#include "FormState.h"
#include "FrameLoader.h"
#include "FrameView.h"
#include "FrameTree.h"
@@ -33,6 +35,7 @@
#include "JSDOMWindow.h"
#include "Language.h"
#include "MIMETypeRegistry.h"
+#include "MouseEvent.h"
#include "NotImplemented.h"
#include "PlatformString.h"
#include "PluginDatabase.h"
@@ -43,7 +46,10 @@
#include "JSDOMBinding.h"
#include "ScriptController.h"
#include "webkitwebview.h"
+#include "webkitnetworkrequest.h"
#include "webkitwebframe.h"
+#include "webkitwebnavigationaction.h"
+#include "webkitwebpolicydecision.h"
#include "webkitprivate.h"
#include <JavaScriptCore/APICast.h>
@@ -59,12 +65,19 @@ namespace WebKit {
FrameLoaderClient::FrameLoaderClient(WebKitWebFrame* frame)
: m_frame(frame)
, m_userAgent("")
+ , m_policyDecision(0)
, m_pluginView(0)
, m_hasSentResponseToPlugin(false)
{
ASSERT(m_frame);
}
+FrameLoaderClient::~FrameLoaderClient()
+{
+ if (m_policyDecision)
+ g_object_unref(m_policyDecision);
+}
+
static String agentPlatform()
{
#ifdef GDK_WINDOWING_X11
@@ -188,6 +201,13 @@ void FrameLoaderClient::committedLoad(DocumentLoader* loader, const char* data,
}
}
+bool
+FrameLoaderClient::shouldUseCredentialStorage(DocumentLoader*, unsigned long identifier)
+{
+ notImplemented();
+ return false;
+}
+
void FrameLoaderClient::dispatchDidReceiveAuthenticationChallenge(DocumentLoader*, unsigned long identifier, const AuthenticationChallenge&)
{
notImplemented();
@@ -231,6 +251,7 @@ void FrameLoaderClient::postProgressFinishedNotification()
void FrameLoaderClient::frameLoaderDestroyed()
{
+ webkit_web_frame_core_frame_gone(m_frame);
g_object_unref(m_frame);
m_frame = 0;
delete this;
@@ -241,23 +262,42 @@ void FrameLoaderClient::dispatchDidReceiveResponse(DocumentLoader*, unsigned lon
m_response = response;
}
-void FrameLoaderClient::dispatchDecidePolicyForMIMEType(FramePolicyFunction policyFunction, const String&, const ResourceRequest&)
+void FrameLoaderClient::dispatchDecidePolicyForMIMEType(FramePolicyFunction policyFunction, const String& mimeType, const ResourceRequest& resourceRequest)
{
- // FIXME: we need to call directly here (comment copied from Qt version)
ASSERT(policyFunction);
if (!policyFunction)
return;
- (core(m_frame)->loader()->*policyFunction)(PolicyUse);
+
+ WebKitWebView* page = getViewFromFrame(m_frame);
+ WebKitNetworkRequest* request = webkit_network_request_new(resourceRequest.url().string().utf8().data());
+
+ WebKitWebPolicyDecision* policyDecision = webkit_web_policy_decision_new(m_frame, policyFunction);
+ if (m_policyDecision)
+ g_object_unref(m_policyDecision);
+ m_policyDecision = policyDecision;
+
+ gboolean isHandled = false;
+ g_signal_emit_by_name(page, "mime-type-policy-decision-requested", m_frame, request, mimeType.utf8().data(), policyDecision, &isHandled);
+
+ g_object_unref(request);
+
+ if (isHandled)
+ return;
+
+ if (canShowMIMEType(mimeType))
+ webkit_web_policy_decision_use (policyDecision);
+ else
+ webkit_web_policy_decision_download (policyDecision);
}
-void FrameLoaderClient::dispatchDecidePolicyForNewWindowAction(FramePolicyFunction policyFunction, const NavigationAction&, const ResourceRequest&, PassRefPtr<FormState>, const String&)
+void FrameLoaderClient::dispatchDecidePolicyForNewWindowAction(FramePolicyFunction policyFunction, const NavigationAction& action, const ResourceRequest& resourceRequest, PassRefPtr<FormState>, const String& s)
{
ASSERT(policyFunction);
if (!policyFunction)
return;
// FIXME: I think Qt version marshals this to another thread so when we
// have multi-threaded download, we might need to do the same
- (core(m_frame)->loader()->*policyFunction)(PolicyIgnore);
+ (core(m_frame)->loader()->*policyFunction)(PolicyUse);
}
void FrameLoaderClient::dispatchDecidePolicyForNavigationAction(FramePolicyFunction policyFunction, const NavigationAction& action, const ResourceRequest& resourceRequest, PassRefPtr<FormState>)
@@ -269,17 +309,65 @@ void FrameLoaderClient::dispatchDecidePolicyForNavigationAction(FramePolicyFunct
WebKitWebView* webView = getViewFromFrame(m_frame);
WebKitNetworkRequest* request = webkit_network_request_new(resourceRequest.url().string().utf8().data());
WebKitNavigationResponse response;
-
+ /*
+ * We still support the deprecated navigation-requested signal, if the
+ * application doesn't ignore the navigation then the new signal is
+ * emitted.
+ * navigation-policy-decision-requested must be emitted after
+ * navigation-requested as the policy decision can be async.
+ */
g_signal_emit_by_name(webView, "navigation-requested", m_frame, request, &response);
- g_object_unref(request);
-
if (response == WEBKIT_NAVIGATION_RESPONSE_IGNORE) {
(core(m_frame)->loader()->*policyFunction)(PolicyIgnore);
+ g_object_unref(request);
return;
}
- (core(m_frame)->loader()->*policyFunction)(PolicyUse);
+ WebKitWebPolicyDecision* policyDecision = webkit_web_policy_decision_new(m_frame, policyFunction);
+ if (m_policyDecision)
+ g_object_unref(m_policyDecision);
+ m_policyDecision = policyDecision;
+
+ gint button = -1;
+ gint modifierFlags = 0;
+
+ const Event* event = action.event();
+ if (event && event->isMouseEvent()) {
+ const MouseEvent* mouseEvent = static_cast<const MouseEvent*>(event);
+ // DOM button values are 0, 1 and 2 for left, middle and right buttons.
+ // GTK+ uses 1, 2 and 3, so let's add 1 to remain consistent.
+ button = mouseEvent->button() + 1;
+ }
+
+ UIEventWithKeyState* keyStateEvent = findEventWithKeyState(const_cast<Event*>(event));
+ if (keyStateEvent) {
+ if (keyStateEvent->shiftKey())
+ modifierFlags |= GDK_SHIFT_MASK;
+ if (keyStateEvent->ctrlKey())
+ modifierFlags |= GDK_CONTROL_MASK;
+ if (keyStateEvent->altKey())
+ modifierFlags |= GDK_MOD1_MASK;
+ if (keyStateEvent->metaKey())
+ modifierFlags |= GDK_MOD2_MASK;
+ }
+
+ GObject* navigationAction = G_OBJECT(g_object_new(WEBKIT_TYPE_WEB_NAVIGATION_ACTION,
+ "reason", kit(action.type()),
+ "original-uri", action.url().string().utf8().data(),
+ "button", button,
+ "modifier-state", modifierFlags,
+ NULL));
+
+ gboolean isHandled = false;
+ g_signal_emit_by_name(webView, "navigation-policy-decision-requested", m_frame, request, navigationAction, policyDecision, &isHandled);
+
+ g_object_unref(navigationAction);
+ g_object_unref(request);
+
+ // FIXME Implement default behavior when we can query the backend what protocols it supports
+ if (!isHandled)
+ webkit_web_policy_decision_use(m_policyDecision);
}
Widget* FrameLoaderClient::createPlugin(const IntSize& pluginSize, Element* element, const KURL& url, const Vector<String>& paramNames, const Vector<String>& paramValues, const String& mimeType, bool loadManually)
@@ -298,14 +386,14 @@ PassRefPtr<Frame> FrameLoaderClient::createFrame(const KURL& url, const String&
Frame* coreFrame = core(webFrame());
ASSERT(core(getViewFromFrame(webFrame())) == coreFrame->page());
- WebKitWebFrame* gtkFrame = WEBKIT_WEB_FRAME(webkit_web_frame_init_with_web_view(getViewFromFrame(webFrame()), ownerElement));
- RefPtr<Frame> childFrame(adoptRef(core(gtkFrame)));
+
+ RefPtr<Frame> childFrame = webkit_web_frame_init_with_web_view(getViewFromFrame(webFrame()), ownerElement);
coreFrame->tree()->appendChild(childFrame);
childFrame->tree()->setName(name);
childFrame->init();
- childFrame->loader()->loadURL(url, referrer, String(), FrameLoadTypeRedirectWithLockedHistory, 0, 0);
+ childFrame->loader()->loadURL(url, referrer, String(), FrameLoadTypeRedirectWithLockedBackForwardList, 0, 0);
// The frame's onload handler may have removed it from the document.
if (!childFrame->tree()->parent())
@@ -459,11 +547,6 @@ void FrameLoaderClient::detachedFromParent3()
notImplemented();
}
-void FrameLoaderClient::loadedFromCachedPage()
-{
- notImplemented();
-}
-
void FrameLoaderClient::dispatchDidHandleOnloadEvents()
{
notImplemented();
@@ -540,14 +623,22 @@ void FrameLoaderClient::dispatchDidFirstLayout()
notImplemented();
}
-void FrameLoaderClient::dispatchShow()
+void FrameLoaderClient::dispatchDidFirstVisuallyNonEmptyLayout()
{
notImplemented();
}
+void FrameLoaderClient::dispatchShow()
+{
+ WebKitWebView* webView = getViewFromFrame(m_frame);
+ webkit_web_view_notify_ready(webView);
+}
+
void FrameLoaderClient::cancelPolicyCheck()
{
- notImplemented();
+ //FIXME Add support for more than one policy decision at once
+ if (m_policyDecision)
+ webkit_web_policy_decision_cancel(m_policyDecision);
}
void FrameLoaderClient::dispatchDidLoadMainResource(DocumentLoader*)
@@ -576,10 +667,10 @@ bool FrameLoaderClient::canHandleRequest(const ResourceRequest&) const
return true;
}
-bool FrameLoaderClient::canShowMIMEType(const String&) const
+bool FrameLoaderClient::canShowMIMEType(const String& type) const
{
- notImplemented();
- return true;
+ return MIMETypeRegistry::isSupportedImageMIMEType(type) || MIMETypeRegistry::isSupportedNonImageMIMEType(type) ||
+ PluginDatabase::installedPlugins()->isMIMETypeRegistered(type);
}
bool FrameLoaderClient::representationExistsForURLScheme(const String&) const
@@ -715,8 +806,16 @@ bool FrameLoaderClient::canCachePage() const
Frame* FrameLoaderClient::dispatchCreatePage()
{
- notImplemented();
- return 0;
+ WebKitWebView* webView = getViewFromFrame(m_frame);
+ WebKitWebView* newWebView = 0;
+
+ g_signal_emit_by_name(webView, "create-web-view", m_frame, &newWebView);
+
+ if (!newWebView)
+ return 0;
+
+ WebKitWebViewPrivate* privateData = WEBKIT_WEB_VIEW_GET_PRIVATE(newWebView);
+ return core(privateData->mainFrame);
}
void FrameLoaderClient::dispatchUnableToImplementPolicy(const ResourceError&)
@@ -738,57 +837,42 @@ void FrameLoaderClient::startDownload(const ResourceRequest&)
notImplemented();
}
-void FrameLoaderClient::updateGlobalHistory(const KURL&)
+void FrameLoaderClient::updateGlobalHistory()
{
notImplemented();
}
-void FrameLoaderClient::savePlatformDataToCachedPage(CachedPage*)
+void FrameLoaderClient::updateGlobalHistoryForRedirectWithoutHistoryItem()
{
+ notImplemented();
}
-void FrameLoaderClient::transitionToCommittedFromCachedPage(CachedPage*)
+void FrameLoaderClient::savePlatformDataToCachedFrame(CachedFrame*)
+{
+}
+
+void FrameLoaderClient::transitionToCommittedFromCachedFrame(CachedFrame*)
{
}
void FrameLoaderClient::transitionToCommittedForNewPage()
{
+ WebKitWebView* containingWindow = getViewFromFrame(m_frame);
+ IntSize size = IntSize(GTK_WIDGET(containingWindow)->allocation.width,
+ GTK_WIDGET(containingWindow)->allocation.height);
+ bool transparent = webkit_web_view_get_transparent(containingWindow);
+ Color backgroundColor = transparent ? WebCore::Color::transparent : WebCore::Color::white;
Frame* frame = core(m_frame);
ASSERT(frame);
- Page* page = frame->page();
- ASSERT(page);
+ WebCore::FrameLoaderClient::transitionToCommittedForNewPage(frame, size, backgroundColor, transparent, IntSize(), false);
- WebKitWebView* containingWindow = getViewFromFrame(m_frame);
- bool isMainFrame = frame == page->mainFrame();
-
- if (isMainFrame && frame->view())
- frame->view()->setParentVisible(false);
-
- frame->setView(0);
-
- FrameView* frameView;
- if (isMainFrame) {
- IntSize size = IntSize(GTK_WIDGET(containingWindow)->allocation.width,
- GTK_WIDGET(containingWindow)->allocation.height);
- frameView = new FrameView(frame, size);
- WebKitWebViewPrivate* priv = WEBKIT_WEB_VIEW_GET_PRIVATE(containingWindow);
- frameView->setGtkAdjustments(priv->horizontalAdjustment, priv->verticalAdjustment);
- } else
- frameView = new FrameView(frame);
-
- frame->setView(frameView);
- // FrameViews are created with a ref count of 1. Release this ref since we've assigned it to frame.
- frameView->deref();
-
- if (isMainFrame)
- frameView->setParentVisible(true);
-
- if (frame->ownerRenderer())
- frame->ownerRenderer()->setWidget(frameView);
+ // We need to do further manipulation on the FrameView if it was the mainFrame
+ if (frame != frame->page()->mainFrame())
+ return;
- if (HTMLFrameOwnerElement* owner = frame->ownerElement())
- frame->view()->setCanHaveScrollbars(owner->scrollingMode() != ScrollbarAlwaysOff);
+ WebKitWebViewPrivate* priv = WEBKIT_WEB_VIEW_GET_PRIVATE(containingWindow);
+ frame->view()->setGtkAdjustments(priv->horizontalAdjustment, priv->verticalAdjustment);
}
}
diff --git a/WebKit/gtk/WebCoreSupport/FrameLoaderClientGtk.h b/WebKit/gtk/WebCoreSupport/FrameLoaderClientGtk.h
index 8f63b53..82286e8 100644
--- a/WebKit/gtk/WebCoreSupport/FrameLoaderClientGtk.h
+++ b/WebKit/gtk/WebCoreSupport/FrameLoaderClientGtk.h
@@ -33,6 +33,7 @@
#include "FrameLoaderClient.h"
#include "ResourceResponse.h"
#include "PluginView.h"
+#include "webkitwebpolicydecision.h"
typedef struct _WebKitWebFrame WebKitWebFrame;
@@ -41,7 +42,7 @@ namespace WebKit {
class FrameLoaderClient : public WebCore::FrameLoaderClient {
public:
FrameLoaderClient(WebKitWebFrame*);
- virtual ~FrameLoaderClient() { }
+ virtual ~FrameLoaderClient();
virtual void frameLoaderDestroyed();
WebKitWebFrame* webFrame() const { return m_frame; }
@@ -57,11 +58,10 @@ namespace WebKit {
virtual void detachedFromParent2();
virtual void detachedFromParent3();
- virtual void loadedFromCachedPage();
-
virtual void assignIdentifierToInitialRequest(unsigned long identifier, WebCore::DocumentLoader*, const WebCore::ResourceRequest&);
virtual void dispatchWillSendRequest(WebCore::DocumentLoader*, unsigned long identifier, WebCore::ResourceRequest&, const WebCore::ResourceResponse& redirectResponse);
+ virtual bool shouldUseCredentialStorage(WebCore::DocumentLoader*, unsigned long identifier);
virtual void dispatchDidReceiveAuthenticationChallenge(WebCore::DocumentLoader*, unsigned long identifier, const WebCore::AuthenticationChallenge&);
virtual void dispatchDidCancelAuthenticationChallenge(WebCore::DocumentLoader*, unsigned long identifier, const WebCore::AuthenticationChallenge&);
virtual void dispatchDidReceiveResponse(WebCore::DocumentLoader*, unsigned long identifier, const WebCore::ResourceResponse&);
@@ -85,6 +85,7 @@ namespace WebKit {
virtual void dispatchDidFinishDocumentLoad();
virtual void dispatchDidFinishLoad();
virtual void dispatchDidFirstLayout();
+ virtual void dispatchDidFirstVisuallyNonEmptyLayout();
virtual WebCore::Frame* dispatchCreatePage();
virtual void dispatchShow();
@@ -129,7 +130,8 @@ namespace WebKit {
virtual void committedLoad(WebCore::DocumentLoader*, const char*, int);
virtual void finishedLoading(WebCore::DocumentLoader*);
- virtual void updateGlobalHistory(const WebCore::KURL&);
+ virtual void updateGlobalHistory();
+ virtual void updateGlobalHistoryForRedirectWithoutHistoryItem();
virtual bool shouldGoToHistoryItem(WebCore::HistoryItem*) const;
virtual WebCore::ResourceError cancelledError(const WebCore::ResourceRequest&);
@@ -160,8 +162,8 @@ namespace WebKit {
virtual WebCore::String userAgent(const WebCore::KURL&);
- virtual void savePlatformDataToCachedPage(WebCore::CachedPage*);
- virtual void transitionToCommittedFromCachedPage(WebCore::CachedPage*);
+ virtual void savePlatformDataToCachedFrame(WebCore::CachedFrame*);
+ virtual void transitionToCommittedFromCachedFrame(WebCore::CachedFrame*);
virtual void transitionToCommittedForNewPage();
virtual bool canCachePage() const;
@@ -170,6 +172,7 @@ namespace WebKit {
WebKitWebFrame* m_frame;
WebCore::ResourceResponse m_response;
WebCore::String m_userAgent;
+ WebKitWebPolicyDecision* m_policyDecision;
// Plugin view to redirect data to
WebCore::PluginView* m_pluginView;
diff --git a/WebKit/gtk/WebCoreSupport/InspectorClientGtk.cpp b/WebKit/gtk/WebCoreSupport/InspectorClientGtk.cpp
index 210995a..ba3721a 100644
--- a/WebKit/gtk/WebCoreSupport/InspectorClientGtk.cpp
+++ b/WebKit/gtk/WebCoreSupport/InspectorClientGtk.cpp
@@ -77,7 +77,7 @@ Page* InspectorClient::createPage()
// close-window and destroy signals still need to be
// emitted.
WebKitWebInspector* webInspector;
- g_object_get(G_OBJECT(m_inspectedWebView), "web-inspector", &webInspector, NULL);
+ g_object_get(m_inspectedWebView, "web-inspector", &webInspector, NULL);
m_webInspector = webInspector;
g_signal_emit_by_name(m_webInspector, "inspect-web-view", m_inspectedWebView, &m_webView);
@@ -89,7 +89,7 @@ Page* InspectorClient::createPage()
webkit_web_inspector_set_web_view(m_webInspector, m_webView);
- g_signal_connect(G_OBJECT(m_webView), "destroy",
+ g_signal_connect(m_webView, "destroy",
G_CALLBACK(notifyWebViewDestroyed), (gpointer)this);
webkit_web_view_open(m_webView, "file://"DATA_DIR"/webkit-1.0/webinspector/inspector.html");
diff --git a/WebKit/gtk/webkit/webkit.h b/WebKit/gtk/webkit/webkit.h
index e19cbc7..8c868a2 100644
--- a/WebKit/gtk/webkit/webkit.h
+++ b/WebKit/gtk/webkit/webkit.h
@@ -1,5 +1,6 @@
/*
* Copyright (C) 2007 Alp Toker <alp@atoker.com>
+ * Copyright (C) 2008 Collabora Ltd.
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Library General Public
@@ -26,9 +27,12 @@
#include <webkit/webkitwebframe.h>
#include <webkit/webkitwebsettings.h>
#include <webkit/webkitwebinspector.h>
+#include <webkit/webkitwebwindowfeatures.h>
#include <webkit/webkitwebview.h>
#include <webkit/webkitwebbackforwardlist.h>
#include <webkit/webkitwebhistoryitem.h>
+#include <webkit/webkitwebpolicydecision.h>
+#include <webkit/webkitwebnavigationaction.h>
#include <webkit/webkitenumtypes.h>
#endif /* __WEBKIT_H__ */
diff --git a/WebKit/gtk/webkit/webkitdefines.h b/WebKit/gtk/webkit/webkitdefines.h
index 0c080f4..f94e710 100644
--- a/WebKit/gtk/webkit/webkitdefines.h
+++ b/WebKit/gtk/webkit/webkitdefines.h
@@ -1,5 +1,6 @@
/*
* Copyright (C) 2007 Holger Hans Peter Freyther
+ * Copyright (C) 2008 Collabora Ltd.
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Library General Public
@@ -52,12 +53,18 @@ typedef struct _WebKitWebHistoryItemClass WebKitWebHistoryItemClass;
typedef struct _WebKitWebFrame WebKitWebFrame;
typedef struct _WebKitWebFrameClass WebKitWebFrameClass;
+typedef struct _WebKitWebPolicyDecision WebKitWebPolicyDecision;
+typedef struct _WebKitWebPolicyDecisionClass WebKitWebPolicyDecisionClass;
+
typedef struct _WebKitWebSettings WebKitWebSettings;
typedef struct _WebKitWebSettingsClass WebKitWebSettingsClass;
typedef struct _WebKitWebInspector WebKitWebInspector;
typedef struct _WebKitWebInspectorClass WebKitWebInspectorClass;
+typedef struct _WebKitWebWindowFeatures WebKitWebWindowFeatures;
+typedef struct _WebKitWebWindowFeaturesClass WebKitWebWindowFeaturesClass;
+
typedef struct _WebKitWebView WebKitWebView;
typedef struct _WebKitWebViewClass WebKitWebViewClass;
diff --git a/WebKit/gtk/webkit/webkitnetworkrequest.cpp b/WebKit/gtk/webkit/webkitnetworkrequest.cpp
index fab0f88..3ad8b5d 100644
--- a/WebKit/gtk/webkit/webkitnetworkrequest.cpp
+++ b/WebKit/gtk/webkit/webkitnetworkrequest.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2007 Holger Hans Peter Freyther
+ * Copyright (C) 2007, 2008 Holger Hans Peter Freyther
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Library General Public
@@ -21,6 +21,19 @@
#include "webkitnetworkrequest.h"
+/**
+ * SECTION:webkitnetworkrequest
+ * @short_description: The target of a navigation request
+ * @see_also: #WebKitWebView::navigation-requested
+ *
+ * This class represents the network related aspects of a navigation
+ * request. Currently this is only the uri of the target. In the future
+ * the state of the web form might be added.
+ * Currently this object is only used along with the
+ * #WebKitWebView::navigation-requested signal.
+ *
+ */
+
extern "C" {
G_DEFINE_TYPE(WebKitNetworkRequest, webkit_network_request, G_TYPE_OBJECT);
@@ -77,6 +90,14 @@ void webkit_network_request_set_uri(WebKitNetworkRequest* request, const gchar*
priv->uri = g_strdup(uri);
}
+/**
+ * webkit_network_request_get_uri:
+ * @request: a #WebKitNetworkRequest
+ *
+ * Returns: the uri of the #WebKitNetworkRequest
+ *
+ * Since: 1.0.0
+ */
G_CONST_RETURN gchar* webkit_network_request_get_uri(WebKitNetworkRequest* request)
{
g_return_val_if_fail(WEBKIT_IS_NETWORK_REQUEST(request), NULL);
diff --git a/WebKit/gtk/webkit/webkitnetworkrequest.h b/WebKit/gtk/webkit/webkitnetworkrequest.h
index dfb4d6c..01ab8bb 100644
--- a/WebKit/gtk/webkit/webkitnetworkrequest.h
+++ b/WebKit/gtk/webkit/webkitnetworkrequest.h
@@ -38,11 +38,18 @@ typedef struct _WebKitNetworkRequestPrivate WebKitNetworkRequestPrivate;
struct _WebKitNetworkRequest {
GObject parent_instance;
+ /*< private >*/
WebKitNetworkRequestPrivate *priv;
};
struct _WebKitNetworkRequestClass {
GObjectClass parent_class;
+
+ /* Padding for future expansion */
+ void (*_webkit_reserved0) (void);
+ void (*_webkit_reserved1) (void);
+ void (*_webkit_reserved2) (void);
+ void (*_webkit_reserved3) (void);
};
WEBKIT_API GType
diff --git a/WebKit/gtk/webkit/webkitprivate.cpp b/WebKit/gtk/webkit/webkitprivate.cpp
index 07c8174..e801981 100644
--- a/WebKit/gtk/webkit/webkitprivate.cpp
+++ b/WebKit/gtk/webkit/webkitprivate.cpp
@@ -1,5 +1,6 @@
/*
* Copyright (C) 2007 Holger Hans Peter Freyther
+ * Copyright (C) 2008 Collabora Ltd.
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Library General Public
@@ -51,7 +52,7 @@ WebCore::Frame* core(WebKitWebFrame* frame)
return 0;
WebKitWebFramePrivate* priv = frame->priv;
- return priv ? priv->coreFrame.get() : 0;
+ return priv ? priv->coreFrame : 0;
}
WebKitWebFrame* kit(WebCore::Frame* coreFrame)
@@ -83,6 +84,16 @@ WebKitWebView* kit(WebCore::Page* corePage)
return client ? client->webView() : 0;
}
+WebKitWebNavigationReason kit(WebCore::NavigationType type)
+{
+ return (WebKitWebNavigationReason)type;
+}
+
+WebCore::NavigationType core(WebKitWebNavigationReason type)
+{
+ return (WebCore::NavigationType)type;
+}
+
} /** end namespace WebKit */
void webkit_init()
diff --git a/WebKit/gtk/webkit/webkitprivate.h b/WebKit/gtk/webkit/webkitprivate.h
index 3047af4..ace996d 100644
--- a/WebKit/gtk/webkit/webkitprivate.h
+++ b/WebKit/gtk/webkit/webkitprivate.h
@@ -1,6 +1,7 @@
/*
* Copyright (C) 2007, 2008 Holger Hans Peter Freyther
* Copyright (C) 2008 Jan Michael C. Alonzo
+ * Copyright (C) 2008 Collabora Ltd.
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Library General Public
@@ -29,7 +30,10 @@
#include <webkit/webkitdefines.h>
#include <webkit/webkitwebview.h>
#include <webkit/webkitwebframe.h>
+#include <webkit/webkitwebpolicydecision.h>
+#include <webkit/webkitwebnavigationaction.h>
#include <webkit/webkitwebsettings.h>
+#include <webkit/webkitwebwindowfeatures.h>
#include <webkit/webkitwebbackforwardlist.h>
#include "BackForwardList.h"
@@ -39,6 +43,7 @@
#include "Frame.h"
#include "InspectorClientGtk.h"
#include "FrameLoaderClient.h"
+#include "WindowFeatures.h"
#include <glib.h>
@@ -55,6 +60,9 @@ namespace WebKit {
WebKitWebHistoryItem* kit(WebCore::HistoryItem*);
WebCore::BackForwardList* core(WebKitWebBackForwardList*);
+
+ WebKitWebNavigationReason kit(WebCore::NavigationType type);
+ WebCore::NavigationType core(WebKitWebNavigationReason reason);
}
extern "C" {
@@ -69,6 +77,7 @@ extern "C" {
WebCore::Page* corePage;
WebKitWebSettings* webSettings;
WebKitWebInspector* webInspector;
+ WebKitWebWindowFeatures* webWindowFeatures;
WebKitWebFrame* mainFrame;
WebCore::String applicationNameForUserAgent;
@@ -97,8 +106,7 @@ extern "C" {
#define WEBKIT_WEB_FRAME_GET_PRIVATE(obj) (G_TYPE_INSTANCE_GET_PRIVATE((obj), WEBKIT_TYPE_WEB_FRAME, WebKitWebFramePrivate))
typedef struct _WebKitWebFramePrivate WebKitWebFramePrivate;
struct _WebKitWebFramePrivate {
- WTF::RefPtr<WebCore::Frame> coreFrame;
- WebCore::FrameLoaderClient* client;
+ WebCore::Frame* coreFrame;
WebKitWebView* webView;
gchar* name;
@@ -106,9 +114,12 @@ extern "C" {
gchar* uri;
};
- WebKitWebFrame*
+ PassRefPtr<WebCore::Frame>
webkit_web_frame_init_with_web_view(WebKitWebView*, WebCore::HTMLFrameOwnerElement*);
+ void
+ webkit_web_frame_core_frame_gone(WebKitWebFrame*);
+
WebKitWebHistoryItem*
webkit_web_history_item_new_with_core_item(WebCore::HistoryItem*);
@@ -121,6 +132,18 @@ extern "C" {
void
webkit_web_inspector_set_inspected_uri(WebKitWebInspector* web_inspector, const gchar* inspected_uri);
+ WebKitWebWindowFeatures*
+ webkit_web_window_features_new_from_core_features (const WebCore::WindowFeatures& features);
+
+ void
+ webkit_web_view_notify_ready (WebKitWebView* web_view);
+
+ WebKitWebPolicyDecision*
+ webkit_web_policy_decision_new (WebKitWebFrame*, WebCore::FramePolicyFunction);
+
+ void
+ webkit_web_policy_decision_cancel (WebKitWebPolicyDecision* decision);
+
// FIXME: Move these to webkitwebframe.h once their API has been discussed.
WEBKIT_API GSList*
@@ -135,8 +158,20 @@ extern "C" {
WEBKIT_API gchar*
webkit_web_frame_dump_render_tree (WebKitWebFrame* frame);
+ WEBKIT_API bool
+ webkit_web_frame_pause_animation(WebKitWebFrame* frame, const gchar* name, double time, const gchar* element);
+
+ WEBKIT_API bool
+ webkit_web_frame_pause_transition(WebKitWebFrame* frame, const gchar* name, double time, const gchar* element);
+
+ WEBKIT_API unsigned int
+ webkit_web_frame_number_of_active_animations(WebKitWebFrame* frame);
+
WEBKIT_API gchar*
webkit_web_view_get_selected_text (WebKitWebView* web_view);
+
+ WEBKIT_API void
+ webkit_web_settings_add_extra_plugin_directory (WebKitWebView *web_view, const gchar* directory);
}
#endif
diff --git a/WebKit/gtk/webkit/webkitwebbackforwardlist.cpp b/WebKit/gtk/webkit/webkitwebbackforwardlist.cpp
index ff68dad..3899f4b 100644
--- a/WebKit/gtk/webkit/webkitwebbackforwardlist.cpp
+++ b/WebKit/gtk/webkit/webkitwebbackforwardlist.cpp
@@ -29,6 +29,26 @@
#include "BackForwardList.h"
#include "HistoryItem.h"
+/**
+ * SECTION:webkitwebbackforwardlist
+ * @short_description: The history of a #WebKitWebView
+ * @see_also: #WebKitWebView, #WebKitWebHistoryItem
+ *
+ * <informalexample><programlisting>
+ * /<!-- -->* Get the WebKitWebBackForwardList from the WebKitWebView *<!-- -->/
+ * WebKitWebBackForwardList *back_forward_list = webkit_web_view_get_back_forward_list (my_web_view);
+ * WebKitWebHistoryItem *item = webkit_web_back_forward_list_get_current_item (back_forward_list);
+ *
+ * /<!-- -->* Do something with a WebKitWebHistoryItem *<!-- -->/
+ * g_print("%p", item);
+ *
+ * /<!-- -->* Control some parameters *<!-- -->/
+ * WebKitWebBackForwardList *back_forward_list = webkit_web_view_get_back_forward_list (my_web_view);
+ * webkit_web_back_forward_list_set_limit (back_forward_list, 30);
+ * </programlisting></informalexample>
+ *
+ */
+
using namespace WebKit;
extern "C" {
@@ -53,7 +73,7 @@ static void webkit_web_back_forward_list_init(WebKitWebBackForwardList* webBackF
/**
* webkit_web_back_forward_list_new_with_web_view:
- * @webView: the back forward list's #WebKitWebView
+ * @web_view: the back forward list's #WebKitWebView
*
* Creates an instance of the back forward list with a controlling #WebKitWebView
*
@@ -76,7 +96,7 @@ WebKitWebBackForwardList* webkit_web_back_forward_list_new_with_web_view(WebKitW
/**
* webkit_web_back_forward_list_go_forward:
- * @webBackForwardList: a #WebKitWebBackForwardList
+ * @web_back_forward_list: a #WebKitWebBackForwardList
*
* Steps forward in the back forward list
*/
@@ -91,7 +111,7 @@ void webkit_web_back_forward_list_go_forward(WebKitWebBackForwardList* webBackFo
/**
* webkit_web_back_forward_list_go_back:
- * @webBackForwardList: a #WebKitWebBackForwardList
+ * @web_back_forward_list: a #WebKitWebBackForwardList
*
* Steps backward in the back forward list
*/
@@ -106,12 +126,12 @@ void webkit_web_back_forward_list_go_back(WebKitWebBackForwardList* webBackForwa
/**
* webkit_web_back_forward_list_contains_item:
- * @webBackForwardList: a #WebKitWebBackForwardList
- * @webHistoryItem: the #WebKitWebHistoryItem to check
+ * @web_back_forward_list: a #WebKitWebBackForwardList
+ * @history_item: the #WebKitWebHistoryItem to check
*
- * Checks if @webHistoryItem is in the back forward list
+ * Checks if @web_history_item is in the back forward list
*
- * Return: %TRUE if @webHistoryItem is in the back forward list, %FALSE if it doesn't
+ * Return: %TRUE if @web_history_item is in the back forward list, %FALSE if it doesn't
*/
gboolean webkit_web_back_forward_list_contains_item(WebKitWebBackForwardList* webBackForwardList, WebKitWebHistoryItem* webHistoryItem)
{
@@ -129,10 +149,10 @@ gboolean webkit_web_back_forward_list_contains_item(WebKitWebBackForwardList* we
/**
* webkit_web_back_forward_list_go_to_item:
- * @webBackForwardList: a #WebKitWebBackForwardList
- * @webHistoryItem: the #WebKitWebHistoryItem to go to
+ * @web_back_forward_list: a #WebKitWebBackForwardList
+ * @history_item: the #WebKitWebHistoryItem to go to
*
- * Go to the specified @webHistoryItem in the back forward list
+ * Go to the specified @web_history_item in the back forward list
*/
void webkit_web_back_forward_list_go_to_item(WebKitWebBackForwardList* webBackForwardList, WebKitWebHistoryItem* webHistoryItem)
{
@@ -148,7 +168,7 @@ void webkit_web_back_forward_list_go_to_item(WebKitWebBackForwardList* webBackFo
/**
* webkit_web_back_forward_list_get_forward_list_with_limit:
- * @webBackForwardList: a #WebKitWebBackForwardList
+ * @web_back_forward_list: a #WebKitWebBackForwardList
* @limit: the number of items to retrieve
*
* Returns a list of items that succeed the current item, limited by @limit
@@ -178,7 +198,7 @@ GList* webkit_web_back_forward_list_get_forward_list_with_limit(WebKitWebBackFor
/**
* webkit_web_back_forward_list_get_back_list_with_limit:
- * @webBackForwardList: a #WebKitWebBackForwardList
+ * @web_back_forward_list: a #WebKitWebBackForwardList
* @limit: the number of items to retrieve
*
* Returns a list of items that precede the current item, limited by @limit
@@ -207,7 +227,7 @@ GList* webkit_web_back_forward_list_get_back_list_with_limit(WebKitWebBackForwar
}
/**
* webkit_web_back_forward_list_get_back_item:
- * @webBackForwardList: a #WebBackForwardList
+ * @web_back_forward_list: a #WebBackForwardList
*
* Returns the item that precedes the current item
*
@@ -228,7 +248,7 @@ WebKitWebHistoryItem* webkit_web_back_forward_list_get_back_item(WebKitWebBackFo
/**
* webkit_web_back_forward_list_get_current_item:
- * @webBackForwardList: a #WebKitWebBackForwardList
+ * @web_back_forward_list: a #WebKitWebBackForwardList
*
* Returns the current item.
*
@@ -251,7 +271,7 @@ WebKitWebHistoryItem* webkit_web_back_forward_list_get_current_item(WebKitWebBac
/**
* webkit_web_back_forward_list_get_forward_item:
- * @webBackForwardList: a #WebKitWebBackForwardList
+ * @web_back_forward_list: a #WebKitWebBackForwardList
*
* Returns the item that succeeds the current item.
*
@@ -274,7 +294,7 @@ WebKitWebHistoryItem* webkit_web_back_forward_list_get_forward_item(WebKitWebBac
/**
* webkit_web_back_forward_list_get_nth_item:
- * @webBackForwardList: a #WebKitWebBackForwardList
+ * @web_back_forward_list: a #WebKitWebBackForwardList
* @index: the index of the item
*
* Returns the item at a given index relative to the current item.
@@ -296,7 +316,7 @@ WebKitWebHistoryItem* webkit_web_back_forward_list_get_nth_item(WebKitWebBackFor
/**
* webkit_web_back_forward_list_get_back_length:
- * @webBackForwardList: a #WebKitWebBackForwardList
+ * @web_back_forward_list: a #WebKitWebBackForwardList
*
* Returns the number of items that preced the current item.
*
@@ -315,7 +335,7 @@ gint webkit_web_back_forward_list_get_back_length(WebKitWebBackForwardList* webB
/**
* webkit_web_back_forward_list_get_forward_length:
- * @webBackForwardList: a #WebKitWebBackForwardList
+ * @web_back_forward_list: a #WebKitWebBackForwardList
*
* Returns the number of items that succeed the current item.
*
@@ -334,7 +354,7 @@ gint webkit_web_back_forward_list_get_forward_length(WebKitWebBackForwardList* w
/**
* webkit_web_back_forward_list_get_limit:
- * @webBackForwardList: a #WebKitWebBackForwardList
+ * @web_back_forward_list: a #WebKitWebBackForwardList
*
* Returns the maximum limit of the back forward list.
*
@@ -353,7 +373,7 @@ gint webkit_web_back_forward_list_get_limit(WebKitWebBackForwardList* webBackFor
/**
* webkit_web_back_forward_list_set_limit:
- * @webBackForwardList: a #WebKitWebBackForwardList
+ * @web_back_forward_list: a #WebKitWebBackForwardList
* @limit: the limit to set the back forward list to
*
* Sets the maximum limit of the back forward list. If the back forward list
diff --git a/WebKit/gtk/webkit/webkitwebbackforwardlist.h b/WebKit/gtk/webkit/webkitwebbackforwardlist.h
index 68e18eb..fb641f0 100644
--- a/WebKit/gtk/webkit/webkitwebbackforwardlist.h
+++ b/WebKit/gtk/webkit/webkitwebbackforwardlist.h
@@ -40,11 +40,18 @@ typedef struct _WebKitWebBackForwardListPrivate WebKitWebBackForwardListPrivate;
struct _WebKitWebBackForwardList {
GObject parent_instance;
+ /*< private >*/
WebKitWebBackForwardListPrivate *priv;
};
struct _WebKitWebBackForwardListClass {
GObjectClass parent_class;
+
+ /* Padding for future expansion */
+ void (*_webkit_reserved0) (void);
+ void (*_webkit_reserved1) (void);
+ void (*_webkit_reserved2) (void);
+ void (*_webkit_reserved3) (void);
};
WEBKIT_API GType
diff --git a/WebKit/gtk/webkit/webkitwebframe.cpp b/WebKit/gtk/webkit/webkitwebframe.cpp
index 6a4c4d5..38e23a4 100644
--- a/WebKit/gtk/webkit/webkitwebframe.cpp
+++ b/WebKit/gtk/webkit/webkitwebframe.cpp
@@ -29,6 +29,7 @@
#include "webkitmarshal.h"
#include "webkitprivate.h"
+#include "AnimationController.h"
#include "CString.h"
#include "FrameLoader.h"
#include "FrameLoaderClientGtk.h"
@@ -45,6 +46,24 @@
#include <JavaScriptCore/APICast.h>
+/**
+ * SECTION:webkitwebframe
+ * @short_description: The content of a #WebKitWebView
+ *
+ * A #WebKitWebView contains a main #WebKitWebFrame. A #WebKitWebFrame
+ * contains the content of one URI. The URI and name of the frame can
+ * be retrieved, the load status and progress can be observed using the
+ * signals and can be controlled using the methods of the #WebKitWebFrame.
+ * A #WebKitWebFrame can have any number of children and one child can
+ * be found by using #webkit_web_frame_find_frame.
+ *
+ * <informalexample><programlisting>
+ * /<!-- -->* Get the frame from the #WebKitWebView *<!-- -->/
+ * WebKitWebFrame *frame = webkit_web_view_get_main_frame (WEBKIT_WEB_VIEW(my_view));
+ * g_print("The URI of this frame is '%s'", webkit_web_frame_get_uri (frame));
+ * </programlisting></informalexample>
+ */
+
using namespace WebKit;
using namespace WebCore;
using namespace std;
@@ -92,13 +111,24 @@ static void webkit_web_frame_get_property(GObject* object, guint prop_id, GValue
}
}
+// Called from the FrameLoaderClient when it is destroyed. Normally
+// the unref in the FrameLoaderClient is destroying this object as
+// well but due reference counting a user might have added a reference...
+void webkit_web_frame_core_frame_gone(WebKitWebFrame* frame)
+{
+ ASSERT(WEBKIT_IS_WEB_FRAME(frame));
+ frame->priv->coreFrame = 0;
+}
+
static void webkit_web_frame_finalize(GObject* object)
{
WebKitWebFrame* frame = WEBKIT_WEB_FRAME(object);
WebKitWebFramePrivate* priv = frame->priv;
- priv->coreFrame->loader()->cancelAndClear();
- priv->coreFrame = 0;
+ if (priv->coreFrame) {
+ priv->coreFrame->loader()->cancelAndClear();
+ priv->coreFrame = 0;
+ }
g_free(priv->name);
g_free(priv->title);
@@ -224,25 +254,26 @@ WebKitWebFrame* webkit_web_frame_new(WebKitWebView* webView)
WebKitWebViewPrivate* viewPriv = WEBKIT_WEB_VIEW_GET_PRIVATE(webView);
priv->webView = webView;
- priv->client = new WebKit::FrameLoaderClient(frame);
- priv->coreFrame = Frame::create(viewPriv->corePage, 0, priv->client).get();
+ WebKit::FrameLoaderClient* client = new WebKit::FrameLoaderClient(frame);
+ priv->coreFrame = Frame::create(viewPriv->corePage, 0, client).get();
priv->coreFrame->init();
return frame;
}
-WebKitWebFrame* webkit_web_frame_init_with_web_view(WebKitWebView* webView, HTMLFrameOwnerElement* element)
+PassRefPtr<Frame> webkit_web_frame_init_with_web_view(WebKitWebView* webView, HTMLFrameOwnerElement* element)
{
WebKitWebFrame* frame = WEBKIT_WEB_FRAME(g_object_new(WEBKIT_TYPE_WEB_FRAME, NULL));
WebKitWebFramePrivate* priv = frame->priv;
WebKitWebViewPrivate* viewPriv = WEBKIT_WEB_VIEW_GET_PRIVATE(webView);
priv->webView = webView;
- priv->client = new WebKit::FrameLoaderClient(frame);
- priv->coreFrame = Frame::create(viewPriv->corePage, element, priv->client).releaseRef();
- priv->coreFrame->init();
+ WebKit::FrameLoaderClient* client = new WebKit::FrameLoaderClient(frame);
- return frame;
+ RefPtr<Frame> coreFrame = Frame::create(viewPriv->corePage, element, client);
+ priv->coreFrame = coreFrame.get();
+
+ return coreFrame.release();
}
/**
@@ -314,7 +345,8 @@ G_CONST_RETURN gchar* webkit_web_frame_get_name(WebKitWebFrame* frame)
return priv->name;
Frame* coreFrame = core(frame);
- ASSERT(coreFrame);
+ if (!coreFrame)
+ return "";
String string = coreFrame->tree()->name();
priv->name = g_strdup(string.utf8().data());
@@ -334,7 +366,8 @@ WebKitWebFrame* webkit_web_frame_get_parent(WebKitWebFrame* frame)
g_return_val_if_fail(WEBKIT_IS_WEB_FRAME(frame), NULL);
Frame* coreFrame = core(frame);
- ASSERT(coreFrame);
+ if (!coreFrame)
+ return NULL;
return kit(coreFrame->tree()->parent());
}
@@ -356,7 +389,8 @@ void webkit_web_frame_load_request(WebKitWebFrame* frame, WebKitNetworkRequest*
g_return_if_fail(WEBKIT_IS_NETWORK_REQUEST(request));
Frame* coreFrame = core(frame);
- ASSERT(coreFrame);
+ if (!coreFrame)
+ return;
// TODO: Use the ResourceRequest carried by WebKitNetworkRequest when it is implemented.
String string = String::fromUTF8(webkit_network_request_get_uri(request));
@@ -374,7 +408,8 @@ void webkit_web_frame_stop_loading(WebKitWebFrame* frame)
g_return_if_fail(WEBKIT_IS_WEB_FRAME(frame));
Frame* coreFrame = core(frame);
- ASSERT(coreFrame);
+ if (!coreFrame)
+ return;
coreFrame->loader()->stopAllLoaders();
}
@@ -390,7 +425,8 @@ void webkit_web_frame_reload(WebKitWebFrame* frame)
g_return_if_fail(WEBKIT_IS_WEB_FRAME(frame));
Frame* coreFrame = core(frame);
- ASSERT(coreFrame);
+ if (!coreFrame)
+ return;
coreFrame->loader()->reload();
}
@@ -418,7 +454,8 @@ WebKitWebFrame* webkit_web_frame_find_frame(WebKitWebFrame* frame, const gchar*
g_return_val_if_fail(name, NULL);
Frame* coreFrame = core(frame);
- ASSERT(coreFrame);
+ if (!coreFrame)
+ return NULL;
String nameString = String::fromUTF8(name);
return kit(coreFrame->tree()->find(AtomicString(nameString)));
@@ -438,7 +475,8 @@ JSGlobalContextRef webkit_web_frame_get_global_context(WebKitWebFrame* frame)
g_return_val_if_fail(WEBKIT_IS_WEB_FRAME(frame), NULL);
Frame* coreFrame = core(frame);
- ASSERT(coreFrame);
+ if (!coreFrame)
+ return NULL;
return toGlobalRef(coreFrame->script()->globalObject()->globalExec());
}
@@ -454,7 +492,8 @@ GSList* webkit_web_frame_get_children(WebKitWebFrame* frame)
g_return_val_if_fail(WEBKIT_IS_WEB_FRAME(frame), NULL);
Frame* coreFrame = core(frame);
- ASSERT(coreFrame);
+ if (!coreFrame)
+ return NULL;
GSList* children = NULL;
for (Frame* child = coreFrame->tree()->firstChild(); child; child = child->tree()->nextSibling()) {
@@ -478,7 +517,8 @@ gchar* webkit_web_frame_get_inner_text(WebKitWebFrame* frame)
g_return_val_if_fail(WEBKIT_IS_WEB_FRAME(frame), NULL);
Frame* coreFrame = core(frame);
- ASSERT(coreFrame);
+ if (!coreFrame)
+ return g_strdup("");
FrameView* view = coreFrame->view();
@@ -501,7 +541,8 @@ gchar* webkit_web_frame_dump_render_tree(WebKitWebFrame* frame)
g_return_val_if_fail(WEBKIT_IS_WEB_FRAME(frame), NULL);
Frame* coreFrame = core(frame);
- ASSERT(coreFrame);
+ if (!coreFrame)
+ return g_strdup("");
FrameView* view = coreFrame->view();
@@ -555,14 +596,15 @@ void webkit_web_frame_print(WebKitWebFrame* frame)
topLevel = NULL;
Frame* coreFrame = core(frame);
- ASSERT(coreFrame);
+ if (!coreFrame)
+ return;
PrintContext printContext(coreFrame);
GtkPrintOperation* op = gtk_print_operation_new();
- g_signal_connect(G_OBJECT(op), "begin-print", G_CALLBACK(begin_print), &printContext);
- g_signal_connect(G_OBJECT(op), "draw-page", G_CALLBACK(draw_page), &printContext);
- g_signal_connect(G_OBJECT(op), "end-print", G_CALLBACK(end_print), &printContext);
+ g_signal_connect(op, "begin-print", G_CALLBACK(begin_print), &printContext);
+ g_signal_connect(op, "draw-page", G_CALLBACK(draw_page), &printContext);
+ g_signal_connect(op, "end-print", G_CALLBACK(end_print), &printContext);
GError *error = NULL;
gtk_print_operation_run(op, GTK_PRINT_OPERATION_ACTION_PRINT_DIALOG, GTK_WINDOW(topLevel), &error);
g_object_unref(op);
@@ -589,4 +631,35 @@ void webkit_web_frame_print(WebKitWebFrame*)
#endif
+bool webkit_web_frame_pause_animation(WebKitWebFrame* frame, const gchar* name, double time, const gchar* element)
+{
+ ASSERT(core(frame));
+ Element* coreElement = core(frame)->document()->getElementById(AtomicString(element));
+ if (!coreElement || !coreElement->renderer())
+ return false;
+ return core(frame)->animation()->pauseAnimationAtTime(coreElement->renderer(), AtomicString(name), time);
+}
+
+bool webkit_web_frame_pause_transition(WebKitWebFrame* frame, const gchar* name, double time, const gchar* element)
+{
+ ASSERT(core(frame));
+ Element* coreElement = core(frame)->document()->getElementById(AtomicString(element));
+ if (!coreElement || !coreElement->renderer())
+ return false;
+ return core(frame)->animation()->pauseTransitionAtTime(coreElement->renderer(), AtomicString(name), time);
+}
+
+unsigned int webkit_web_frame_number_of_active_animations(WebKitWebFrame* frame)
+{
+ Frame* coreFrame = core(frame);
+ if (!coreFrame)
+ return 0;
+
+ AnimationController* controller = coreFrame->animation();
+ if (!controller)
+ return 0;
+
+ return controller->numberOfActiveAnimations();
+}
+
}
diff --git a/WebKit/gtk/webkit/webkitwebframe.h b/WebKit/gtk/webkit/webkitwebframe.h
index 827e4b9..fcdace6 100644
--- a/WebKit/gtk/webkit/webkitwebframe.h
+++ b/WebKit/gtk/webkit/webkitwebframe.h
@@ -41,12 +41,14 @@ typedef struct _WebKitWebFramePrivate WebKitWebFramePrivate;
struct _WebKitWebFrame {
GObject parent_instance;
+ /*< private >*/
WebKitWebFramePrivate *priv;
};
struct _WebKitWebFrameClass {
GObjectClass parent_class;
+ /*< public >*/
void (*_webkit_reserved1) (void);
void (*_webkit_reserved2) (void);
void (*_webkit_reserved3) (void);
diff --git a/WebKit/gtk/webkit/webkitwebhistoryitem.cpp b/WebKit/gtk/webkit/webkitwebhistoryitem.cpp
index 150df68..8cdaa90 100644
--- a/WebKit/gtk/webkit/webkitwebhistoryitem.cpp
+++ b/WebKit/gtk/webkit/webkitwebhistoryitem.cpp
@@ -29,6 +29,25 @@
#include "HistoryItem.h"
#include "PlatformString.h"
+/**
+ * SECTION:webkitwebhistoryitem
+ * @short_description: One item of the #WebKitWebBackForwardList and or global history
+ * @see_also: #WebKitWebBackForwardList
+ *
+ * A history item consists out of a title and a uri. It can be part of the
+ * #WebKitWebBackForwardList and the global history. The global history is used
+ * for coloring the links of visited sites. #WebKitHistoryItem's constructed with
+ * #webkit_web_history_item_new and #webkit_web_history_item_new_with_data are
+ * automatically added to the global history.
+ *
+ * <informalexample><programlisting>
+ * /<!-- -->* Inject a visited page into the global history *<!-- -->/
+ * webkit_web_history_item_new_with_data("http://www.gnome.org/", "GNOME: The Free Software Desktop Project");
+ * webkit_web_history_item_new_with_data("http://www.webkit.org/", "The WebKit Open Source Project");
+ * </programlisting></informalexample>
+ *
+ */
+
using namespace WebKit;
extern "C" {
@@ -312,9 +331,9 @@ WebKitWebHistoryItem* webkit_web_history_item_new_with_data(const gchar* uri, co
/**
* webkit_web_history_item_get_title:
- * @webHistoryItem: a #WebKitWebHistoryItem
+ * @web_history_item: a #WebKitWebHistoryItem
*
- * Returns the page title of @webHistoryItem
+ * Returns: the page title of @web_history_item
*/
G_CONST_RETURN gchar* webkit_web_history_item_get_title(WebKitWebHistoryItem* webHistoryItem)
{
@@ -332,11 +351,11 @@ G_CONST_RETURN gchar* webkit_web_history_item_get_title(WebKitWebHistoryItem* we
/**
* webkit_web_history_item_get_alternate_title:
- * @webHistoryItem: a #WebKitWebHistoryItem
+ * @web_history_item: a #WebKitWebHistoryItem
*
- * Returns the alternate title of @webHistoryItem
+ * Returns the alternate title of @web_history_item
*
- * Return value: the alternate title of @webHistoryItem
+ * Return value: the alternate title of @web_history_item
*/
G_CONST_RETURN gchar* webkit_web_history_item_get_alternate_title(WebKitWebHistoryItem* webHistoryItem)
{
@@ -354,10 +373,10 @@ G_CONST_RETURN gchar* webkit_web_history_item_get_alternate_title(WebKitWebHisto
/**
* webkit_web_history_item_set_alternate_title:
- * @webHistoryItem: a #WebKitWebHistoryItem
+ * @web_history_item: a #WebKitWebHistoryItem
* @title: the alternate title for @this history item
*
- * Sets an alternate title for @webHistoryItem
+ * Sets an alternate title for @web_history_item
*/
void webkit_web_history_item_set_alternate_title(WebKitWebHistoryItem* webHistoryItem, const gchar* title)
{
@@ -372,11 +391,11 @@ void webkit_web_history_item_set_alternate_title(WebKitWebHistoryItem* webHistor
/**
* webkit_web_history_item_get_uri:
- * @webHistoryItem: a #WebKitWebHistoryItem
+ * @web_history_item: a #WebKitWebHistoryItem
*
* Returns the URI of @this
*
- * Return value: the URI of @webHistoryItem
+ * Return value: the URI of @web_history_item
*/
G_CONST_RETURN gchar* webkit_web_history_item_get_uri(WebKitWebHistoryItem* webHistoryItem)
{
@@ -394,11 +413,11 @@ G_CONST_RETURN gchar* webkit_web_history_item_get_uri(WebKitWebHistoryItem* webH
/**
* webkit_web_history_item_get_original_uri:
- * @webHistoryItem: a #WebKitWebHistoryItem
+ * @web_history_item: a #WebKitWebHistoryItem
*
- * Returns the original URI of @webHistoryItem.
+ * Returns the original URI of @web_history_item.
*
- * Return value: the original URI of @webHistoryITem
+ * Return value: the original URI of @web_history_item
*/
G_CONST_RETURN gchar* webkit_web_history_item_get_original_uri(WebKitWebHistoryItem* webHistoryItem)
{
@@ -416,11 +435,11 @@ G_CONST_RETURN gchar* webkit_web_history_item_get_original_uri(WebKitWebHistoryI
/**
* webkit_web_history_item_get_last_visisted_time :
- * @webHistoryItem: a #WebKitWebHistoryItem
+ * @web_history_item: a #WebKitWebHistoryItem
*
- * Returns the last time @webHistoryItem was visited
+ * Returns the last time @web_history_item was visited
*
- * Return value: the time in seconds this @webHistoryItem was last visited
+ * Return value: the time in seconds this @web_history_item was last visited
*/
gdouble webkit_web_history_item_get_last_visited_time(WebKitWebHistoryItem* webHistoryItem)
{
diff --git a/WebKit/gtk/webkit/webkitwebhistoryitem.h b/WebKit/gtk/webkit/webkitwebhistoryitem.h
index dd63f9d..c8a754a 100644
--- a/WebKit/gtk/webkit/webkitwebhistoryitem.h
+++ b/WebKit/gtk/webkit/webkitwebhistoryitem.h
@@ -39,11 +39,18 @@ typedef struct _WebKitWebHistoryItemPrivate WebKitWebHistoryItemPrivate;
struct _WebKitWebHistoryItem {
GObject parent_instance;
+ /*< private >*/
WebKitWebHistoryItemPrivate *priv;
};
struct _WebKitWebHistoryItemClass {
GObjectClass parent_class;
+
+ /* Padding for future expansion */
+ void (*_webkit_reserved0) (void);
+ void (*_webkit_reserved1) (void);
+ void (*_webkit_reserved2) (void);
+ void (*_webkit_reserved3) (void);
};
WEBKIT_API GType
diff --git a/WebKit/gtk/webkit/webkitwebinspector.cpp b/WebKit/gtk/webkit/webkitwebinspector.cpp
index 437fe2b..b8f8d9e 100644
--- a/WebKit/gtk/webkit/webkitwebinspector.cpp
+++ b/WebKit/gtk/webkit/webkitwebinspector.cpp
@@ -1,5 +1,6 @@
/*
* Copyright (C) 2008 Gustavo Noronha Silva
+ * Copyright (C) 2008 Holger Hans Peter Freyther
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Library General Public
@@ -24,6 +25,35 @@
#include "InspectorClientGtk.h"
#include "webkitprivate.h"
+/**
+ * SECTION:webkitwebinspector
+ * @short_description: Access to the WebKit Inspector
+ *
+ * The WebKit Inspector is a graphical tool to inspect and change
+ * the content of a #WebKitWebView. It also includes an interactive
+ * JavaScriptDebugger. Using this class one can get a GtkWidget which
+ * can be embedded into an application to show the inspector.
+ *
+ * The inspector is available when the #WebKitWebSettings of the
+ * #WebKitWebView has set the #WebKitWebSettings:enable-developer-extras
+ * to true otherwise no inspector is available.
+ *
+ * <informalexample><programlisting>
+ * /<!-- -->* Enable the developer extras *<!-- -->/
+ * WebKitWebSettings *setting = webkit_web_view_get_settings (WEBKIT_WEB_VIEW(my_webview));
+ * g_object_set (G_OBJECT(settings), "enable-developer-extras", TRUE, NULL);
+ *
+ * /<!-- -->* load some data or reload to be able to inspect the page*<!-- -->/
+ * webkit_web_view_open (WEBKIT_WEB_VIEW(my_webview), "http://www.gnome.org");
+ *
+ * /<!-- -->* Embed the inspector somewhere *<!-- -->/
+ * WebKitWebInspector *inspector = webkit_web_view_get_inspector (WEBKIT_WEB_VIEW(my_webview));
+ * g_signal_connect (G_OBJECT (inspector), "inspect-web-view", G_CALLBACK(create_gtk_window_around_it), NULL);
+ * g_signal_connect (G_OBJECT (inspector), "show-window", G_CALLBACK(show_inpector_window), NULL));
+ * g_signal_connect (G_OBJECT (inspector), "notify::inspected-uri", G_CALLBACK(inspected_uri_changed_do_stuff), NULL);
+ * </programlisting></informalexample>
+ */
+
using namespace WebKit;
extern "C" {
@@ -116,7 +146,7 @@ static void webkit_web_inspector_class_init(WebKitWebInspectorClass* klass)
*
* Emitted when the inspector window should be displayed. Notice
* that the window must have been created already by handling
- * ::inspect-web-view.
+ * #WebKitWebInspector::inspect-web-view.
*
* Since: 1.0.3
*/
@@ -173,13 +203,13 @@ static void webkit_web_inspector_class_init(WebKitWebInspectorClass* klass)
*
* Emitted when the inspector window should be closed. You can
* destroy the window or hide it so that it can be displayed again
- * by handling ::show-window later on.
+ * by handling #WebKitWebInspector::show-window later on.
*
* Notice that the inspected #WebKitWebView may no longer exist
* when this signal is emitted.
*
* Notice, too, that if you decide to destroy the window,
- * ::inspect-web-view will be emmited again, when the user
+ * #WebKitWebInspector::inspect-web-view will be emmited again, when the user
* inspects an element.
*
* Since: 1.0.3
@@ -313,7 +343,7 @@ void webkit_web_inspector_set_web_view(WebKitWebInspector *web_inspector, WebKit
*
* Obtains the #WebKitWebView that is used to render the
* inspector. The #WebKitWebView instance is created by the
- * application, by handling the ::inspect-web-view signal. This means
+ * application, by handling the #WebKitWebInspector::inspect-web-view signal. This means
* that this method may return %NULL if the user hasn't inspected
* anything.
*
diff --git a/WebKit/gtk/webkit/webkitwebnavigationaction.cpp b/WebKit/gtk/webkit/webkitwebnavigationaction.cpp
new file mode 100644
index 0000000..48e36ac
--- /dev/null
+++ b/WebKit/gtk/webkit/webkitwebnavigationaction.cpp
@@ -0,0 +1,312 @@
+/*
+ * Copyright (C) 2008 Collabora Ltd.
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public License
+ * along with this library; see the file COPYING.LIB. If not, write to
+ * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+ * Boston, MA 02110-1301, USA.
+ */
+
+#include "config.h"
+
+#include <wtf/Assertions.h>
+#include "FrameLoaderTypes.h"
+
+#include "webkitwebnavigationaction.h"
+#include "webkitprivate.h"
+#include "webkitenumtypes.h"
+
+#include <string.h>
+
+extern "C" {
+
+struct _WebKitWebNavigationActionPrivate {
+ WebKitWebNavigationReason reason;
+ gchar* originalUri;
+ gint button;
+ gint modifier_state;
+};
+
+#define WEBKIT_WEB_NAVIGATION_ACTION_GET_PRIVATE(obj)(G_TYPE_INSTANCE_GET_PRIVATE((obj), WEBKIT_TYPE_WEB_NAVIGATION_ACTION, WebKitWebNavigationActionPrivate))
+
+enum {
+ PROP_0,
+
+ PROP_REASON,
+ PROP_ORIGINAL_URI,
+ PROP_BUTTON,
+ PROP_MODIFIER_STATE
+};
+
+G_DEFINE_TYPE(WebKitWebNavigationAction, webkit_web_navigation_action, G_TYPE_OBJECT)
+
+
+static void webkit_web_navigation_action_get_property(GObject* object, guint propertyId, GValue* value, GParamSpec* pspec)
+{
+ WebKitWebNavigationAction* navigationAction = WEBKIT_WEB_NAVIGATION_ACTION(object);
+
+ switch(propertyId) {
+ case PROP_REASON:
+ g_value_set_enum(value, webkit_web_navigation_action_get_reason(navigationAction));
+ break;
+ case PROP_ORIGINAL_URI:
+ g_value_set_string(value, webkit_web_navigation_action_get_original_uri(navigationAction));
+ break;
+ case PROP_BUTTON:
+ g_value_set_int(value, webkit_web_navigation_action_get_button(navigationAction));
+ break;
+ case PROP_MODIFIER_STATE:
+ g_value_set_int(value, webkit_web_navigation_action_get_modifier_state(navigationAction));
+ break;
+ default:
+ G_OBJECT_WARN_INVALID_PROPERTY_ID(object, propertyId, pspec);
+ break;
+ }
+}
+
+static void webkit_web_navigation_action_set_property(GObject* object, guint propertyId, const GValue* value, GParamSpec* pspec)
+{
+ WebKitWebNavigationAction* navigationAction = WEBKIT_WEB_NAVIGATION_ACTION(object);
+ WebKitWebNavigationActionPrivate* priv = navigationAction->priv;
+
+ switch(propertyId) {
+ case PROP_REASON:
+ webkit_web_navigation_action_set_reason(navigationAction, (WebKitWebNavigationReason)g_value_get_enum(value));
+ break;
+ case PROP_ORIGINAL_URI:
+ webkit_web_navigation_action_set_original_uri(navigationAction, g_value_get_string(value));
+ break;
+ case PROP_BUTTON:
+ priv->button = g_value_get_int(value);
+ break;
+ case PROP_MODIFIER_STATE:
+ priv->modifier_state = g_value_get_int(value);
+ break;
+ default:
+ G_OBJECT_WARN_INVALID_PROPERTY_ID(object, propertyId, pspec);
+ break;
+ }
+}
+
+static void webkit_web_navigation_action_init(WebKitWebNavigationAction* navigationAction)
+{
+ navigationAction->priv = WEBKIT_WEB_NAVIGATION_ACTION_GET_PRIVATE(navigationAction);
+
+ WebKitWebNavigationActionPrivate* priv = navigationAction->priv;
+}
+
+static void webkit_web_navigation_action_finalize(GObject* obj)
+{
+ WebKitWebNavigationAction* navigationAction = WEBKIT_WEB_NAVIGATION_ACTION(obj);
+ WebKitWebNavigationActionPrivate* priv = navigationAction->priv;
+
+ g_free(priv->originalUri);
+
+ G_OBJECT_CLASS(webkit_web_navigation_action_parent_class)->finalize(obj);
+}
+
+static void webkit_web_navigation_action_class_init(WebKitWebNavigationActionClass* requestClass)
+{
+ GObjectClass* objectClass = G_OBJECT_CLASS(requestClass);
+
+ COMPILE_ASSERT(WEBKIT_WEB_NAVIGATION_REASON_LINK_CLICKED == WebCore::NavigationTypeLinkClicked, navigation_type_link_clicked_enum_match);
+ COMPILE_ASSERT(WEBKIT_WEB_NAVIGATION_REASON_FORM_SUBMITTED == WebCore::NavigationTypeFormSubmitted, navigation_type_form_submitted_enum_match);
+ COMPILE_ASSERT(WEBKIT_WEB_NAVIGATION_REASON_BACK_FORWARD == WebCore::NavigationTypeBackForward, navigation_type_back_forward_enum_match);
+ COMPILE_ASSERT(WEBKIT_WEB_NAVIGATION_REASON_RELOAD == WebCore::NavigationTypeReload, navigation_type_reload_enum_match);
+ COMPILE_ASSERT(WEBKIT_WEB_NAVIGATION_REASON_FORM_RESUBMITTED == WebCore::NavigationTypeFormResubmitted, navigation_type_form_resubmitted_enum_match);
+ COMPILE_ASSERT(WEBKIT_WEB_NAVIGATION_REASON_OTHER == WebCore::NavigationTypeOther, navigation_type_other_enum_match);
+
+ objectClass->get_property = webkit_web_navigation_action_get_property;
+ objectClass->set_property = webkit_web_navigation_action_set_property;
+ objectClass->dispose = webkit_web_navigation_action_finalize;
+
+ /**
+ * WebKitWebNavigationAction:reason:
+ *
+ * The reason why this navigation is occuring.
+ *
+ * Since: 1.0.3
+ */
+ g_object_class_install_property(objectClass, PROP_REASON,
+ g_param_spec_enum("reason",
+ "Reason",
+ "The reason why this navigation is occurring",
+ WEBKIT_TYPE_WEB_NAVIGATION_REASON,
+ WEBKIT_WEB_NAVIGATION_REASON_OTHER,
+ (GParamFlags)(WEBKIT_PARAM_READWRITE | G_PARAM_CONSTRUCT)));
+
+ /**
+ * WebKitWebNavigationAction:original-uri:
+ *
+ * The URI that was requested as the target for the navigation.
+ *
+ * Since: 1.0.3
+ */
+ g_object_class_install_property(objectClass, PROP_ORIGINAL_URI,
+ g_param_spec_string("original-uri",
+ "Original URI",
+ "The URI that was requested as the target for the navigation",
+ "",
+ (GParamFlags)(WEBKIT_PARAM_READWRITE | G_PARAM_CONSTRUCT)));
+ /**
+ * WebKitWebNavigationAction:button:
+ *
+ * The button used to click if the action was a mouse event.
+ *
+ * Since: 1.0.3
+ */
+ g_object_class_install_property(objectClass, PROP_BUTTON,
+ g_param_spec_int("button",
+ "Button",
+ "The button used to click",
+ -1,
+ G_MAXINT,
+ -1,
+ (GParamFlags)(WEBKIT_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY)));
+
+ /**
+ * WebKitWebNavigationAction:modifier-state:
+ *
+ * The state of the modifier keys when the action was requested.
+ *
+ * Since: 1.0.3
+ */
+ g_object_class_install_property(objectClass, PROP_MODIFIER_STATE,
+ g_param_spec_int("modifier-state",
+ "Modifier state",
+ "A bitmask representing the state of the modifier keys",
+ 0,
+ G_MAXINT,
+ 0,
+ (GParamFlags)(WEBKIT_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY)));
+
+
+
+ g_type_class_add_private(requestClass, sizeof(WebKitWebNavigationActionPrivate));
+}
+
+/**
+ * webkit_web_navigation_action_get_reason:
+ * @navigationAction: a #WebKitWebNavigationAction
+ *
+ * Returns the reason why WebKit is requesting a navigation.
+ *
+ * Return value: a #WebKitWebNavigationReason
+ *
+ * Since: 1.0.3
+ */
+WebKitWebNavigationReason webkit_web_navigation_action_get_reason(WebKitWebNavigationAction* navigationAction)
+{
+ g_return_val_if_fail(WEBKIT_IS_WEB_NAVIGATION_ACTION(navigationAction), WEBKIT_WEB_NAVIGATION_REASON_OTHER);
+
+ return navigationAction->priv->reason;
+}
+
+/**
+ * webkit_web_navigation_action_set_reason:
+ * @navigationAction: a #WebKitWebNavigationAction
+ * @reason: a #WebKitWebNavigationReason
+ *
+ * Sets the reason why WebKit is requesting a navigation.
+ *
+ * Since: 1.0.3
+ */
+void webkit_web_navigation_action_set_reason(WebKitWebNavigationAction* navigationAction, WebKitWebNavigationReason reason)
+{
+ g_return_if_fail(WEBKIT_IS_WEB_NAVIGATION_ACTION(navigationAction));
+
+ if (navigationAction->priv->reason == reason)
+ return;
+
+ navigationAction->priv->reason = reason;
+ g_object_notify(G_OBJECT(navigationAction), "reason");
+}
+
+/**
+ * webkit_web_navigation_action_get_original_uri:
+ * @navigationAction: a #WebKitWebNavigationAction
+ *
+ * Returns the URI that was originally requested. This may differ from the
+ * navigation target, for instance because of a redirect.
+ *
+ * Return value: the originally requested URI
+ *
+ * Since: 1.0.3
+ */
+const gchar* webkit_web_navigation_action_get_original_uri(WebKitWebNavigationAction* navigationAction)
+{
+ g_return_val_if_fail(WEBKIT_IS_WEB_NAVIGATION_ACTION(navigationAction), NULL);
+
+ return navigationAction->priv->originalUri;
+}
+
+/**
+ * webkit_web_navigation_action_set_original_uri:
+ * @navigationAction: a #WebKitWebNavigationAction
+ * @originalUri: a URI
+ *
+ * Sets the URI that was originally requested. This may differ from the
+ * navigation target, for instance because of a redirect.
+ *
+ * Since: 1.0.3
+ */
+void webkit_web_navigation_action_set_original_uri(WebKitWebNavigationAction* navigationAction, const gchar* originalUri)
+{
+ g_return_if_fail(WEBKIT_IS_WEB_NAVIGATION_ACTION(navigationAction));
+ g_return_if_fail(originalUri);
+
+ if (navigationAction->priv->originalUri &&
+ (!strcmp(navigationAction->priv->originalUri, originalUri)))
+ return;
+
+ g_free(navigationAction->priv->originalUri);
+ navigationAction->priv->originalUri = g_strdup(originalUri);
+ g_object_notify(G_OBJECT(navigationAction), "original-uri");
+}
+
+/**
+ * webkit_web_navigation_action_get_button:
+ * @navigationAction: a #WebKitWebNavigationAction
+ *
+ * Returns the mouse button used to click if the action was a mouse event.
+ * Otherwise returns -1.
+ *
+ * Return value: the mouse button used to click
+ *
+ * Since: 1.0.3
+ */
+gint webkit_web_navigation_action_get_button(WebKitWebNavigationAction* navigationAction)
+{
+ g_return_val_if_fail(WEBKIT_IS_WEB_NAVIGATION_ACTION(navigationAction), -1);
+
+ return navigationAction->priv->button;
+}
+
+/**
+ * webkit_web_navigation_action_get_modifier_state:
+ * @navigationAction: a #WebKitWebNavigationAction
+ *
+ * Returns a bitmask with the the state of the modifier keys.
+ *
+ * Return value: a bitmask with the state of the modifier keys
+ *
+ * Since: 1.0.3
+ */
+gint webkit_web_navigation_action_get_modifier_state(WebKitWebNavigationAction* navigationAction)
+{
+ g_return_val_if_fail(WEBKIT_IS_WEB_NAVIGATION_ACTION(navigationAction), 0);
+
+ return navigationAction->priv->modifier_state;
+}
+
+}
diff --git a/WebKit/gtk/webkit/webkitwebnavigationaction.h b/WebKit/gtk/webkit/webkitwebnavigationaction.h
new file mode 100644
index 0000000..d83e7a0
--- /dev/null
+++ b/WebKit/gtk/webkit/webkitwebnavigationaction.h
@@ -0,0 +1,93 @@
+/*
+ * Copyright (C) 2008 Collabora Ltd.
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public License
+ * along with this library; see the file COPYING.LIB. If not, write to
+ * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+ * Boston, MA 02110-1301, USA.
+ */
+
+#ifndef WEBKIT_WEB_NAVIGATION_ACTION_H
+#define WEBKIT_WEB_NAVIGATION_ACTION_H
+
+#include <glib-object.h>
+
+#include <webkit/webkitdefines.h>
+
+G_BEGIN_DECLS
+
+/*
+ * The order of this enum must be the same as NavigationType in
+ * FrameLoaderTypes.h
+ */
+typedef enum {
+ WEBKIT_WEB_NAVIGATION_REASON_LINK_CLICKED,
+ WEBKIT_WEB_NAVIGATION_REASON_FORM_SUBMITTED,
+ WEBKIT_WEB_NAVIGATION_REASON_BACK_FORWARD,
+ WEBKIT_WEB_NAVIGATION_REASON_RELOAD,
+ WEBKIT_WEB_NAVIGATION_REASON_FORM_RESUBMITTED,
+ WEBKIT_WEB_NAVIGATION_REASON_OTHER,
+} WebKitWebNavigationReason;
+
+#define WEBKIT_TYPE_WEB_NAVIGATION_ACTION (webkit_web_navigation_action_get_type())
+#define WEBKIT_WEB_NAVIGATION_ACTION(obj) (G_TYPE_CHECK_INSTANCE_CAST((obj), WEBKIT_TYPE_WEB_NAVIGATION_ACTION, WebKitWebNavigationAction))
+#define WEBKIT_WEB_NAVIGATION_ACTION_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST((klass), WEBKIT_TYPE_WEB_NAVIGATION_ACTION, WebKitWebNavigationActionClass))
+#define WEBKIT_IS_WEB_NAVIGATION_ACTION(obj) (G_TYPE_CHECK_INSTANCE_TYPE((obj), WEBKIT_TYPE_WEB_NAVIGATION_ACTION))
+#define WEBKIT_IS_WEB_NAVIGATION_ACTION_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE((klass), WEBKIT_TYPE_WEB_NAVIGATION_ACTION))
+#define WEBKIT_WEB_NAVIGATION_ACTION_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS((obj), WEBKIT_TYPE_WEB_NAVIGATION_ACTION, WebKitWebNavigationActionClass))
+
+typedef struct _WebKitWebNavigationAction WebKitWebNavigationAction;
+typedef struct _WebKitWebNavigationActionClass WebKitWebNavigationActionClass;
+typedef struct _WebKitWebNavigationActionPrivate WebKitWebNavigationActionPrivate;
+
+struct _WebKitWebNavigationAction {
+ GObject parent_instance;
+
+ /*< private >*/
+ WebKitWebNavigationActionPrivate* priv;
+};
+
+struct _WebKitWebNavigationActionClass {
+ GObjectClass parent_class;
+
+ /* Padding for future expansion */
+ void (*_webkit_reserved0) (void);
+ void (*_webkit_reserved1) (void);
+ void (*_webkit_reserved2) (void);
+ void (*_webkit_reserved3) (void);
+};
+
+WEBKIT_API GType
+webkit_web_navigation_action_get_type(void);
+
+WEBKIT_API WebKitWebNavigationReason
+webkit_web_navigation_action_get_reason(WebKitWebNavigationAction* navigationAction);
+
+WEBKIT_API void
+webkit_web_navigation_action_set_reason(WebKitWebNavigationAction* navigationAction, WebKitWebNavigationReason reason);
+
+WEBKIT_API const gchar*
+webkit_web_navigation_action_get_original_uri(WebKitWebNavigationAction* navigationAction);
+
+WEBKIT_API void
+webkit_web_navigation_action_set_original_uri(WebKitWebNavigationAction* navigationAction, const gchar* originalUri);
+
+WEBKIT_API gint
+webkit_web_navigation_action_get_button(WebKitWebNavigationAction* navigationAction);
+
+WEBKIT_API gint
+webkit_web_navigation_action_get_modifier_state(WebKitWebNavigationAction* navigationAction);
+
+G_END_DECLS
+
+#endif
diff --git a/WebKit/gtk/webkit/webkitwebpolicydecision.cpp b/WebKit/gtk/webkit/webkitwebpolicydecision.cpp
new file mode 100644
index 0000000..db4d10f
--- /dev/null
+++ b/WebKit/gtk/webkit/webkitwebpolicydecision.cpp
@@ -0,0 +1,129 @@
+/*
+ * Copyright (C) 2008 Collabora Ltd.
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public License
+ * along with this library; see the file COPYING.LIB. If not, write to
+ * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+ * Boston, MA 02110-1301, USA.
+ */
+
+#include "config.h"
+
+#include "webkitwebpolicydecision.h"
+
+#include "FrameLoaderTypes.h"
+#include "webkitprivate.h"
+
+using namespace WebKit;
+using namespace WebCore;
+
+extern "C" {
+
+G_DEFINE_TYPE(WebKitWebPolicyDecision, webkit_web_policy_decision, G_TYPE_OBJECT);
+
+struct _WebKitWebPolicyDecisionPrivate {
+ WebKitWebFrame* frame;
+ FramePolicyFunction framePolicyFunction;
+ gboolean isCancelled;
+};
+
+#define WEBKIT_WEB_POLICY_DECISION_GET_PRIVATE(obj) (G_TYPE_INSTANCE_GET_PRIVATE((obj), WEBKIT_TYPE_WEB_POLICY_DECISION, WebKitWebPolicyDecisionPrivate))
+
+static void webkit_web_policy_decision_class_init(WebKitWebPolicyDecisionClass* decisionClass)
+{
+ g_type_class_add_private(decisionClass, sizeof(WebKitWebPolicyDecisionPrivate));
+}
+
+static void webkit_web_policy_decision_init(WebKitWebPolicyDecision* decision)
+{
+ decision->priv = WEBKIT_WEB_POLICY_DECISION_GET_PRIVATE(decision);
+}
+
+WebKitWebPolicyDecision* webkit_web_policy_decision_new(WebKitWebFrame* frame, WebCore::FramePolicyFunction function)
+{
+ g_return_val_if_fail(frame, NULL);
+
+ WebKitWebPolicyDecision* decision = WEBKIT_WEB_POLICY_DECISION(g_object_new(WEBKIT_TYPE_WEB_POLICY_DECISION, NULL));
+ WebKitWebPolicyDecisionPrivate* priv = decision->priv;
+
+ priv->frame = frame;
+ priv->framePolicyFunction = function;
+ priv->isCancelled = FALSE;
+
+ return decision;
+}
+
+/**
+ * webkit_web_policy_decision_use
+ * @decision: a #WebKitWebPolicyDecision
+ *
+ * Will send the USE decision to the policy implementer.
+ *
+ * Since: 1.0.3
+ */
+void webkit_web_policy_decision_use(WebKitWebPolicyDecision* decision)
+{
+ g_return_if_fail(WEBKIT_IS_WEB_POLICY_DECISION(decision));
+
+ WebKitWebPolicyDecisionPrivate* priv = decision->priv;
+
+ if (!priv->isCancelled)
+ (core(priv->frame)->loader()->*(priv->framePolicyFunction))(WebCore::PolicyUse);
+}
+
+/**
+ * webkit_web_policy_decision_ignore
+ * @decision: a #WebKitWebPolicyDecision
+ *
+ * Will send the IGNORE decision to the policy implementer.
+ *
+ * Since: 1.0.3
+ */
+void webkit_web_policy_decision_ignore(WebKitWebPolicyDecision* decision)
+{
+ g_return_if_fail(WEBKIT_IS_WEB_POLICY_DECISION(decision));
+
+ WebKitWebPolicyDecisionPrivate* priv = decision->priv;
+
+ if (!priv->isCancelled)
+ (core(priv->frame)->loader()->*(priv->framePolicyFunction))(WebCore::PolicyIgnore);
+}
+
+/**
+ * webkit_web_policy_decision_download
+ * @decision: a #WebKitWebPolicyDecision
+ *
+ * Will send the DOWNLOAD decision to the policy implementer.
+ *
+ * Since: 1.0.3
+ */
+void webkit_web_policy_decision_download(WebKitWebPolicyDecision* decision)
+{
+ g_return_if_fail(WEBKIT_IS_WEB_POLICY_DECISION(decision));
+
+ WebKitWebPolicyDecisionPrivate* priv = decision->priv;
+
+ if (!priv->isCancelled)
+ (core(priv->frame)->loader()->*(priv->framePolicyFunction))(WebCore::PolicyDownload);
+}
+
+void webkit_web_policy_decision_cancel(WebKitWebPolicyDecision* decision)
+{
+ g_return_if_fail(WEBKIT_IS_WEB_POLICY_DECISION(decision));
+
+ WebKitWebPolicyDecisionPrivate* priv = decision->priv;
+
+ priv->isCancelled = TRUE;
+}
+
+}
diff --git a/WebKit/gtk/webkit/webkitwebpolicydecision.h b/WebKit/gtk/webkit/webkitwebpolicydecision.h
new file mode 100644
index 0000000..f1ec963
--- /dev/null
+++ b/WebKit/gtk/webkit/webkitwebpolicydecision.h
@@ -0,0 +1,68 @@
+/*
+ * Copyright (C) 2008 Collabora Ltd.
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public License
+ * along with this library; see the file COPYING.LIB. If not, write to
+ * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+ * Boston, MA 02110-1301, USA.
+ */
+
+#ifndef WEBKIT_WEB_POLICY_DECISION_H
+#define WEBKIT_WEB_POLICY_DECISION_H
+
+#include <glib-object.h>
+#include <stdint.h>
+#include "webkitdefines.h"
+
+G_BEGIN_DECLS
+
+#define WEBKIT_TYPE_WEB_POLICY_DECISION (webkit_web_policy_decision_get_type())
+#define WEBKIT_WEB_POLICY_DECISION(obj) (G_TYPE_CHECK_INSTANCE_CAST((obj), WEBKIT_TYPE_WEB_POLICY_DECISION, WebKitWebPolicyDecision))
+#define WEBKIT_WEB_POLICY_DECISION_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST((klass), WEBKIT_TYPE_WEB_POLICY_DECISION, WebKitWebPolicyDecisionClass))
+#define WEBKIT_IS_WEB_POLICY_DECISION(obj) (G_TYPE_CHECK_INSTANCE_TYPE((obj), WEBKIT_TYPE_WEB_POLICY_DECISION))
+#define WEBKIT_IS_WEB_POLICY_DECISION_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE((klass), WEBKIT_TYPE_WEB_POLICY_DECISION))
+#define WEBKIT_WEB_POLICY_DECISION_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS((obj), WEBKIT_TYPE_WEB_POLICY_DECISION, WebKitWebPolicyDecisionClass))
+
+typedef struct _WebKitWebPolicyDecisionPrivate WebKitWebPolicyDecisionPrivate;
+struct _WebKitWebPolicyDecision {
+ GObject parent_instance;
+
+ /*< private >*/
+ WebKitWebPolicyDecisionPrivate* priv;
+};
+
+struct _WebKitWebPolicyDecisionClass {
+ GObjectClass parent_class;
+
+ /* Padding for future expansion */
+ void (*_webkit_reserved0) (void);
+ void (*_webkit_reserved1) (void);
+ void (*_webkit_reserved2) (void);
+ void (*_webkit_reserved3) (void);
+};
+
+WEBKIT_API GType
+webkit_web_policy_decision_get_type (void);
+
+WEBKIT_API void
+webkit_web_policy_decision_use (WebKitWebPolicyDecision* decision);
+
+WEBKIT_API void
+webkit_web_policy_decision_ignore (WebKitWebPolicyDecision* decision);
+
+WEBKIT_API void
+webkit_web_policy_decision_download (WebKitWebPolicyDecision* decision);
+
+G_END_DECLS
+
+#endif
diff --git a/WebKit/gtk/webkit/webkitwebsettings.cpp b/WebKit/gtk/webkit/webkitwebsettings.cpp
index 49ab4c6..aa38c6c 100644
--- a/WebKit/gtk/webkit/webkitwebsettings.cpp
+++ b/WebKit/gtk/webkit/webkitwebsettings.cpp
@@ -2,6 +2,7 @@
* Copyright (C) 2008 Christian Dywan <christian@imendio.com>
* Copyright (C) 2008 Nuanti Ltd.
* Copyright (C) 2008 Collabora Ltd.
+ * Copyright (C) 2008 Holger Hans Peter Freyther
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Library General Public
@@ -24,6 +25,29 @@
#include "webkitwebsettings.h"
#include "webkitprivate.h"
+#include "FileSystem.h"
+#include "PluginDatabase.h"
+
+/**
+ * SECTION:webkitwebsettings
+ * @short_description: Control the behaviour of a #WebKitWebView
+ *
+ * #WebKitWebSettings can be applied to a #WebKitWebView to control
+ * the to be used text encoding, color, font sizes, printing mode,
+ * script support, loading of images and various other things.
+ *
+ * <informalexample><programlisting>
+ * /<!-- -->* Create a new websettings and disable java script *<!-- -->/
+ * WebKitWebSettings *settings = webkit_web_settings_new ();
+ * g_object_set (G_OBJECT(settings), "enable-scripts", FALSE, NULL);
+ *
+ * /<!-- -->* Apply the result *<!-- -->/
+ * webkit_web_view_set_settings (WEBKIT_WEB_VIEW(my_webview), settings);
+ * </programlisting></informalexample>
+ */
+
+using namespace WebCore;
+
extern "C" {
G_DEFINE_TYPE(WebKitWebSettings, webkit_web_settings, G_TYPE_OBJECT)
@@ -40,6 +64,7 @@ struct _WebKitWebSettingsPrivate {
guint default_monospace_font_size;
guint minimum_font_size;
guint minimum_logical_font_size;
+ gboolean enforce_96_dpi;
gboolean auto_load_images;
gboolean auto_shrink_images;
gboolean print_backgrounds;
@@ -67,6 +92,7 @@ enum {
PROP_DEFAULT_MONOSPACE_FONT_SIZE,
PROP_MINIMUM_FONT_SIZE,
PROP_MINIMUM_LOGICAL_FONT_SIZE,
+ PROP_ENFORCE_96_DPI,
PROP_AUTO_LOAD_IMAGES,
PROP_AUTO_SHRINK_IMAGES,
PROP_PRINT_BACKGROUNDS,
@@ -162,7 +188,7 @@ static void webkit_web_settings_class_init(WebKitWebSettingsClass* klass)
"default-font-size",
"Default Font Size",
"The default font size used to display text.",
- 5, G_MAXINT, 10,
+ 5, G_MAXINT, 12,
flags));
g_object_class_install_property(gobject_class,
@@ -192,6 +218,26 @@ static void webkit_web_settings_class_init(WebKitWebSettingsClass* klass)
1, G_MAXINT, 5,
flags));
+ /**
+ * WebKitWebSettings:enforce-96-dpi:
+ *
+ * Enforce a resolution of 96 DPI. This is meant for compatibility
+ * with web pages which cope badly with different screen resolutions
+ * and for automated testing.
+ * Web browsers and applications that typically display arbitrary
+ * content from the web should provide a preference for this.
+ *
+ * Since: 1.0.3
+ */
+ g_object_class_install_property(gobject_class,
+ PROP_ENFORCE_96_DPI,
+ g_param_spec_boolean(
+ "enforce-96-dpi",
+ "Enforce 96 DPI",
+ "Enforce a resolution of 96 DPI",
+ FALSE,
+ flags));
+
g_object_class_install_property(gobject_class,
PROP_AUTO_LOAD_IMAGES,
g_param_spec_boolean(
@@ -360,6 +406,9 @@ static void webkit_web_settings_set_property(GObject* object, guint prop_id, con
case PROP_MINIMUM_LOGICAL_FONT_SIZE:
priv->minimum_logical_font_size = g_value_get_int(value);
break;
+ case PROP_ENFORCE_96_DPI:
+ priv->enforce_96_dpi = g_value_get_boolean(value);
+ break;
case PROP_AUTO_LOAD_IMAGES:
priv->auto_load_images = g_value_get_boolean(value);
break;
@@ -433,6 +482,9 @@ static void webkit_web_settings_get_property(GObject* object, guint prop_id, GVa
case PROP_MINIMUM_LOGICAL_FONT_SIZE:
g_value_set_int(value, priv->minimum_logical_font_size);
break;
+ case PROP_ENFORCE_96_DPI:
+ g_value_set_boolean(value, priv->enforce_96_dpi);
+ break;
case PROP_AUTO_LOAD_IMAGES:
g_value_set_boolean(value, priv->auto_load_images);
break;
@@ -516,4 +568,20 @@ WebKitWebSettings* webkit_web_settings_copy(WebKitWebSettings* web_settings)
return copy;
}
+/**
+ * webkit_web_settings_add_extra_plugin_directory:
+ * @web_view: a #WebKitWebView
+ * @directory: the directory to add
+ *
+ * Adds the @directory to paths where @web_view will search for plugins.
+ *
+ * Since: 1.0.3
+ */
+void webkit_web_settings_add_extra_plugin_directory(WebKitWebView* webView, const gchar* directory)
+{
+ g_return_if_fail(WEBKIT_IS_WEB_VIEW(webView));
+
+ PluginDatabase::installedPlugins()->addExtraPluginDirectory(filenameToString(directory));
+}
+
}
diff --git a/WebKit/gtk/webkit/webkitwebsettings.h b/WebKit/gtk/webkit/webkitwebsettings.h
index 33fa54a..5d25fee 100644
--- a/WebKit/gtk/webkit/webkitwebsettings.h
+++ b/WebKit/gtk/webkit/webkitwebsettings.h
@@ -38,6 +38,7 @@ typedef struct _WebKitWebSettingsPrivate WebKitWebSettingsPrivate;
struct _WebKitWebSettings {
GObject parent_instance;
+ /*< private >*/
WebKitWebSettingsPrivate *priv;
};
diff --git a/WebKit/gtk/webkit/webkitwebview.cpp b/WebKit/gtk/webkit/webkitwebview.cpp
index 2c90b4e..0ea6ed5 100644
--- a/WebKit/gtk/webkit/webkitwebview.cpp
+++ b/WebKit/gtk/webkit/webkitwebview.cpp
@@ -1,9 +1,10 @@
/*
- * Copyright (C) 2007 Holger Hans Peter Freyther
+ * Copyright (C) 2007, 2008 Holger Hans Peter Freyther
* Copyright (C) 2007, 2008 Christian Dywan <christian@imendio.com>
* Copyright (C) 2007 Xan Lopez <xan@gnome.org>
* Copyright (C) 2007, 2008 Alp Toker <alp@atoker.com>
* Copyright (C) 2008 Jan Alonzo <jmalonzo@unpluggable.com>
+ * Copyright (C) 2008 Gustavo Noronha Silva <gns@gnome.org>
* Copyright (C) 2008 Nuanti Ltd.
* Copyright (C) 2008 Collabora Ltd.
*
@@ -25,6 +26,7 @@
#include "config.h"
#include "webkitwebview.h"
+#include "webkitenumtypes.h"
#include "webkitmarshal.h"
#include "webkitprivate.h"
#include "webkitwebinspector.h"
@@ -45,6 +47,7 @@
#include "Editor.h"
#include "EditorClientGtk.h"
#include "EventHandler.h"
+#include "FloatQuad.h"
#include "FocusController.h"
#include "FrameLoaderTypes.h"
#include "HitTestRequest.h"
@@ -57,12 +60,46 @@
#include "PasteboardHelper.h"
#include "PlatformKeyboardEvent.h"
#include "PlatformWheelEvent.h"
+#include "ScriptValue.h"
#include "Scrollbar.h"
#include "SubstituteData.h"
#include <wtf/GOwnPtr.h>
#include <gdk/gdkkeysyms.h>
+/**
+ * SECTION:webkitwebview
+ * @short_description: The central class of the WebKit/Gtk+ API
+ * @see_also: #WebKitWebSettings, #WebKitWebFrame
+ *
+ * #WebKitWebView is the central class of the WebKit/Gtk+ API. It is a
+ * #GtkWidget implementing the scrolling interface which means you can
+ * embed in a #GtkScrolledWindow. It is responsible for managing the
+ * drawing of the content, forwarding of events. You can load any URI
+ * into the #WebKitWebView or any kind of data string. With #WebKitWebSettings
+ * you can control various aspects of the rendering and loading of the content.
+ * Each #WebKitWebView has exactly one #WebKitWebFrame as main frame. A
+ * #WebKitWebFrame can have n children.
+ *
+ * <programlisting>
+ * /<!-- -->* Create the widgets *<!-- -->/
+ * GtkWidget *main_window = gtk_window_new (GTK_WIDGET_TOPLEVEL);
+ * GtkWidget *scrolled_window = gtk_scrolled_window_new (NULL, NULL);
+ * GtkWidget *web_view = webkit_web_view_new ();
+ *
+ * /<!-- -->* Place the WebKitWebView in the GtkScrolledWindow *<!-- -->/
+ * gtk_container_add (GTK_CONTAINER (scrolled_window), web_view);
+ * gtk_container_add (GTK_CONTAINER (main_window), scrolled_window);
+ *
+ * /<!-- -->* Open a webpage *<!-- -->/
+ * webkit_web_view_open (WEBKIT_WEB_VIEW (web_view), "http://www.gnome.org");
+ *
+ * /<!-- -->* Show the result *<!-- -->/
+ * gtk_window_set_default_size (GTK_WINDOW (main_window), 800, 600);
+ * gtk_widget_show_all (main_window);
+ * </programlisting>
+ */
+
static const double defaultDPI = 96.0;
using namespace WebKit;
@@ -73,6 +110,10 @@ extern "C" {
enum {
/* normal signals */
NAVIGATION_REQUESTED,
+ NAVIGATION_POLICY_DECISION_REQUESTED,
+ MIME_TYPE_POLICY_DECISION_REQUESTED,
+ CREATE_WEB_VIEW,
+ WEB_VIEW_READY,
WINDOW_OBJECT_CLEARED,
LOAD_STARTED,
LOAD_COMMITTED,
@@ -103,6 +144,7 @@ enum {
PROP_EDITABLE,
PROP_SETTINGS,
PROP_WEB_INSPECTOR,
+ PROP_WINDOW_FEATURES,
PROP_TRANSPARENT,
PROP_ZOOM_LEVEL,
PROP_FULL_CONTENT_ZOOM
@@ -113,6 +155,7 @@ static guint webkit_web_view_signals[LAST_SIGNAL] = { 0, };
G_DEFINE_TYPE(WebKitWebView, webkit_web_view, GTK_TYPE_CONTAINER)
static void webkit_web_view_settings_notify(WebKitWebSettings* webSettings, GParamSpec* pspec, WebKitWebView* webView);
+static void webkit_web_view_set_window_features(WebKitWebView* webView, WebKitWebWindowFeatures* webWindowFeatures);
static void webkit_web_view_context_menu_position_func(GtkMenu*, gint* x, gint* y, gboolean* pushIn, WebKitWebViewPrivate* data)
{
@@ -183,18 +226,23 @@ static gboolean webkit_web_view_popup_menu_handler(GtkWidget* widget)
if (!renderer)
return FALSE;
- // Calculate the rect of the first line of the selection (cribbed from -[WebCoreFrameBridge firstRectForDOMRange:]).
+ // Calculate the rect of the first line of the selection (cribbed from -[WebCoreFrameBridge firstRectForDOMRange:],
+ // now Frame::firstRectForRange(), which perhaps this should call).
int extraWidthToEndOfLine = 0;
InlineBox* startInlineBox;
int startCaretOffset;
start.getInlineBoxAndOffset(DOWNSTREAM, startInlineBox, startCaretOffset);
- IntRect startCaretRect = renderer->caretRect(startInlineBox, startCaretOffset, &extraWidthToEndOfLine);
+ IntRect startCaretRect = renderer->localCaretRect(startInlineBox, startCaretOffset, &extraWidthToEndOfLine);
+ if (startCaretRect != IntRect())
+ startCaretRect = renderer->localToAbsoluteQuad(FloatRect(startCaretRect)).enclosingBoundingBox();
InlineBox* endInlineBox;
int endCaretOffset;
end.getInlineBoxAndOffset(UPSTREAM, endInlineBox, endCaretOffset);
- IntRect endCaretRect = renderer->caretRect(endInlineBox, endCaretOffset);
+ IntRect endCaretRect = renderer->localCaretRect(endInlineBox, endCaretOffset);
+ if (endCaretRect != IntRect())
+ endCaretRect = renderer->localToAbsoluteQuad(FloatRect(endCaretRect)).enclosingBoundingBox();
IntRect firstRect;
if (startCaretRect.y() == endCaretRect.y())
@@ -245,6 +293,9 @@ static void webkit_web_view_get_property(GObject* object, guint prop_id, GValue*
case PROP_WEB_INSPECTOR:
g_value_set_object(value, webkit_web_view_get_inspector(webView));
break;
+ case PROP_WINDOW_FEATURES:
+ g_value_set_object(value, webkit_web_view_get_window_features(webView));
+ break;
case PROP_TRANSPARENT:
g_value_set_boolean(value, webkit_web_view_get_transparent(webView));
break;
@@ -270,6 +321,9 @@ static void webkit_web_view_set_property(GObject* object, guint prop_id, const G
case PROP_SETTINGS:
webkit_web_view_set_settings(webView, WEBKIT_WEB_SETTINGS(g_value_get_object(value)));
break;
+ case PROP_WINDOW_FEATURES:
+ webkit_web_view_set_window_features(webView, WEBKIT_WEB_WINDOW_FEATURES(g_value_get_object(value)));
+ break;
case PROP_TRANSPARENT:
webkit_web_view_set_transparent(webView, g_value_get_boolean(value));
break;
@@ -548,6 +602,9 @@ static void webkit_web_view_realize(GtkWidget* widget)
static void webkit_web_view_set_scroll_adjustments(WebKitWebView* webView, GtkAdjustment* hadj, GtkAdjustment* vadj)
{
+ if (!core(webView))
+ return;
+
FrameView* view = core(webkit_web_view_get_main_frame(webView))->view();
if (hadj)
@@ -604,15 +661,18 @@ static void webkit_web_view_container_forall(GtkContainer* container, gboolean,
(*callback)(*current, callbackData);
}
-static WebKitWebView* webkit_web_view_real_create_web_view(WebKitWebView*)
+static WebKitWebView* webkit_web_view_real_create_web_view(WebKitWebView*, WebKitWebFrame*)
{
- notImplemented();
return 0;
}
-static WebKitNavigationResponse webkit_web_view_real_navigation_requested(WebKitWebView*, WebKitWebFrame* frame, WebKitNetworkRequest*)
+static gboolean webkit_web_view_real_web_view_ready(WebKitWebView*)
+{
+ return FALSE;
+}
+
+static WebKitNavigationResponse webkit_web_view_real_navigation_requested(WebKitWebView*, WebKitWebFrame*, WebKitNetworkRequest*)
{
- notImplemented();
return WEBKIT_NAVIGATION_RESPONSE_ACCEPT;
}
@@ -751,48 +811,85 @@ static void webkit_web_view_real_paste_clipboard(WebKitWebView* webView)
frame->editor()->command("Paste").execute();
}
-static void webkit_web_view_finalize(GObject* object)
+static void webkit_web_view_dispose(GObject* object)
{
WebKitWebView* webView = WEBKIT_WEB_VIEW(object);
WebKitWebViewPrivate* priv = webView->priv;
- webkit_web_view_stop_loading(WEBKIT_WEB_VIEW(object));
+ if (priv->corePage) {
+ webkit_web_view_stop_loading(WEBKIT_WEB_VIEW(object));
- core(priv->mainFrame)->loader()->detachChildren();
- delete priv->corePage;
+ core(priv->mainFrame)->loader()->detachChildren();
+ delete priv->corePage;
+ priv->corePage = NULL;
+ }
- if (priv->horizontalAdjustment)
+ if (priv->horizontalAdjustment) {
g_object_unref(priv->horizontalAdjustment);
- if (priv->verticalAdjustment)
+ priv->horizontalAdjustment = NULL;
+ }
+
+ if (priv->verticalAdjustment) {
g_object_unref(priv->verticalAdjustment);
- g_object_unref(priv->backForwardList);
- g_signal_handlers_disconnect_by_func(priv->webSettings, (gpointer)webkit_web_view_settings_notify, webView);
- g_object_unref(priv->webSettings);
- g_object_unref(priv->webInspector);
- g_object_unref(priv->mainFrame);
- g_object_unref(priv->imContext);
- gtk_target_list_unref(priv->copy_target_list);
- gtk_target_list_unref(priv->paste_target_list);
- delete priv->userAgent;
+ priv->verticalAdjustment = NULL;
+ }
+
+ if (priv->backForwardList) {
+ g_object_unref(priv->backForwardList);
+ priv->backForwardList = NULL;
+
+ g_signal_handlers_disconnect_by_func(priv->webSettings, (gpointer)webkit_web_view_settings_notify, webView);
+ g_object_unref(priv->webSettings);
+ priv->webSettings = NULL;
+
+ g_object_unref(priv->webInspector);
+ priv->webInspector = NULL;
- G_OBJECT_CLASS(webkit_web_view_parent_class)->finalize(object);
+ g_object_unref(priv->webWindowFeatures);
+ priv->webWindowFeatures = NULL;
+
+ g_object_unref(priv->imContext);
+ priv->imContext = NULL;
+
+ gtk_target_list_unref(priv->copy_target_list);
+ priv->copy_target_list = NULL;
+
+ gtk_target_list_unref(priv->paste_target_list);
+ priv->paste_target_list = NULL;
+
+ delete priv->userAgent;
+ priv->userAgent = NULL;
+ }
+
+ G_OBJECT_CLASS(webkit_web_view_parent_class)->dispose(object);
+}
+
+static gboolean webkit_create_web_view_request_handled(GSignalInvocationHint* ihint, GValue* returnAccu, const GValue* handlerReturn, gpointer dummy)
+{
+ gpointer newWebView = g_value_get_object(handlerReturn);
+ g_value_set_object(returnAccu, newWebView);
+
+ // Continue if we don't have a newWebView
+ return !newWebView;
}
static gboolean webkit_navigation_request_handled(GSignalInvocationHint* ihint, GValue* returnAccu, const GValue* handlerReturn, gpointer dummy)
{
- gboolean continueEmission = TRUE;
- int signalHandled = g_value_get_int(handlerReturn);
- g_value_set_int(returnAccu, signalHandled);
+ WebKitNavigationResponse navigationResponse = (WebKitNavigationResponse)g_value_get_enum(handlerReturn);
+ g_value_set_enum(returnAccu, navigationResponse);
- if (signalHandled != WEBKIT_NAVIGATION_RESPONSE_ACCEPT)
- continueEmission = FALSE;
+ if (navigationResponse != WEBKIT_NAVIGATION_RESPONSE_ACCEPT)
+ return FALSE;
- return continueEmission;
+ return TRUE;
}
static AtkObject* webkit_web_view_get_accessible(GtkWidget* widget)
{
WebKitWebView* webView = WEBKIT_WEB_VIEW(widget);
+ if (!core(webView))
+ return NULL;
+
AXObjectCache::enableAccessibility();
Frame* coreFrame = core(webView)->mainFrame();
@@ -820,16 +917,145 @@ static void webkit_web_view_class_init(WebKitWebViewClass* webViewClass)
* Signals
*/
+ /**
+ * WebKitWebView::create-web-view:
+ * @web_view: the object on which the signal is emitted
+ * @frame: the #WebKitWebFrame
+ * @return: a newly allocated #WebKitWebView or %NULL
+ *
+ * Emitted when the creation of a new window is requested.
+ * If this signal is handled the signal handler should return the
+ * newly created #WebKitWebView.
+ *
+ * The new #WebKitWebView should not be displayed to the user
+ * until the #WebKitWebView::web-view-ready signal is emitted.
+ *
+ * The signal handlers should not try to deal with the reference
+ * count for the new #WebKitWebView. The widget to which the
+ * widget is added will handle that.
+ *
+ * Since 1.0.3
+ */
+ webkit_web_view_signals[CREATE_WEB_VIEW] = g_signal_new("create-web-view",
+ G_TYPE_FROM_CLASS(webViewClass),
+ (GSignalFlags)(G_SIGNAL_RUN_LAST | G_SIGNAL_ACTION),
+ G_STRUCT_OFFSET (WebKitWebViewClass, create_web_view),
+ webkit_create_web_view_request_handled,
+ NULL,
+ webkit_marshal_OBJECT__OBJECT,
+ WEBKIT_TYPE_WEB_VIEW , 1,
+ WEBKIT_TYPE_WEB_FRAME);
+
+ /**
+ * WebKitWebView::web-view-ready:
+ * @web_view: the object on which the signal is emitted
+ * @return: %TRUE to stop other handlers from being invoked for
+ * the event, %FALSE to propagate the event further
+ *
+ * Emitted after #WebKitWebView::create-web-view when the new #WebKitWebView
+ * should be displayed to the user. When this signal is emitted
+ * all the information about how the window should look, including
+ * size, position, whether the location, status and scroll bars
+ * should be displayed, is already set on the
+ * #WebKitWebWindowFeatures object contained by the #WebKitWebView.
+ *
+ * Notice that some of that information may change during the life
+ * time of the window, so you may want to connect to the ::notify
+ * signal of the #WebKitWebWindowFeatures object to handle those.
+ *
+ * Since 1.0.3
+ */
+ webkit_web_view_signals[WEB_VIEW_READY] = g_signal_new("web-view-ready",
+ G_TYPE_FROM_CLASS(webViewClass),
+ (GSignalFlags)(G_SIGNAL_RUN_LAST),
+ G_STRUCT_OFFSET (WebKitWebViewClass, web_view_ready),
+ g_signal_accumulator_true_handled,
+ NULL,
+ webkit_marshal_BOOLEAN__VOID,
+ G_TYPE_BOOLEAN, 0);
+
+ /**
+ * WebKitWebView::navigation-requested:
+ * @web_view: the object on which the signal is emitted
+ * @frame: the #WebKitWebFrame that required the navigation
+ * @request: a #WebKitNetworkRequest
+ * @return: a WebKitNavigationResponse
+ *
+ * Emitted when @frame requests a navigation to another page.
+ *
+ * Deprecated: Use WebKitWebView::navigation-policy-decision-requested
+ * instead
+ */
webkit_web_view_signals[NAVIGATION_REQUESTED] = g_signal_new("navigation-requested",
G_TYPE_FROM_CLASS(webViewClass),
(GSignalFlags)(G_SIGNAL_RUN_LAST | G_SIGNAL_ACTION),
G_STRUCT_OFFSET (WebKitWebViewClass, navigation_requested),
webkit_navigation_request_handled,
NULL,
- webkit_marshal_INT__OBJECT_OBJECT,
- G_TYPE_INT, 2,
- G_TYPE_OBJECT,
- G_TYPE_OBJECT);
+ webkit_marshal_ENUM__OBJECT_OBJECT,
+ WEBKIT_TYPE_NAVIGATION_RESPONSE, 2,
+ WEBKIT_TYPE_WEB_FRAME,
+ WEBKIT_TYPE_NETWORK_REQUEST);
+
+ /**
+ * WebKitWebView::navigation-policy-decision-requested:
+ * @web_view: the object on which the signal is emitted
+ * @frame: the #WebKitWebFrame that required the navigation
+ * @request: a #WebKitNetworkRequest
+ * @navigation_action: a #WebKitWebNavigation
+ * @policy_decision: a #WebKitWebPolicyDecision
+ * @return: TRUE if the signal will be handled, FALSE to have the
+ * default behavior apply
+ *
+ * Emitted when @frame requests a navigation to another page.
+ * If this signal is not handled, the default behavior is to allow the
+ * navigation.
+ *
+ * Since: 1.0.3
+ */
+ webkit_web_view_signals[NAVIGATION_POLICY_DECISION_REQUESTED] = g_signal_new("navigation-policy-decision-requested",
+ G_TYPE_FROM_CLASS(webViewClass),
+ (GSignalFlags)(G_SIGNAL_RUN_LAST | G_SIGNAL_ACTION),
+ 0,
+ g_signal_accumulator_true_handled,
+ NULL,
+ webkit_marshal_BOOLEAN__OBJECT_OBJECT_OBJECT_OBJECT,
+ G_TYPE_BOOLEAN, 4,
+ WEBKIT_TYPE_WEB_FRAME,
+ WEBKIT_TYPE_NETWORK_REQUEST,
+ WEBKIT_TYPE_WEB_NAVIGATION_ACTION,
+ WEBKIT_TYPE_WEB_POLICY_DECISION);
+
+ /**
+ * WebKitWebView::mime-type-policy-decision-requested:
+ * @web_view: the object on which the signal is emitted
+ * @frame: the #WebKitWebFrame that required the policy decision
+ * @request: a WebKitNetworkRequest
+ * @mimetype: the MIME type attempted to load
+ * @policy_decision: a #WebKitWebPolicyDecision
+ * @return: TRUE if the signal will be handled, FALSE to have the
+ * default behavior apply
+ *
+ * Decide whether or not to display the given MIME type. If this
+ * signal is not handled, the default behavior is to show the
+ * content of the requested URI if WebKit can show this MIME
+ * type; if WebKit is not able to show the MIME type nothing
+ * happens.
+ *
+ * Since: 1.0.3
+ */
+ webkit_web_view_signals[MIME_TYPE_POLICY_DECISION_REQUESTED] = g_signal_new("mime-type-policy-decision-requested",
+ G_TYPE_FROM_CLASS(webViewClass),
+ (GSignalFlags)(G_SIGNAL_RUN_LAST | G_SIGNAL_ACTION),
+ 0,
+ g_signal_accumulator_true_handled,
+ NULL,
+ webkit_marshal_BOOLEAN__OBJECT_OBJECT_STRING_OBJECT,
+ G_TYPE_BOOLEAN, 4,
+ WEBKIT_TYPE_WEB_FRAME,
+ WEBKIT_TYPE_NETWORK_REQUEST,
+ G_TYPE_STRING,
+ WEBKIT_TYPE_WEB_POLICY_DECISION);
/**
* WebKitWebView::window-object-cleared:
@@ -1087,7 +1313,7 @@ static void webkit_web_view_class_init(WebKitWebViewClass* webViewClass)
* WebKitWebView::select-all:
* @web_view: the object which received the signal
*
- * The ::select-all signal is a keybinding signal which gets emitted to
+ * The #WebKitWebView::select-all signal is a keybinding signal which gets emitted to
* select the complete contents of the text view.
*
* The default bindings for this signal is Ctrl-a.
@@ -1104,7 +1330,7 @@ static void webkit_web_view_class_init(WebKitWebViewClass* webViewClass)
* WebKitWebView::cut-clipboard:
* @web_view: the object which received the signal
*
- * The ::cut-clipboard signal is a keybinding signal which gets emitted to
+ * The #WebKitWebView::cut-clipboard signal is a keybinding signal which gets emitted to
* cut the selection to the clipboard.
*
* The default bindings for this signal are Ctrl-x and Shift-Delete.
@@ -1121,7 +1347,7 @@ static void webkit_web_view_class_init(WebKitWebViewClass* webViewClass)
* WebKitWebView::copy-clipboard:
* @web_view: the object which received the signal
*
- * The ::copy-clipboard signal is a keybinding signal which gets emitted to
+ * The #WebKitWebView::copy-clipboard signal is a keybinding signal which gets emitted to
* copy the selection to the clipboard.
*
* The default bindings for this signal are Ctrl-c and Ctrl-Insert.
@@ -1138,7 +1364,7 @@ static void webkit_web_view_class_init(WebKitWebViewClass* webViewClass)
* WebKitWebView::paste-clipboard:
* @web_view: the object which received the signal
*
- * The ::paste-clipboard signal is a keybinding signal which gets emitted to
+ * The #WebKitWebView::paste-clipboard signal is a keybinding signal which gets emitted to
* paste the contents of the clipboard into the Web view.
*
* The default bindings for this signal are Ctrl-v and Shift-Insert.
@@ -1155,6 +1381,7 @@ static void webkit_web_view_class_init(WebKitWebViewClass* webViewClass)
* implementations of virtual methods
*/
webViewClass->create_web_view = webkit_web_view_real_create_web_view;
+ webViewClass->web_view_ready = webkit_web_view_real_web_view_ready;
webViewClass->navigation_requested = webkit_web_view_real_navigation_requested;
webViewClass->window_object_cleared = webkit_web_view_real_window_object_cleared;
webViewClass->choose_file = webkit_web_view_real_choose_file;
@@ -1168,7 +1395,7 @@ static void webkit_web_view_class_init(WebKitWebViewClass* webViewClass)
webViewClass->paste_clipboard = webkit_web_view_real_paste_clipboard;
GObjectClass* objectClass = G_OBJECT_CLASS(webViewClass);
- objectClass->finalize = webkit_web_view_finalize;
+ objectClass->dispose = webkit_web_view_dispose;
objectClass->get_property = webkit_web_view_get_property;
objectClass->set_property = webkit_web_view_set_property;
@@ -1285,6 +1512,20 @@ static void webkit_web_view_class_init(WebKitWebViewClass* webViewClass)
WEBKIT_TYPE_WEB_INSPECTOR,
WEBKIT_PARAM_READABLE));
+ /**
+ * WebKitWebView:window-features:
+ *
+ * An associated WebKitWebWindowFeatures instance.
+ *
+ * Since: 1.0.3
+ */
+ g_object_class_install_property(objectClass, PROP_WINDOW_FEATURES,
+ g_param_spec_object("window-features",
+ "Window Features",
+ "An associated WebKitWebWindowFeatures instance",
+ WEBKIT_TYPE_WEB_WINDOW_FEATURES,
+ WEBKIT_PARAM_READWRITE));
+
g_object_class_install_property(objectClass, PROP_EDITABLE,
g_param_spec_boolean("editable",
"Editable",
@@ -1332,20 +1573,14 @@ static void webkit_web_view_class_init(WebKitWebViewClass* webViewClass)
g_type_class_add_private(webViewClass, sizeof(WebKitWebViewPrivate));
}
-static void webkit_web_view_screen_changed(WebKitWebView* webView, GdkScreen* previousScreen, gpointer userdata)
+static gdouble webViewGetDPI(WebKitWebView* webView)
{
WebKitWebViewPrivate* priv = webView->priv;
WebKitWebSettings* webSettings = priv->webSettings;
- Settings* settings = core(webView)->settings();
-
- guint defaultFontSize, defaultMonospaceFontSize, minimumFontSize, minimumLogicalFontSize;
-
- g_object_get(G_OBJECT(webSettings),
- "default-font-size", &defaultFontSize,
- "default-monospace-font-size", &defaultMonospaceFontSize,
- "minimum-font-size", &minimumFontSize,
- "minimum-logical-font-size", &minimumLogicalFontSize,
- NULL);
+ gboolean enforce96DPI;
+ g_object_get(webSettings, "enforce-96-dpi", &enforce96DPI, NULL);
+ if (enforce96DPI)
+ return 96.0;
gdouble DPI = defaultDPI;
#if GTK_CHECK_VERSION(2,10,0)
@@ -1358,6 +1593,25 @@ static void webkit_web_view_screen_changed(WebKitWebView* webView, GdkScreen* pr
}
#endif
ASSERT(DPI > 0);
+ return DPI;
+}
+
+static void webkit_web_view_screen_changed(WebKitWebView* webView, GdkScreen* previousScreen, gpointer userdata)
+{
+ WebKitWebViewPrivate* priv = webView->priv;
+ WebKitWebSettings* webSettings = priv->webSettings;
+ Settings* settings = core(webView)->settings();
+ gdouble DPI = webViewGetDPI(webView);
+
+ guint defaultFontSize, defaultMonospaceFontSize, minimumFontSize, minimumLogicalFontSize;
+
+ g_object_get(webSettings,
+ "default-font-size", &defaultFontSize,
+ "default-monospace-font-size", &defaultMonospaceFontSize,
+ "minimum-font-size", &minimumFontSize,
+ "minimum-logical-font-size", &minimumLogicalFontSize,
+ NULL);
+
settings->setDefaultFontSize(defaultFontSize / 72.0 * DPI);
settings->setDefaultFixedFontSize(defaultMonospaceFontSize / 72.0 * DPI);
settings->setMinimumFontSize(minimumFontSize / 72.0 * DPI);
@@ -1373,7 +1627,7 @@ static void webkit_web_view_update_settings(WebKitWebView* webView)
gchar* defaultEncoding, *cursiveFontFamily, *defaultFontFamily, *fantasyFontFamily, *monospaceFontFamily, *sansSerifFontFamily, *serifFontFamily, *userStylesheetUri;
gboolean autoLoadImages, autoShrinkImages, printBackgrounds, enableScripts, enablePlugins, enableDeveloperExtras, resizableTextAreas;
- g_object_get(G_OBJECT(webSettings),
+ g_object_get(webSettings,
"default-encoding", &defaultEncoding,
"cursive-font-family", &cursiveFontFamily,
"default-font-family", &defaultFontFamily,
@@ -1419,6 +1673,12 @@ static void webkit_web_view_update_settings(WebKitWebView* webView)
webkit_web_view_screen_changed(webView, NULL, NULL);
}
+static inline gint pixelsFromSize(WebKitWebView* webView, gint size)
+{
+ gdouble DPI = webViewGetDPI(webView);
+ return size / 72.0 * DPI;
+}
+
static void webkit_web_view_settings_notify(WebKitWebSettings* webSettings, GParamSpec* pspec, WebKitWebView* webView)
{
Settings* settings = core(webView)->settings();
@@ -1443,13 +1703,15 @@ static void webkit_web_view_settings_notify(WebKitWebSettings* webSettings, GPar
else if (name == g_intern_string("serif-font-family"))
settings->setSerifFontFamily(g_value_get_string(&value));
else if (name == g_intern_string("default-font-size"))
- settings->setDefaultFontSize(g_value_get_int(&value));
+ settings->setDefaultFontSize(pixelsFromSize(webView, g_value_get_int(&value)));
else if (name == g_intern_string("default-monospace-font-size"))
- settings->setDefaultFixedFontSize(g_value_get_int(&value));
+ settings->setDefaultFixedFontSize(pixelsFromSize(webView, g_value_get_int(&value)));
else if (name == g_intern_string("minimum-font-size"))
- settings->setMinimumFontSize(g_value_get_int(&value));
+ settings->setMinimumFontSize(pixelsFromSize(webView, g_value_get_int(&value)));
else if (name == g_intern_string("minimum-logical-font-size"))
- settings->setMinimumLogicalFontSize(g_value_get_int(&value));
+ settings->setMinimumLogicalFontSize(pixelsFromSize(webView, g_value_get_int(&value)));
+ else if (name == g_intern_string("enforce-96-dpi"))
+ webkit_web_view_screen_changed(webView, NULL, NULL);
else if (name == g_intern_string("auto-load-images"))
settings->setLoadsImagesAutomatically(g_value_get_boolean(&value));
else if (name == g_intern_string("auto-shrink-images"))
@@ -1527,6 +1789,8 @@ static void webkit_web_view_init(WebKitWebView* webView)
webkit_web_view_update_settings(webView);
g_signal_connect(webView, "screen-changed", G_CALLBACK(webkit_web_view_screen_changed), NULL);
g_signal_connect(priv->webSettings, "notify", G_CALLBACK(webkit_web_view_settings_notify), webView);
+
+ priv->webWindowFeatures = webkit_web_window_features_new();
}
GtkWidget* webkit_web_view_new(void)
@@ -1536,6 +1800,16 @@ GtkWidget* webkit_web_view_new(void)
return GTK_WIDGET(webView);
}
+// for internal use only
+void webkit_web_view_notify_ready(WebKitWebView* webView)
+{
+ g_return_if_fail(WEBKIT_IS_WEB_VIEW(webView));
+
+ gboolean isHandled = FALSE;
+ g_signal_emit(webView, webkit_web_view_signals[WEB_VIEW_READY], 0, &isHandled);
+}
+
+
void webkit_web_view_set_settings(WebKitWebView* webView, WebKitWebSettings* webSettings)
{
g_return_if_fail(WEBKIT_IS_WEB_VIEW(webView));
@@ -1561,7 +1835,7 @@ WebKitWebSettings* webkit_web_view_get_settings(WebKitWebView* webView)
/**
* webkit_web_view_get_inspector:
- * @webView: a #WebKitWebView
+ * @web_view: a #WebKitWebView
*
* Obtains the #WebKitWebInspector associated with the
* #WebKitWebView. Every #WebKitWebView object has a
@@ -1583,9 +1857,41 @@ WebKitWebInspector* webkit_web_view_get_inspector(WebKitWebView* webView)
return priv->webInspector;
}
+// internal
+static void webkit_web_view_set_window_features(WebKitWebView* webView, WebKitWebWindowFeatures* webWindowFeatures)
+{
+ WebKitWebViewPrivate* priv = webView->priv;
+
+ if(webkit_web_window_features_equal(priv->webWindowFeatures, webWindowFeatures))
+ return;
+
+ g_object_unref(priv->webWindowFeatures);
+ g_object_ref(webWindowFeatures);
+ priv->webWindowFeatures = webWindowFeatures;
+}
+
+/**
+ * webkit_web_view_get_window_features
+ * @web_view: a #WebKitWebView
+ *
+ * Returns the instance of #WebKitWebWindowFeatures held by the given
+ * #WebKitWebView.
+ *
+ * Return value: the #WebKitWebWindowFeatures
+ *
+ * Since: 1.0.3
+ */
+WebKitWebWindowFeatures* webkit_web_view_get_window_features(WebKitWebView* webView)
+{
+ g_return_val_if_fail(WEBKIT_IS_WEB_VIEW(webView), NULL);
+
+ WebKitWebViewPrivate* priv = webView->priv;
+ return priv->webWindowFeatures;
+}
+
/**
* webkit_web_view_set_maintains_back_forward_list:
- * @webView: a #WebKitWebView
+ * @web_view: a #WebKitWebView
* @flag: to tell the view to maintain a back or forward list
*
* Set the view to maintain a back or forward list of history items.
@@ -1599,7 +1905,7 @@ void webkit_web_view_set_maintains_back_forward_list(WebKitWebView* webView, gbo
/**
* webkit_web_view_get_back_forward_list:
- * @webView: a #WebKitWebView
+ * @web_view: a #WebKitWebView
*
* Returns a #WebKitWebBackForwardList
*
@@ -1619,7 +1925,7 @@ WebKitWebBackForwardList* webkit_web_view_get_back_forward_list(WebKitWebView* w
/**
* webkit_web_view_go_to_back_forward_item:
- * @webView: a #WebKitWebView
+ * @web_view: a #WebKitWebView
* @item: a #WebKitWebHistoryItem*
*
* Go to the specified #WebKitWebHistoryItem
@@ -1758,6 +2064,21 @@ void webkit_web_view_reload(WebKitWebView* webView)
core(webView)->mainFrame()->loader()->reload();
}
+/**
+ * webkit_web_view_reload_bypass_cache:
+ * @web_view: a #WebKitWebView
+ *
+ * Reloads the @web_view without using any cached data.
+ *
+ * Since: 1.0.3
+ */
+void webkit_web_view_reload_bypass_cache(WebKitWebView* webView)
+{
+ g_return_if_fail(WEBKIT_IS_WEB_VIEW(webView));
+
+ core(webView)->mainFrame()->loader()->reload(true);
+}
+
void webkit_web_view_load_string(WebKitWebView* webView, const gchar* content, const gchar* contentMimeType, const gchar* contentEncoding, const gchar* baseUri)
{
g_return_if_fail(WEBKIT_IS_WEB_VIEW(webView));
@@ -2148,6 +2469,29 @@ GtkTargetList* webkit_web_view_get_paste_target_list(WebKitWebView* webView)
}
/**
+ * webkit_web_view_can_show_mime_type:
+ * @web_view: a #WebKitWebView
+ * @mime_type: a MIME type
+ *
+ * This functions returns whether or not a MIME type can be displayed using this view.
+ *
+ * Return value: a #gboolean indicating if the MIME type can be displayed
+ *
+ * Since: 1.0.3
+ **/
+
+gboolean webkit_web_view_can_show_mime_type(WebKitWebView* webView, const gchar* mimeType)
+{
+ g_return_val_if_fail(WEBKIT_IS_WEB_VIEW(webView), FALSE);
+
+ Frame* frame = core(webkit_web_view_get_main_frame(webView));
+ if (FrameLoader* loader = frame->loader())
+ return loader->canShowMIMEType(String::fromUTF8(mimeType));
+ else
+ return FALSE;
+}
+
+/**
* webkit_web_view_get_transparent:
* @web_view: a #WebKitWebView
*
diff --git a/WebKit/gtk/webkit/webkitwebview.h b/WebKit/gtk/webkit/webkitwebview.h
index 7371959..2bb8c61 100644
--- a/WebKit/gtk/webkit/webkitwebview.h
+++ b/WebKit/gtk/webkit/webkitwebview.h
@@ -1,6 +1,7 @@
/*
* Copyright (C) 2007 Holger Hans Peter Freyther
* Copyright (C) 2007, 2008 Alp Toker <alp@atoker.com>
+ * Copyright (C) 2008 Collabora Ltd.
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Library General Public
@@ -55,23 +56,22 @@ typedef enum
struct _WebKitWebView {
GtkContainer parent_instance;
+ /*< private >*/
WebKitWebViewPrivate *priv;
};
struct _WebKitWebViewClass {
GtkContainerClass parent_class;
+ /*< public >*/
/*
* default handler/virtual methods
- * DISCUSS: create_web_view needs a request and should we make this a signal with default handler? this would
- * require someone doing a g_signal_stop_emission_by_name
- * WebUIDelegate has nothing for create_frame, WebPolicyDelegate as well...
*/
- WebKitWebView * (* create_web_view) (WebKitWebView* web_view);
+ WebKitWebView * (* create_web_view) (WebKitWebView *web_view,
+ WebKitWebFrame *web_frame);
+
+ gboolean (* web_view_ready) (WebKitWebView* web_view);
- /*
- * TODO: FIXME: Create something like WebPolicyDecisionListener_Protocol instead
- */
WebKitNavigationResponse (* navigation_requested) (WebKitWebView *web_view,
WebKitWebFrame *frame,
WebKitNetworkRequest *request);
@@ -109,6 +109,15 @@ struct _WebKitWebViewClass {
void (* set_scroll_adjustments) (WebKitWebView *web_view,
GtkAdjustment *hadjustment,
GtkAdjustment *vadjustment);
+ /* Padding for future expansion */
+ void (*_webkit_reserved0) (void);
+ void (*_webkit_reserved1) (void);
+ void (*_webkit_reserved2) (void);
+ void (*_webkit_reserved3) (void);
+ void (*_webkit_reserved4) (void);
+ void (*_webkit_reserved5) (void);
+ void (*_webkit_reserved6) (void);
+ void (*_webkit_reserved7) (void);
};
WEBKIT_API GType
@@ -159,6 +168,9 @@ WEBKIT_API void
webkit_web_view_reload (WebKitWebView *web_view);
WEBKIT_API void
+webkit_web_view_reload_bypass_cache (WebKitWebView *web_view);
+
+WEBKIT_API void
webkit_web_view_load_string (WebKitWebView *web_view,
const gchar *content,
const gchar *content_mime_type,
@@ -172,7 +184,7 @@ webkit_web_view_load_html_string (WebKitWebView *web_view,
WEBKIT_API gboolean
webkit_web_view_search_text (WebKitWebView *web_view,
- const gchar *string,
+ const gchar *text,
gboolean case_sensitive,
gboolean forward,
gboolean wrap);
@@ -250,6 +262,13 @@ webkit_web_view_get_settings (WebKitWebView *web_view)
WEBKIT_API WebKitWebInspector *
webkit_web_view_get_inspector (WebKitWebView *web_view);
+WEBKIT_API WebKitWebWindowFeatures*
+webkit_web_view_get_window_features (WebKitWebView *web_view);
+
+WEBKIT_API gboolean
+webkit_web_view_can_show_mime_type (WebKitWebView *web_view,
+ const gchar *mime_type);
+
WEBKIT_API gboolean
webkit_web_view_get_transparent (WebKitWebView *web_view);
diff --git a/WebKit/gtk/webkit/webkitwebwindowfeatures.cpp b/WebKit/gtk/webkit/webkitwebwindowfeatures.cpp
new file mode 100644
index 0000000..7e61b59
--- /dev/null
+++ b/WebKit/gtk/webkit/webkitwebwindowfeatures.cpp
@@ -0,0 +1,443 @@
+/*
+ * Copyright (C) 2008 Gustavo Noronha Silva <gns@gnome.org>
+ * Copyright (C) 2008 Holger Hans Peter Freyther
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public License
+ * along with this library; see the file COPYING.LIB. If not, write to
+ * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+ * Boston, MA 02110-1301, USA.
+ */
+
+#include "config.h"
+
+#include "WindowFeatures.h"
+#include "webkitwebwindowfeatures.h"
+#include "webkitprivate.h"
+
+/**
+ * SECTION:webkitwebwindowfeatures
+ * @short_description: Window properties of a #WebKitWebView
+ * @see_also: #WebKitWebView::web-view-ready
+ *
+ * The content of a #WebKitWebView can request to change certain
+ * properties of a #WebKitWebView. This can include the x, y position
+ * of the window, the width and height but also if a toolbar,
+ * scrollbar, statusbar, locationbar should be visible to the user,
+ * the request to show the #WebKitWebView fullscreen.
+ *
+ * In the normal case one will use #webkit_web_view_get_window_features
+ * to get the #WebKitWebWindowFeatures and then monitor the property
+ * changes. Be aware that the #WebKitWebWindowFeatures might change
+ * change before #WebKitWebView::web-view-ready signal is emitted.
+ * To be safe listen to the notify::window-features signal of the #WebKitWebView
+ * and reconnect the signals whenever the #WebKitWebWindowFeatures of
+ * a #WebKitWebView changes.
+ *
+ * <informalexample><programlisting>
+ * /<!-- -->* Get the current WebKitWebWindowFeatures *<!-- -->/
+ * WebKitWebWindowFeatures *features = webkit_web_view_get_window_features (my_webview);
+ *
+ * /<!-- -->* Connect to the property changes *<!-- -->/
+ * g_signal_connect (G_OBJECT(features), "notify::menubar-visible", G_CALLBACK(make_menu_bar_visible), NULL);
+ * g_signal_connect (G_OBJECT(features), "notify::statusbar-visible", G_CALLBACK(make_status_bar_visible), NULL);
+ *
+ * </programlisting></informalexample>
+ */
+
+extern "C" {
+
+enum {
+ PROP_0,
+
+ PROP_X,
+ PROP_Y,
+ PROP_WIDTH,
+ PROP_HEIGHT,
+ PROP_TOOLBAR_VISIBLE,
+ PROP_STATUSBAR_VISIBLE,
+ PROP_SCROLLBAR_VISIBLE,
+ PROP_MENUBAR_VISIBLE,
+ PROP_LOCATIONBAR_VISIBLE,
+ PROP_FULLSCREEN,
+};
+
+G_DEFINE_TYPE(WebKitWebWindowFeatures, webkit_web_window_features, G_TYPE_OBJECT)
+
+struct _WebKitWebWindowFeaturesPrivate {
+ gint x;
+ gint y;
+ gint width;
+ gint height;
+
+ gboolean toolbar_visible;
+ gboolean statusbar_visible;
+ gboolean scrollbar_visible;
+ gboolean menubar_visible;
+ gboolean locationbar_visible;
+
+ gboolean fullscreen;
+};
+
+#define WEBKIT_WEB_WINDOW_FEATURES_GET_PRIVATE(obj) (G_TYPE_INSTANCE_GET_PRIVATE((obj), WEBKIT_TYPE_WEB_WINDOW_FEATURES, WebKitWebWindowFeaturesPrivate))
+
+static void webkit_web_window_features_set_property(GObject* object, guint prop_id, const GValue* value, GParamSpec* pspec);
+
+static void webkit_web_window_features_get_property(GObject* object, guint prop_id, GValue* value, GParamSpec* pspec);
+
+static void webkit_web_window_features_class_init(WebKitWebWindowFeaturesClass* klass)
+{
+ GObjectClass* gobject_class = G_OBJECT_CLASS(klass);
+ gobject_class->set_property = webkit_web_window_features_set_property;
+ gobject_class->get_property = webkit_web_window_features_get_property;
+
+ GParamFlags flags = (GParamFlags)(WEBKIT_PARAM_READWRITE | G_PARAM_CONSTRUCT);
+
+ /**
+ * WebKitWebWindowFeatures:x:
+ *
+ * The starting x position of the window on the screen.
+ *
+ * Since: 1.0.3
+ */
+ g_object_class_install_property(gobject_class,
+ PROP_X,
+ g_param_spec_int(
+ "x",
+ "x",
+ "The starting x position of the window on the screen.",
+ -1,
+ G_MAXINT,
+ -1,
+ flags));
+
+ /**
+ * WebKitWebWindowFeatures:y:
+ *
+ * The starting y position of the window on the screen.
+ *
+ * Since: 1.0.3
+ */
+ g_object_class_install_property(gobject_class,
+ PROP_Y,
+ g_param_spec_int(
+ "y",
+ "y",
+ "The starting y position of the window on the screen.",
+ -1,
+ G_MAXINT,
+ -1,
+ flags));
+
+ /**
+ * WebKitWebWindowFeatures:width:
+ *
+ * The width of the window on the screen.
+ *
+ * Since: 1.0.3
+ */
+ g_object_class_install_property(gobject_class,
+ PROP_WIDTH,
+ g_param_spec_int(
+ "width",
+ "Width",
+ "The width of the window on the screen.",
+ -1,
+ G_MAXINT,
+ -1,
+ flags));
+
+ /**
+ * WebKitWebWindowFeatures:height:
+ *
+ * The height of the window on the screen.
+ *
+ * Since: 1.0.3
+ */
+ g_object_class_install_property(gobject_class,
+ PROP_HEIGHT,
+ g_param_spec_int(
+ "height",
+ "Height",
+ "The height of the window on the screen.",
+ -1,
+ G_MAXINT,
+ -1,
+ flags));
+
+ /**
+ * WebKitWebWindowFeatures:toolbar-visible:
+ *
+ * Controls whether the toolbar should be visible for the window.
+ *
+ * Since: 1.0.3
+ */
+ g_object_class_install_property(gobject_class,
+ PROP_TOOLBAR_VISIBLE,
+ g_param_spec_boolean(
+ "toolbar-visible",
+ "Toolbar Visible",
+ "Controls whether the toolbar should be visible for the window.",
+ TRUE,
+ flags));
+
+ /**
+ * WebKitWebWindowFeatures:statusbar-visible:
+ *
+ * Controls whether the statusbar should be visible for the window.
+ *
+ * Since: 1.0.3
+ */
+ g_object_class_install_property(gobject_class,
+ PROP_STATUSBAR_VISIBLE,
+ g_param_spec_boolean(
+ "statusbar-visible",
+ "Statusbar Visible",
+ "Controls whether the statusbar should be visible for the window.",
+ TRUE,
+ flags));
+
+ /**
+ * WebKitWebWindowFeatures:scrollbar-visible:
+ *
+ * Controls whether the scrollbars should be visible for the window.
+ *
+ * Since: 1.0.3
+ */
+ g_object_class_install_property(gobject_class,
+ PROP_SCROLLBAR_VISIBLE,
+ g_param_spec_boolean(
+ "scrollbar-visible",
+ "Scrollbar Visible",
+ "Controls whether the scrollbars should be visible for the window.",
+ TRUE,
+ flags));
+
+ /**
+ * WebKitWebWindowFeatures:menubar-visible:
+ *
+ * Controls whether the menubar should be visible for the window.
+ *
+ * Since: 1.0.3
+ */
+ g_object_class_install_property(gobject_class,
+ PROP_MENUBAR_VISIBLE,
+ g_param_spec_boolean(
+ "menubar-visible",
+ "Menubar Visible",
+ "Controls whether the menubar should be visible for the window.",
+ TRUE,
+ flags));
+
+ /**
+ * WebKitWebWindowFeatures:locationbar-visible:
+ *
+ * Controls whether the locationbar should be visible for the window.
+ *
+ * Since: 1.0.3
+ */
+ g_object_class_install_property(gobject_class,
+ PROP_LOCATIONBAR_VISIBLE,
+ g_param_spec_boolean(
+ "locationbar-visible",
+ "Locationbar Visible",
+ "Controls whether the locationbar should be visible for the window.",
+ TRUE,
+ flags));
+
+ /**
+ * WebKitWebWindowFeatures:fullscreen:
+ *
+ * Controls whether window will be displayed fullscreen.
+ *
+ * Since: 1.0.3
+ */
+ g_object_class_install_property(gobject_class,
+ PROP_FULLSCREEN,
+ g_param_spec_boolean(
+ "fullscreen",
+ "Fullscreen",
+ "Controls whether window will be displayed fullscreen.",
+ FALSE,
+ flags));
+
+
+ g_type_class_add_private(klass, sizeof(WebKitWebWindowFeaturesPrivate));
+}
+
+static void webkit_web_window_features_init(WebKitWebWindowFeatures* web_window_features)
+{
+ web_window_features->priv = WEBKIT_WEB_WINDOW_FEATURES_GET_PRIVATE(web_window_features);
+}
+
+static void webkit_web_window_features_set_property(GObject* object, guint prop_id, const GValue* value, GParamSpec* pspec)
+{
+ WebKitWebWindowFeatures* web_window_features = WEBKIT_WEB_WINDOW_FEATURES(object);
+ WebKitWebWindowFeaturesPrivate* priv = web_window_features->priv;
+
+ switch(prop_id) {
+ case PROP_X:
+ priv->x = g_value_get_int(value);
+ break;
+ case PROP_Y:
+ priv->y = g_value_get_int(value);
+ break;
+ case PROP_WIDTH:
+ priv->width = g_value_get_int(value);
+ break;
+ case PROP_HEIGHT:
+ priv->height = g_value_get_int(value);
+ break;
+ case PROP_TOOLBAR_VISIBLE:
+ priv->toolbar_visible = g_value_get_boolean(value);
+ break;
+ case PROP_STATUSBAR_VISIBLE:
+ priv->statusbar_visible = g_value_get_boolean(value);
+ break;
+ case PROP_SCROLLBAR_VISIBLE:
+ priv->scrollbar_visible = g_value_get_boolean(value);
+ break;
+ case PROP_MENUBAR_VISIBLE:
+ priv->menubar_visible = g_value_get_boolean(value);
+ break;
+ case PROP_LOCATIONBAR_VISIBLE:
+ priv->locationbar_visible = g_value_get_boolean(value);
+ break;
+ case PROP_FULLSCREEN:
+ priv->fullscreen = g_value_get_boolean(value);
+ break;
+ default:
+ G_OBJECT_WARN_INVALID_PROPERTY_ID(object, prop_id, pspec);
+ break;
+ }
+}
+
+static void webkit_web_window_features_get_property(GObject* object, guint prop_id, GValue* value, GParamSpec* pspec)
+{
+ WebKitWebWindowFeatures* web_window_features = WEBKIT_WEB_WINDOW_FEATURES(object);
+ WebKitWebWindowFeaturesPrivate* priv = web_window_features->priv;
+
+ switch (prop_id) {
+ case PROP_X:
+ g_value_set_int(value, priv->x);
+ break;
+ case PROP_Y:
+ g_value_set_int(value, priv->y);
+ break;
+ case PROP_WIDTH:
+ g_value_set_int(value, priv->width);
+ break;
+ case PROP_HEIGHT:
+ g_value_set_int(value, priv->height);
+ break;
+ case PROP_TOOLBAR_VISIBLE:
+ g_value_set_boolean(value, priv->toolbar_visible);
+ break;
+ case PROP_STATUSBAR_VISIBLE:
+ g_value_set_boolean(value, priv->statusbar_visible);
+ break;
+ case PROP_SCROLLBAR_VISIBLE:
+ g_value_set_boolean(value, priv->scrollbar_visible);
+ break;
+ case PROP_MENUBAR_VISIBLE:
+ g_value_set_boolean(value, priv->menubar_visible);
+ break;
+ case PROP_LOCATIONBAR_VISIBLE:
+ g_value_set_boolean(value, priv->locationbar_visible);
+ break;
+ case PROP_FULLSCREEN:
+ g_value_set_boolean(value, priv->fullscreen);
+ break;
+ default:
+ G_OBJECT_WARN_INVALID_PROPERTY_ID(object, prop_id, pspec);
+ break;
+ }
+}
+
+/**
+ * webkit_web_window_features_new:
+ *
+ * Creates a new #WebKitWebWindowFeatures instance with default values. It must
+ * be manually attached to a WebView.
+ *
+ * Returns: a new #WebKitWebWindowFeatures instance
+ *
+ * Since 1.0.3
+ */
+WebKitWebWindowFeatures* webkit_web_window_features_new()
+{
+ return WEBKIT_WEB_WINDOW_FEATURES(g_object_new(WEBKIT_TYPE_WEB_WINDOW_FEATURES, NULL));
+}
+
+// for internal use only
+WebKitWebWindowFeatures* webkit_web_window_features_new_from_core_features(const WebCore::WindowFeatures& features)
+{
+ WebKitWebWindowFeatures *webWindowFeatures = webkit_web_window_features_new();
+
+ if(features.xSet)
+ g_object_set(webWindowFeatures, "x", static_cast<int>(features.x), NULL);
+
+ if(features.ySet)
+ g_object_set(webWindowFeatures, "y", static_cast<int>(features.y), NULL);
+
+ if(features.widthSet)
+ g_object_set(webWindowFeatures, "width", static_cast<int>(features.width), NULL);
+
+ if(features.heightSet)
+ g_object_set(webWindowFeatures, "height", static_cast<int>(features.height), NULL);
+
+ g_object_set(webWindowFeatures,
+ "toolbar-visible", features.toolBarVisible,
+ "statusbar-visible", features.statusBarVisible,
+ "scrollbar-visible", features.scrollbarsVisible,
+ "menubar-visible", features.menuBarVisible,
+ "locationbar-visible", features.locationBarVisible,
+ "fullscreen", features.fullscreen,
+ NULL);
+
+ return webWindowFeatures;
+}
+
+/**
+ * webkit_web_window_features_equal:
+ * @features1: a #WebKitWebWindowFeatures instance
+ * @features2: another #WebKitWebWindowFeatures instance
+ *
+ * Decides if a #WebKitWebWindowFeatures instance equals another, as
+ * in has the same values.
+ *
+ * Returns: %TRUE if the instances have the same values, %FALSE
+ * otherwise
+ *
+ * Since 1.0.3
+ */
+gboolean webkit_web_window_features_equal(WebKitWebWindowFeatures* features1, WebKitWebWindowFeatures* features2)
+{
+ WebKitWebWindowFeaturesPrivate* priv1 = features1->priv;
+ WebKitWebWindowFeaturesPrivate* priv2 = features2->priv;
+
+ if((priv1->x == priv2->x) &&
+ (priv1->y == priv2->y) &&
+ (priv1->width == priv2->width) &&
+ (priv1->height == priv2->height) &&
+ (priv1->toolbar_visible == priv2->toolbar_visible) &&
+ (priv1->statusbar_visible == priv2->statusbar_visible) &&
+ (priv1->scrollbar_visible == priv2->scrollbar_visible) &&
+ (priv1->menubar_visible == priv2->menubar_visible) &&
+ (priv1->locationbar_visible == priv2->locationbar_visible) &&
+ (priv1->fullscreen == priv2->fullscreen))
+ return TRUE;
+ return FALSE;
+}
+
+
+}
diff --git a/WebKit/gtk/webkit/webkitwebwindowfeatures.h b/WebKit/gtk/webkit/webkitwebwindowfeatures.h
new file mode 100644
index 0000000..cd28988
--- /dev/null
+++ b/WebKit/gtk/webkit/webkitwebwindowfeatures.h
@@ -0,0 +1,68 @@
+/*
+ * Copyright (C) 2008 Gustavo Noronha Silva <gns@gnome.org>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public License
+ * along with this library; see the file COPYING.LIB. If not, write to
+ * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+ * Boston, MA 02110-1301, USA.
+ */
+
+#ifndef WEBKIT_WEB_WINDOW_FEATURES_H
+#define WEBKIT_WEB_WINDOW_FEATURES_H
+
+#include <glib-object.h>
+
+#include <webkit/webkitdefines.h>
+
+G_BEGIN_DECLS
+
+#define WEBKIT_TYPE_WEB_WINDOW_FEATURES (webkit_web_window_features_get_type())
+#define WEBKIT_WEB_WINDOW_FEATURES(obj) (G_TYPE_CHECK_INSTANCE_CAST((obj), WEBKIT_TYPE_WEB_WINDOW_FEATURES, WebKitWebWindowFeatures))
+#define WEBKIT_WEB_WINDOW_FEATURES_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST((klass), WEBKIT_TYPE_WEB_WINDOW_FEATURES, WebKitWebWindowFeaturesClass))
+#define WEBKIT_IS_WEB_WINDOW_FEATURES(obj) (G_TYPE_CHECK_INSTANCE_TYPE((obj), WEBKIT_TYPE_WEB_WINDOW_FEATURES))
+#define WEBKIT_IS_WEB_WINDOW_FEATURES_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE((klass), WEBKIT_TYPE_WEB_WINDOW_FEATURES))
+#define WEBKIT_WEB_WINDOW_FEATURES_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS((obj), WEBKIT_TYPE_WEB_WINDOW_FEATURES, WebKitWebWindowFeaturesClass))
+
+typedef struct _WebKitWebWindowFeaturesPrivate WebKitWebWindowFeaturesPrivate;
+
+struct _WebKitWebWindowFeatures {
+ GObject parent_instance;
+
+ /*< private >*/
+ WebKitWebWindowFeaturesPrivate* priv;
+};
+
+struct _WebKitWebWindowFeaturesClass {
+ GObjectClass parent_class;
+
+ /*< private >*/
+ /* Padding for future expansion */
+ void (*_webkit_reserved1) (void);
+ void (*_webkit_reserved2) (void);
+ void (*_webkit_reserved3) (void);
+ void (*_webkit_reserved4) (void);
+};
+
+WEBKIT_API GType
+webkit_web_window_features_get_type (void);
+
+WEBKIT_API WebKitWebWindowFeatures*
+webkit_web_window_features_new (void);
+
+WEBKIT_API gboolean
+webkit_web_window_features_equal (WebKitWebWindowFeatures* features1,
+ WebKitWebWindowFeatures* features2);
+
+G_END_DECLS
+
+#endif /* WEBKIT_WEB_WINDOW_FEATURES_H */
diff --git a/WebKit/libgen.h b/WebKit/libgen.h
deleted file mode 100644
index d693ed0..0000000
--- a/WebKit/libgen.h
+++ /dev/null
@@ -1 +0,0 @@
-char *dirname(const char *);
diff --git a/WebKit/mac/Carbon/CarbonWindowAdapter.m b/WebKit/mac/Carbon/CarbonWindowAdapter.mm
index 843fc59..ba1da71 100644
--- a/WebKit/mac/Carbon/CarbonWindowAdapter.m
+++ b/WebKit/mac/Carbon/CarbonWindowAdapter.mm
@@ -73,6 +73,7 @@
#import <assert.h>
#import <WebCore/WebCoreObjCExtras.h>
+#import <runtime/InitializeThreading.h>
#import "WebKitLogging.h"
#import "WebNSObjectExtras.h"
@@ -265,12 +266,13 @@ static OSStatus NSCarbonWindowHandleEvent(EventHandlerCallRef inEventHandlerCall
}
}
-#ifndef BUILDING_ON_TIGER
+ (void)initialize
{
+ JSC::initializeThreading();
+#ifndef BUILDING_ON_TIGER
WebCoreObjCFinalizeOnMainThread(self);
-}
#endif
+}
// Given a reference to a Carbon window that is to be encapsulated, and an indicator of whether or not this object should take responsibility for disposing of the Carbon window, initialize.
- (id)initWithCarbonWindowRef:(WindowRef)inWindowRef takingOwnership:(BOOL)inWindowRefIsOwned {
diff --git a/WebKit/mac/ChangeLog b/WebKit/mac/ChangeLog
index 78db0ab..16a69b1 100644
--- a/WebKit/mac/ChangeLog
+++ b/WebKit/mac/ChangeLog
@@ -1,3 +1,3822 @@
+2009-02-18 Mark Rowe <mrowe@apple.com>
+
+ Merge r41071.
+
+ 2009-02-18 Dan Bernstein <mitz@apple.com>
+
+ Reviewed by Brady Eidson.
+
+ - WebKit part of fixing <rdar://problem/6507512> Crash in iChat at CSSStyleSelector::adjustRenderStyle
+
+ * WebView/WebView.mm:
+ (-[WebView _preferencesChangedNotification:]): Activate the WebCore
+ workaround for this crash in iChat.
+
+2009-02-13 Mark Rowe <mrowe@apple.com>
+
+ Merge r40940.
+
+ 2009-02-12 Anders Carlsson <andersca@apple.com>
+
+ Reviewed by Kevin Decker.
+
+ <rdar://problem/6579412>
+ REGRESSION (3.2.1-ToT): Crash in Silverlight viewing streaming lecture
+
+ * Plugins/WebNetscapePluginView.h:
+ * Plugins/WebNetscapePluginView.mm:
+ (-[WebNetscapePluginView userAgent]):
+ Apply workaround for Silverlight workaround.
+
+ (-[WebNetscapePluginView _createPlugin]):
+ Check if the plug-in that we're creating is the silverlight plug-in.
+
+2009-02-13 Mark Rowe <mrowe@apple.com>
+
+ Merge r40920.
+
+ 2009-02-12 Brady Eidson <beidson@apple.com>
+
+ Reviewed by Kevin Decker
+
+ <rdar://problem/6579750> - Crash in WebArchivePrivate in Tiger TextEdit
+
+ NSHTMLReader tries to create a WebArchive from a random chunk of data. Previously, WebArchive creation would
+ fail and return nil and NSHTMLReader would try something else. When we changed the behavior to return an invalid
+ WebArchive object, things started getting weird.
+
+ * WebView/WebArchive.mm:
+ (-[WebArchivePrivate setCoreArchive:]): Null check the pointer before calling ->deref()
+ (-[WebArchivePrivate dealloc]): Remove the ASSERT which is now invalid, and null check the pointer before ->deref().
+ (-[WebArchivePrivate finalize]): Ditto
+ (-[WebArchive initWithData:]): If the LegacyWebArchive cannot be created, return nil instead of an invalid object.
+
+2009-02-12 Mark Rowe <mrowe@apple.com>
+
+ Merge r40884.
+
+ 2009-02-11 Mark Rowe <mrowe@apple.com>
+
+ Fix the build.
+
+ * History/WebHistory.mm:
+ (-[WebHistoryPrivate visitedURL:withTitle:]): Use ASSERT_UNUSED in a manner that makes sense.
+
+2009-02-12 Mark Rowe <mrowe@apple.com>
+
+ Merge r40882.
+
+ 2009-02-11 Brady Eidson <beidson@apple.com>
+
+ Reviewed by Mark Rowe
+
+ <rdar://problem/6570573> Some visit counts in History.plist have insanely high values, can roll over to negative
+
+ Remove the item from the date caches before registering the visit. Otherwise it might not be successfully removed
+ and when we add it back later it will exist in the list twice. This will cause the entry to be written out twice,
+ which would lead to doubling (or more!) the visit count on next launch when these multiple items are merged.
+
+ * History/WebHistory.mm:
+ (-[WebHistoryPrivate visitedURL:withTitle:]): Swap the removeItemFromDateCaches and visitedWithTitle calls.
+ (-[WebHistoryPrivate addItem:discardDuplicate:]): Add a mode that allows the entry being added to be discarded
+ if an entry for the URL already exists. Use that mode when reading the History.plist so only the most
+ recent entry for a given URL will be used.
+ (-[WebHistoryPrivate addItems:]):
+ (-[WebHistoryPrivate loadHistoryGutsFromURL:savedItemsCount:collectDiscardedItemsInto:error:]):
+
+2009-02-11 Mark Rowe <mrowe@apple.com>
+
+ Merge r40851.
+
+ 2009-02-10 John Sullivan <sullivan@apple.com>
+
+ Reviewed by Dan Bernstein
+
+ <https://bugs.webkit.org/show_bug.cgi?id=23889>, <rdar://problem/6572300>
+ Negative visit counts stored in History.plist aren't corrected.
+
+ It's not clear how a huge negative visit count ended up in History.plist, but we can't
+ trust data read from disk so we can at least reset this to something sane. WebCore has
+ no guard against a visit count overflowing an int, but that seems very unlikely to have
+ caused this.
+
+ * History/WebHistoryItem.mm:
+ (-[WebHistoryItem initFromDictionaryRepresentation:]):
+ If a negative visit count is in the dictionary, replace it with 1. If a negative daily or
+ weekly visit count is in the dictionary, replace it with 0.
+
+2009-02-06 Mark Rowe <mrowe@apple.com>
+
+ Merge r40727.
+
+ 2009-02-06 Dan Bernstein <mitz@apple.com>
+
+ - try to fix the Tiger build
+
+ * Misc/WebNSArrayExtras.h:
+
+2009-02-06 Mark Rowe <mrowe@apple.com>
+
+ Merge r40711.
+
+ 2009-02-05 Maciej Stachowiak <mjs@apple.com> and Brady Eidson <beidson@apple.com>
+
+ Reviewed by Dan Bernstein and Geoff Garen.
+
+ - WebKit code to track per-day and per-week visit counts in history
+
+ For now this data is only exposed via SPI for performance reasons.
+
+ * History/WebHistoryItem.mm:
+ (-[WebHistoryItem initFromDictionaryRepresentation:]): Add parsing support
+ for new data.
+ (-[WebHistoryItem _recordInitialVisit]): Tell WebCore to record an initial visit.
+ (-[WebHistoryItem dictionaryRepresentation]): Add saving support for new data.
+ (-[WebHistoryItem _getDailyVisitCounts:]): SPI accessor.
+ (-[WebHistoryItem _getWeeklyVisitCounts:]): SPI accessor.
+ * History/WebHistoryItemInternal.h: Declare new methods.
+ * History/WebHistoryItemPrivate.h: Ditto.
+
+ * History/WebHistory.mm:
+ (-[WebHistoryPrivate visitedURL:withTitle:]): For the initial visit, use
+ the new _recordInitialVisit method instead of setting visit count to 1.
+
+ * Misc/WebNSArrayExtras.h:
+ * Misc/WebNSArrayExtras.m:
+ (-[NSArray _webkit_numberAtIndex:]): Helper to retrieve an NSNumber or nil from an NSArray
+ (-[NSArray _webkit_stringAtIndex:]): Helper to retrieve an NSString of nil from an NSArray
+
+2009-02-06 Mark Rowe <mrowe@apple.com>
+
+ Merge r40680.
+
+ 2009-02-05 Beth Dakin <bdakin@apple.com>
+
+ Reviewed by John Sullivan and Brady Eidson.
+
+ Fix for <rdar://problem/6557595> REGRESSION: In Mail, selecting a
+ mail note message doesn't display it in Mail's preview pane
+
+ This was failing because revision 36962 removed a version of
+ setVerticalScrollingMode that mail calls. This patch simply adds
+ that method back.
+
+ * WebView/WebDynamicScrollBarsView.m:
+ (-[WebDynamicScrollBarsView setVerticalScrollingMode:]):
+
+2009-02-03 Mark Rowe <mrowe@apple.com>
+
+ Merge r40514.
+
+ 2009-02-02 Geoffrey Garen <ggaren@apple.com>
+
+ Build fix.
+
+ * Plugins/WebPluginController.mm:
+ (-[WebPluginController webPlugInContainerLoadRequest:inFrame:]):
+
+2009-02-03 Mark Rowe <mrowe@apple.com>
+
+ Merge r40508.
+
+ 2009-02-02 Geoffrey Garen <ggaren@apple.com>
+
+ Reviewed by Sam Weinig.
+
+ Track redirects in global history.
+
+ * History/WebHistory.mm:
+ (-[WebHistoryPrivate dealloc]):
+ (-[WebHistoryPrivate lastVisitedEntry]):
+ (-[WebHistoryPrivate setLastVisitedEntry:]): Remember the last global history
+ entry in case we're asked to add redirect information to it later.
+
+ (-[WebHistory _visitedURL:withTitle:method:wasFailure:serverRedirectURL:isClientRedirect:]):
+ (-[WebHistory _visitedURLForRedirectWithoutHistoryItem:]): Record redirect
+ information in global history.
+
+ * History/WebHistoryInternal.h:
+ * WebCoreSupport/WebFrameLoaderClient.h: See above and below.
+
+ * WebCoreSupport/WebFrameLoaderClient.mm:
+ (WebFrameLoaderClient::updateGlobalHistory):
+ (WebFrameLoaderClient::updateGlobalHistoryForRedirectWithoutHistoryItem): Record redirect
+ information in global history.
+
+ * WebView/WebFrame.mm:
+ (-[WebFrame loadRequest:]):
+ (-[WebFrame _loadData:MIMEType:textEncodingName:baseURL:unreachableURL:]):
+ * WebView/WebFramePrivate.h: Updated for rename and extra parameter.
+
+2009-02-03 Mark Rowe <mrowe@apple.com>
+
+ Merge r40382.
+
+ 2009-01-29 Sam Weinig <sam@webkit.org>
+
+ Reviewed by Anders Carlsson.
+
+ Second step in tracking the urls a HistoryItem was redirected through
+ Add SPI to access the array of redirect urls associated with a HistoryItem.
+
+ * History/WebHistoryItem.mm:
+ (-[WebHistoryItem dictionaryRepresentation]):
+ (-[WebHistoryItem _redirectURLs]):
+ * History/WebHistoryItemPrivate.h:
+
+2009-02-03 Mark Rowe <mrowe@apple.com>
+
+ Merge r40380.
+
+ 2009-01-29 Sam Weinig <sam@webkit.org>
+
+ Reviewed by Mark Rowe.
+
+ First step in tracking the urls a HistoryItem was redirected through.
+
+ * History/WebHistoryItem.mm:
+ (-[WebHistoryItem initFromDictionaryRepresentation:]):
+ (-[WebHistoryItem dictionaryRepresentation]):
+ * Misc/WebNSDictionaryExtras.h:
+ * Misc/WebNSDictionaryExtras.m:
+ (-[NSDictionary _webkit_arrayForKey:]): Add helper.
+
+2009-02-03 Mark Rowe <mrowe@apple.com>
+
+ Merge r40436.
+
+ 2009-01-30 Geoffrey Garen <ggaren@apple.com>
+
+ Build fix.
+
+ * WebView/WebFramePrivate.h:
+
+2009-02-03 Mark Rowe <mrowe@apple.com>
+
+ Merge r40432.
+
+ 2009-01-30 Geoffrey Garen <ggaren@apple.com>
+
+ Reviewed by Sam Weinig.
+
+ Split "lockHistory" into "lockHistory" and "lockBackForwardList" in
+ preparation for setting them differently during a redirect.
+
+ * WebView/WebPDFView.mm:
+ (-[WebPDFView PDFViewWillClickOnLink:withURL:]):
+
+2009-02-03 Mark Rowe <mrowe@apple.com>
+
+ Merge r40353.
+
+ 2009-01-28 Geoffrey Garen <ggaren@apple.com>
+
+ Reviewed by Sam Weinig.
+
+ Updated for WebCore rename.
+
+ * WebView/WebView.mm:
+ (-[WebView setCustomTextEncodingName:]):
+
+2009-02-03 Mark Rowe <mrowe@apple.com>
+
+ Merge r40397.
+
+ 2009-01-29 Stephanie Lewis <slewis@apple.com>
+
+ RS by Oliver Hunt.
+
+ Update the order files.
+
+ * WebKit.order:
+
+2009-02-03 Mark Rowe <mrowe@apple.com>
+
+ Merge r40332.
+
+ 2009-01-28 Sam Weinig <sam@webkit.org>
+
+ Reviewed by Geoff Garen.
+
+ Fix for <rdar://problem/6129678>
+ REGRESSION (Safari 3-4): Local variable not accessible from Dashcode console or variables view
+
+ * WebView/WebScriptDebugDelegate.mm:
+ (-[WebScriptCallFrame scopeChain]): Wrap JSActivations in DebuggerActivations.
+
+2009-01-27 Brady Eidson <beidson@apple.com>
+
+ Reviewed by Dan Bernstein
+
+ Rework FrameLoaderClient to work on a CachedFrame basis instead of CachedPage
+
+ * History/WebHistoryItem.mm:
+
+ * WebCoreSupport/WebFrameLoaderClient.h:
+ * WebCoreSupport/WebFrameLoaderClient.mm:
+ (WebFrameLoaderClient::savePlatformDataToCachedFrame):
+ (WebFrameLoaderClient::transitionToCommittedFromCachedFrame):
+ * WebKit.order:
+
+2009-01-26 Anders Carlsson <andersca@apple.com>
+
+ Reviewed by Dan Bernstein.
+
+ Add the ability for plug-ins to make WebKit operate in "modal mode"
+
+ * Plugins/Hosted/NetscapePluginHostProxy.h:
+ * Plugins/Hosted/NetscapePluginHostProxy.mm:
+ (WebKit::NetscapePluginHostProxy::NetscapePluginHostProxy):
+ (WebKit::NetscapePluginHostProxy::pluginHostDied):
+ If the plug-in crashes while we're modal, make sure to leave the modal mode.
+
+ (WebKit::NetscapePluginHostProxy::setModal):
+ (WKPCSetModal):
+ * Plugins/Hosted/WebKitPluginClient.defs:
+
+2009-01-26 John Sullivan <sullivan@apple.com>
+
+ fixed <rdar://problem/6530053> REGRESSION (Leopard): Shift-tab in http authentication window gets
+ stuck in the Name field rather than cycling around
+
+ Reviewed by Dan Bernstein
+
+ * Panels/English.lproj/WebAuthenticationPanel.nib/designable.nib:
+ * Panels/English.lproj/WebAuthenticationPanel.nib/keyedobjects.nib:
+ The two static text fields and the last button all had their "next key view" outlets set to the
+ name field, which caused shift-tab from the name field to do the wrong thing. Fixed by making each
+ selectable view have exactly one "next key view" set to it.
+
+2009-01-26 Anders Carlsson <andersca@apple.com>
+
+ Reviewed by Sam Weinig.
+
+ Add the ability for a plug-in to show or hide the menu bar.
+
+ * Plugins/Hosted/NetscapePluginHostProxy.h:
+ * Plugins/Hosted/NetscapePluginHostProxy.mm:
+ (WebKit::NetscapePluginHostProxy::NetscapePluginHostProxy):
+ (WebKit::NetscapePluginHostProxy::pluginHostDied):
+ (WebKit::NetscapePluginHostProxy::setMenuBarVisible):
+ (WKPCSetMenuBarVisible):
+ * Plugins/Hosted/WebKitPluginClient.defs:
+
+2009-01-26 Cameron Zwarich <cwzwarich@uwaterloo.ca>
+
+ Reviewed by Gavin Barraclough.
+
+ Bug 23552: Dashcode evaluator no longer works after making ExecStates actual call frames
+ <https://bugs.webkit.org/show_bug.cgi?id=23552>
+ <rdar://problem/6398839>
+
+ Dashcode will crash when using the evaluator because it saves a global call
+ frame, even after global code has finished executing, and then uses this as
+ a launching pad to execute new JS in the evaluator. The fix is to detect
+ when Dashcode is attempting to do this and execute code from a global call
+ frame instead.
+
+ * ForwardingHeaders/runtime/Protect.h: Added.
+ * WebView/WebScriptDebugDelegate.mm:
+ (-[WebScriptCallFrame _initWithGlobalObject:debugger:caller:debuggerCallFrame:]):
+ Added debugger, a WebScriptDebugger* argument.
+ (-[WebScriptCallFrame evaluateWebScript:]): Detect when Dashcode is using
+ a stale WebScriptCallFrame to execute new JS and evaluate it starting from
+ the global object's global call frame instead.
+ * WebView/WebScriptDebugger.h:
+ (WebScriptDebugger::globalObject): Added.
+ (WebScriptDebugger::globalCallFrame): Added.
+ * WebView/WebScriptDebugger.mm:
+ (WebScriptDebugger::WebScriptDebugger): Initialize m_globalObject.
+ (WebScriptDebugger::initGlobalCallFrame): Created as a clone of callEvent
+ so that the global call frame can be saved immediately after being created.
+ (WebScriptDebugger::callEvent): Pass 'this' as the debugger argument of
+ WebScriptCallFrame's _initWithGlobalObject method.
+
+2009-01-26 Anders Carlsson <andersca@apple.com>
+
+ Reviewed by Oliver Hunt.
+
+ Make WKPCInvoke a simpleroutine.
+
+ * Plugins/Hosted/NetscapePluginHostProxy.mm:
+ (WKPCInvoke):
+ * Plugins/Hosted/WebKitPluginClient.defs:
+
+2009-01-26 Anders Carlsson <andersca@apple.com>
+
+ Reviewed by Sam Weinig.
+
+ Implement using plug-in objects as constructors, and setting and getting properties from a plug-in object.
+
+ * Plugins/Hosted/NetscapePluginHostProxy.mm:
+ (WKPCBooleanAndDataReply):
+ * Plugins/Hosted/NetscapePluginInstanceProxy.h:
+ (WebKit::NetscapePluginInstanceProxy::Reply::):
+ (WebKit::NetscapePluginInstanceProxy::BooleanAndDataReply::BooleanAndDataReply):
+ Rename NPObjectInvokeReply to BooleanAndDataReply.
+
+ * Plugins/Hosted/NetscapePluginInstanceProxy.mm:
+ (WebKit::NetscapePluginInstanceProxy::addValueToArray):
+ Fix a cut and paste error.
+
+ (WebKit::NetscapePluginInstanceProxy::demarshalValueFromArray):
+ Handle NPObjects.
+
+ * Plugins/Hosted/ProxyInstance.h:
+ * Plugins/Hosted/ProxyInstance.mm:
+ (WebKit::ProxyField::valueFromInstance):
+ (WebKit::ProxyField::setValueToInstance):
+ Call the ProxyInstance method.
+
+ (WebKit::ProxyInstance::~ProxyInstance):
+ Release the NPObject.
+
+ (WebKit::ProxyInstance::supportsConstruct):
+ Ask the plug-in host if an instance supports construct.
+
+ (WebKit::ProxyInstance::fieldValue):
+ (WebKit::ProxyInstance::setFieldValue):
+ Call the plug-in host methods.
+
+ * Plugins/Hosted/WebKitPluginHostTypes.h:
+ Rename ObjectValueType to JSObjectValueType, and add NPObjectValueType.
+
+2009-01-26 Mark Rowe <mrowe@apple.com>
+
+ Fix the build.
+
+ Remove -Wformat=2 from the warning flags as newer versions of GCC emit
+ warnings about non-literal format strings for uses of our UI_STRING macro.
+
+ * Configurations/Base.xcconfig:
+
+2009-01-26 Mark Rowe <mrowe@apple.com>
+
+ Rubber-stamped by Sam Weinig.
+
+ Clean up after r40240.
+
+ * Configurations/Base.xcconfig: Don't dead code strip in debug builds for now as it leads to link errors.
+ * Plugins/Hosted/HostedNetscapePluginStream.mm: Revert change that is no longer needed now that WebKitPluginHost.defs
+ is back in the build.
+
+2009-01-25 Darin Adler <darin@apple.com>
+
+ * Plugins/Hosted/HostedNetscapePluginStream.mm: Added a missing extern "C".
+
+2009-01-25 Darin Adler <darin@apple.com>
+
+ Discussed with Mark Rowe; not sure he reviewed it.
+
+ * Configurations/Base.xcconfig: Add all the same warnings as in WebCore except for
+ -Wcast-qual and -Wunused-parameter, which both need to be off at least for now.
+
+2009-01-25 Mark Rowe <mrowe@apple.com>
+
+ Rubber-stamped by Dan Bernstein.
+
+ Improve the consistency of settings in our .xcconfig files.
+
+ * Configurations/Base.xcconfig: Only dead code strip the normal variant.
+ Handle all cases in GCC_GENERATE_DEBUGGING_SYMBOLS.
+
+2009-01-25 Darin Adler <darin@apple.com>
+
+ Reviewed by Sam Weinig.
+
+ Bug 23522: use checked casts for render tree
+ https://bugs.webkit.org/show_bug.cgi?id=23522
+
+ Step one: RenderText.
+
+ * WebView/WebRenderNode.mm:
+ (copyRenderNode): Use toRenderText.
+
+2009-01-23 Brady Eidson <beidson@apple.com>
+
+ Rubberstamped by Darin Adler
+
+ Rename CachedPagePlatformData to CachedFramePlatformData to more accurately reflect its true role.
+
+ * WebCoreSupport/WebCachedFramePlatformData.h: Copied from WebKit/mac/WebCoreSupport/WebCachedPagePlatformData.h.
+ (WebCachedFramePlatformData::WebCachedFramePlatformData):
+ * WebCoreSupport/WebCachedPagePlatformData.h: Removed.
+
+ * WebCoreSupport/WebFrameLoaderClient.mm:
+ (WebFrameLoaderClient::savePlatformDataToCachedPage):
+ (WebFrameLoaderClient::transitionToCommittedFromCachedPage):
+
+ * WebKit.order:
+
+2009-01-23 Adele Peterson <adele@apple.com>
+
+ Build fix.
+
+ Use new linesBoundingBox method instead of
+ boundingBoxWidth and boundingBoxHeight for RenderText objects.
+
+ * WebView/WebRenderNode.mm: (copyRenderNode):
+
+2009-01-23 Anders Carlsson <andersca@apple.com>
+
+ Fix 64-bit build.
+
+ * Plugins/Hosted/ProxyInstance.mm:
+ (WebKit::proxyClass):
+
+2009-01-23 Anders Carlsson <andersca@apple.com>
+
+ Fix GCC 4.0 build.
+
+ * Configurations/Base.xcconfig:
+
+2009-01-23 Anders Carlsson <andersca@apple.com>
+
+ Reviewed by Sam Weinig.
+
+ Turn on -Wmissing-prototypes and fix the resulting warnings.
+
+ * Configurations/Base.xcconfig:
+ * History/WebHistory.mm:
+ (timeIntervalForBeginningOfDay):
+ * History/WebHistoryItem.mm:
+ (historyItemWrappers):
+ * Misc/WebNSPasteboardExtras.mm:
+ (imageFromElement):
+ * WebView/WebFrame.mm:
+ * WebView/WebScriptDebugger.mm:
+ (toNSString):
+
+2009-01-22 Mark Rowe <mrowe@apple.com>
+
+ Rubber-stamped by Anders Carlsson.
+
+ Disable GCC_WARN_ABOUT_MISSING_PROTOTYPES temporarily.
+
+ Current versions of Xcode only respect it for C and Objective-C files,
+ and our code doesn't currently compile if it is applied to C++ and
+ Objective-C++ files.
+
+ * Configurations/Base.xcconfig:
+
+2009-01-22 Anders Carlsson <andersca@apple.com>
+
+ Reviewed by Sam Weinig.
+
+ Add support for Invoke and InvokeDefault. Clean up code.
+
+ * Plugins/Hosted/NetscapePluginHostProxy.mm:
+ (WKPCBooleanReply):
+ * Plugins/Hosted/NetscapePluginInstanceProxy.h:
+ (WebKit::NetscapePluginInstanceProxy::Reply::):
+ (WebKit::NetscapePluginInstanceProxy::BooleanReply::BooleanReply):
+ * Plugins/Hosted/NetscapePluginInstanceProxy.mm:
+ (WebKit::NetscapePluginInstanceProxy::demarshalValueFromArray):
+ * Plugins/Hosted/ProxyInstance.h:
+ * Plugins/Hosted/ProxyInstance.mm:
+ (WebKit::ProxyInstance::invoke):
+ (WebKit::ProxyInstance::invokeMethod):
+ (WebKit::ProxyInstance::supportsInvokeDefaultMethod):
+ (WebKit::ProxyInstance::invokeDefaultMethod):
+ (WebKit::ProxyInstance::methodsNamed):
+ (WebKit::ProxyInstance::fieldNamed):
+ * Plugins/Hosted/WebKitPluginClient.defs:
+ * Plugins/Hosted/WebKitPluginHost.defs:
+ * Plugins/Hosted/WebKitPluginHostTypes.h:
+
+2009-01-22 Eric Roman <eroman@chromium.og>
+
+ Reviewed by Eric Seidel.
+
+ https://bugs.webkit.org/show_bug.cgi?id=20806
+ Deprecate RSSFeedReferrer() and setRSSFeedReferrer().
+
+ * History/WebHistoryItem.mm:
+ (-[WebHistoryItem RSSFeedReferrer]):
+ (-[WebHistoryItem setRSSFeedReferrer:]):
+
+2009-01-22 Anders Carlsson <andersca@apple.com>
+
+ Reviewed by Kevin Decker.
+
+ Don't crash or hang when we fail to instantiate a plug-in.
+
+ * Plugins/Hosted/NetscapePluginHostManager.mm:
+ (WebKit::NetscapePluginHostManager::instantiatePlugin):
+ Return 0 on failure.
+
+ * Plugins/Hosted/WebHostedNetscapePluginView.mm:
+ (-[WebHostedNetscapePluginView JSC::Bindings::createPluginBindingsInstance:JSC::Bindings::]):
+ Null check for the proxy member.
+
+2009-01-21 David Hyatt <hyatt@apple.com>
+
+ Devirtualize width/height/x/y on RenderObject and move the methods to RenderBox.
+
+ Reviewed by Eric Seidel and Darin Adler
+
+ * WebView/WebRenderNode.mm:
+ (copyRenderNode):
+
+2009-01-21 Anders Carlsson <andersca@apple.com>
+
+ Reviewed by Sam Weinig.
+
+ More browser->plug-in scripting support.
+
+ * Plugins/Hosted/NetscapePluginHostProxy.mm:
+ (WKPCNPObjectHasPropertyReply):
+ (WKPCNPObjectHasMethodReply):
+ (WKPCNPObjectInvokeReply):
+ MIG reply functions.
+
+ (WKPCIdentifierInfo):
+ Return information about an identifier given its 64-bit value.
+
+ * Plugins/Hosted/NetscapePluginInstanceProxy.h:
+ Add new reply structs.
+
+ * Plugins/Hosted/NetscapePluginInstanceProxy.mm:
+ (WebKit::NetscapePluginInstanceProxy::addValueToArray):
+ Split out code that adds values to the arrays from marshalValue.
+
+ (WebKit::NetscapePluginInstanceProxy::marshalValue):
+ Call addValueToArray.
+
+ (WebKit::NetscapePluginInstanceProxy::marshalValues):
+ Marshal a list of values.
+
+ (WebKit::NetscapePluginInstanceProxy::createBindingsInstance):
+ Actually create a proxy instance.
+
+ * Plugins/Hosted/ProxyInstance.h:
+ * Plugins/Hosted/ProxyInstance.mm:
+ (WebKit::ProxyClass::methodsNamed):
+ (WebKit::ProxyClass::fieldNamed):
+ Add a proxy ProxyClass class that just forwards everything to the ProxyInstance class.
+
+ (WebKit::proxyClass):
+ Shared proxyClass getter.
+
+ (WebKit::ProxyField::ProxyField):
+ (WebKit::ProxyField::valueFromInstance):
+ (WebKit::ProxyField::setValueToInstance):
+ Add a proxy ProxyField class that just forwards everything to the ProxyInstance class.
+
+ (WebKit::ProxyMethod::ProxyMethod):
+ (WebKit::ProxyMethod::serverIdentifier):
+ (WebKit::ProxyMethod::numParameters):
+ Add a dummy ProxyMethod class.
+
+ (WebKit::ProxyInstance::invokeMethod):
+ Call _WKPHNPObjectInvoke.
+
+ (WebKit::ProxyInstance::defaultValue):
+ (WebKit::ProxyInstance::stringValue):
+ (WebKit::ProxyInstance::numberValue):
+ (WebKit::ProxyInstance::booleanValue):
+ (WebKit::ProxyInstance::valueOf):
+ Add dummy implementations (taken from CInstance).
+
+ (WebKit::ProxyInstance::methodsNamed):
+ Call _WKPHNPObjectHasMethod to determine whether a method with the given name exists.
+
+ (WebKit::ProxyInstance::fieldNamed):
+ Call _WKPHNPObjectHasProperty to determine whether a property with the given name exists.
+
+ * Plugins/Hosted/WebKitPluginClient.defs:
+ * Plugins/Hosted/WebKitPluginHost.defs:
+ Add new MIG definitions.
+
+2009-01-21 Mark Rowe <mrowe@apple.com>
+
+ Reviewed by Tim Hatcher.
+
+ Clean up how we force invocations of API that happened on background threads over to the main thread.
+
+ This was previously accomplished in a somewhat ad-hoc manner using a mutable dictionary to pass arguments
+ and return values back from the function. The new approach is to use a proxy object that forwards an
+ NSInvocation over to the main thread and applies it to the target object, which leads to a much cleaner
+ call site.
+
+ * Misc/WebNSObjectExtras.h:
+ * Misc/WebNSObjectExtras.mm:
+ (-[WebMainThreadInvoker initWithTarget:]):
+ (-[WebMainThreadInvoker forwardInvocation:]):
+ (-[WebMainThreadInvoker methodSignatureForSelector:]):
+ (-[WebMainThreadInvoker handleException:]):
+ (-[NSInvocation _webkit_invokeAndHandleException:]): Execute the invocation and forward any exception that was
+ raised back to the WebMainThreadInvoker.
+ (-[NSObject _webkit_invokeOnMainThread]):
+
+ The following methods are updated to use the proxy object to forward methods to the main thread:
+
+ * WebView/WebArchive.mm:
+ (-[WebArchive initWithMainResource:subresources:subframeArchives:]):
+ (-[WebArchive mainResource]):
+ (-[WebArchive subresources]):
+ (-[WebArchive subframeArchives]):
+ * WebView/WebResource.mm:
+ (-[WebResource data]):
+ (-[WebResource URL]):
+ (-[WebResource MIMEType]):
+ (-[WebResource textEncodingName]):
+ (-[WebResource frameName]):
+ (-[WebResource _ignoreWhenUnarchiving]):
+ (-[WebResource _initWithData:URL:MIMEType:textEncodingName:frameName:response:copyData:]):
+ (-[WebResource _initWithData:URL:response:]):
+ (-[WebResource _suggestedFilename]):
+ (-[WebResource _response]):
+ (-[WebResource _stringValue]):
+ * WebView/WebView.mm:
+ (-[WebView initWithFrame:frameName:groupName:]):
+ (-[WebView initWithCoder:]):
+
+2009-01-20 Nikolas Zimmermann <nikolas.zimmermann@torchmobile.com>
+
+ Reviewed by George Staikos.
+
+ Fixes: https://bugs.webkit.org/show_bug.cgi?id=23434 (Add WML <input> element support)
+
+ Protect text field related WebEditorClient.mm methods against non-HTMLElement callers.
+ WebEditorClient.mm relies on HTMLInputElement as input element. Ignore calls from non-HTMLElement elements.
+
+ * WebCoreSupport/WebEditorClient.mm:
+ (WebEditorClient::textFieldDidBeginEditing):
+ (WebEditorClient::textFieldDidEndEditing):
+ (WebEditorClient::textDidChangeInTextField):
+ (WebEditorClient::doTextFieldCommandFromEvent):
+ (WebEditorClient::textWillBeDeletedInTextField):
+ (WebEditorClient::textDidChangeInTextArea):
+
+2009-01-19 Anders Carlsson <andersca@apple.com>
+
+ Reviewed by Sam Weinig.
+
+ Add and implement GetScriptableNPObject.
+
+ * Plugins/Hosted/NetscapePluginHostProxy.mm:
+ (WKPCGetScriptableNPObjectReply):
+ Create a new reply struct and set it as the current reply.
+
+ (WKPCEvaluate):
+ Get rid of an unused variable.
+
+ * Plugins/Hosted/NetscapePluginInstanceProxy.h:
+ (WebKit::NetscapePluginInstanceProxy::Reply::):
+ (WebKit::NetscapePluginInstanceProxy::GetScriptableNPObjectReply::GetScriptableNPObjectReply):
+ * Plugins/Hosted/NetscapePluginInstanceProxy.mm:
+ (WebKit::NetscapePluginInstanceProxy::createBindingsInstance):
+ Call _WKPHGetScriptableNPObject and wait for a reply.
+
+ * Plugins/Hosted/ProxyInstance.h: Added.
+ * Plugins/Hosted/ProxyInstance.mm: Added.
+ Add empty files.
+
+ * Plugins/Hosted/WebHostedNetscapePluginView.mm:
+ (-[WebHostedNetscapePluginView JSC::Bindings::createPluginBindingsInstance:JSC::Bindings::]):
+ Call NetscapePluginInstanceProxy::createBindingsInstance.
+
+ * Plugins/Hosted/WebKitPluginClient.defs:
+ * Plugins/Hosted/WebKitPluginHost.defs:
+ Add new declarations.
+
+2009-01-19 Sam Weinig <sam@webkit.org>
+
+ Rubber-stamped by Gavin Barraclough.
+
+ Remove temporary operator-> from JSValuePtr.
+
+ * Plugins/Hosted/NetscapePluginInstanceProxy.mm:
+ (WebKit::NetscapePluginInstanceProxy::invoke):
+ (WebKit::NetscapePluginInstanceProxy::hasMethod):
+ (WebKit::NetscapePluginInstanceProxy::marshalValue):
+ * WebView/WebFrame.mm:
+ (-[WebFrame _stringByEvaluatingJavaScriptFromString:forceUserGesture:]):
+ * WebView/WebView.mm:
+ (aeDescFromJSValue):
+
+2009-01-19 Anders Carlsson <andersca@apple.com>
+
+ Reviewed by Sam Weinig.
+
+ Make Evaluate an asynchronous method that has a reply method.
+
+ * Plugins/Hosted/NetscapePluginHostProxy.mm:
+ (WKPCEvaluate):
+ * Plugins/Hosted/WebKitPluginClient.defs:
+ * Plugins/Hosted/WebKitPluginHost.defs:
+
+2009-01-19 Brady Eidson <beidson@apple.com>
+
+ Rubberstamped by Tim Hatcher
+
+ Fix long standing typo.
+
+ * History/WebBackForwardList.h:
+
+2009-01-19 Mark Rowe <mrowe@apple.com>
+
+ Fix the build!
+
+ * Plugins/Hosted/NetscapePluginInstanceProxy.mm:
+ (WebKit::NetscapePluginInstanceProxy::demarshalValue):
+ (WebKit::NetscapePluginInstanceProxy::demarshalValues):
+
+2009-01-18 Mark Rowe <mrowe@apple.com>
+
+ Reviewed by Anders Carlsson.
+
+ Fix <https://bugs.webkit.org/show_bug.cgi?id=23414>.
+ Bug 23414: Reproducible crash accessing View menu with plugins disabled
+
+ * WebView/WebFrame.mm:
+ (-[WebFrame _canProvideDocumentSource]): Null-check the PluginData before using it.
+
+2009-01-17 David Hyatt <hyatt@apple.com>
+
+ Eliminate dependencies on "backslashAsCurrencySymbol()" from WebKit, and make sure these alterations
+ are done in WebCore instead.
+
+ Reviewed by Oliver Hunt
+
+ * WebView/WebFrame.mm:
+ (-[WebFrame _selectedString]):
+ (-[WebFrame _stringForRange:]):
+
+2009-01-17 Eric Carlson <eric.carlson@apple.com>
+
+ Reviewed by Adele Peterson
+
+ Complete <rdar://problem/6293969>
+
+ * WebCoreSupport/WebSystemInterface.m:
+ (InitWebCoreSystemInterface): Remove UseSharedMediaUI
+
+2009-01-15 Brady Eidson <beidson@apple.com>
+
+ Reviewed by Dan Bernstein
+
+ Fix problem where a URL visited as non-GET once is flagged as non-GET forever.
+
+ * History/WebHistory.mm:
+ (-[WebHistory _visitedURL:withTitle:method:wasFailure:]): Always update the HTTPNonGet
+ flag for all loads with an HTTP Method
+
+2009-01-14 Anders Carlsson <andersca@apple.com>
+
+ Reviewed by Sam Weinig.
+
+ Implement InvokeDefault, Construct, GetProperty and SetProperty.
+
+ Fully implement marshalValue.
+
+ * Plugins/Hosted/NetscapePluginHostProxy.mm:
+ (WKPCInvokeDefault):
+ (WKPCConstruct):
+ (WKPCGetProperty):
+ (WKPCSetProperty):
+ * Plugins/Hosted/NetscapePluginInstanceProxy.h:
+ * Plugins/Hosted/NetscapePluginInstanceProxy.mm:
+ (WebKit::NetscapePluginInstanceProxy::evaluate):
+ (WebKit::NetscapePluginInstanceProxy::invoke):
+ (WebKit::NetscapePluginInstanceProxy::invokeDefault):
+ (WebKit::NetscapePluginInstanceProxy::construct):
+ (WebKit::NetscapePluginInstanceProxy::getProperty):
+ (WebKit::NetscapePluginInstanceProxy::setProperty):
+ (WebKit::NetscapePluginInstanceProxy::marshalValue):
+ (WebKit::NetscapePluginInstanceProxy::demarshalValue):
+ * Plugins/Hosted/WebKitPluginClient.defs:
+
+2009-01-14 Anders Carlsson <andersca@apple.com>
+
+ Reviewed by Sam Weinig.
+
+ Demarshal arguments and pass them to the JS call.
+
+ * Plugins/Hosted/NetscapePluginHostProxy.mm:
+ (WKPCInvoke):
+ * Plugins/Hosted/NetscapePluginInstanceProxy.h:
+ * Plugins/Hosted/NetscapePluginInstanceProxy.mm:
+ (WebKit::NetscapePluginInstanceProxy::invoke):
+ (WebKit::NetscapePluginInstanceProxy::demarshalValueFromArray):
+ (WebKit::NetscapePluginInstanceProxy::demarshalValues):
+
+2009-01-14 Mark Rowe <mrowe@apple.com>
+
+ Reviewed by Timothy Hatcher.
+
+ <rdar://problem/6496520> REGRESSION: In Mail, a crash occurs when attempting to display a mail message
+
+ Move WebArchive and WebResource to use the same approach for initializing themselves on the main thread
+ that WebView uses.
+
+ * WebView/WebArchive.mm:
+ (-[WebArchive initWithMainResource:subresources:subframeArchives:]): Use _webkit_performSelectorOnMainThread:withObject:.
+ (-[WebArchive _initWithArguments:]):
+ * WebView/WebResource.mm:
+ (-[WebResource _initWithArguments:]): Unbox the BOOL argument.
+
+2009-01-14 Darin Adler <darin@apple.com>
+
+ Reviewed by Oliver Hunt.
+
+ Fix crash I ran into while printing. I was unable to reproduce it, but also,
+ it's clear there's no guarantee that the frame will be non-zero in this case,
+ so it seems fine to check it.
+
+ * WebView/WebHTMLView.mm: (-[WebHTMLView reapplyStyles]): Check frame for zero
+ and don't do anything with it if it's zero.
+
+2009-01-14 Dan Bernstein <mitz@apple.com>
+
+ Reviewed by John Sullivan.
+
+ - update copyright
+
+ * Info.plist:
+
+2009-01-12 Anders Carlsson <andersca@apple.com>
+
+ Reviewed by Darin Adler.
+
+ Add a bunch of methods to WebKitPluginClient.defs, and implement them.
+
+ * Plugins/Hosted/NetscapePluginHostProxy.mm:
+ (WebKit::fromUTF8WithLatin1Fallback):
+ If the length isn't specified, get it by calling strlen.
+
+ (WKPCEvaluate):
+ Evaluate doesn't take any arguments.
+
+ (WKPCGetIntIdentifier):
+ Call _NPN_GetIntIdentifier.
+
+ (identifierFromServerIdentifier):
+ New helper function that returns a JSC Identifier from an NPIdentifier.
+
+ (WKPCInvoke):
+ Call identifierFromServerIdentifier.
+
+ (WKPCRemoveProperty):
+ (WKPCHasProperty):
+ (WKPCHasMethod):
+ Call NetscapePluginInstanceProxy.
+
+ * Plugins/Hosted/NetscapePluginInstanceProxy.h:
+ * Plugins/Hosted/NetscapePluginInstanceProxy.mm:
+ (WebKit::NetscapePluginInstanceProxy::removeProperty):
+ (WebKit::NetscapePluginInstanceProxy::hasProperty):
+ (WebKit::NetscapePluginInstanceProxy::hasMethod):
+
+ * Plugins/Hosted/WebKitPluginClient.defs:
+ Add new definitions.
+
+2009-01-13 Anders Carlsson <andersca@apple.com>
+
+ Fix build.
+
+ * WebView/WebView.mm:
+ (-[WebView _initWithArguments:]):
+
+2009-01-13 Timothy Hatcher <timothy@apple.com>
+
+ Adds a workaround for the flip4mac installer plugin decoding a WebView from a NIB on a secondary thread.
+
+ <rdar://problem/6489788> New WebKit thread checks break installation of flip4mac (thread violation)
+
+ Reviewed by Darin Adler.
+
+ * Misc/WebKitVersionChecks.h: Add WEBKIT_FIRST_VERSION_WITHOUT_WEBVIEW_INIT_THREAD_WORKAROUND.
+ * Misc/WebNSObjectExtras.h: Add _webkit_performSelectorOnMainThread:withObject:.
+ * Misc/WebNSObjectExtras.mm:
+ (-[NSObject _webkit_performSelectorWithArguments:]): Renamed from _webkit_getPropertyWithArguments.
+ Passes the optional object to the selector.
+ (-[NSObject _webkit_performSelectorOnMainThread:withObject:]): Renamed from _webkit_getPropertyOnMainThread:.
+ Put the optional object into the arguments dictionary.
+ (-[NSObject _webkit_getPropertyOnMainThread:]): Call _webkit_performSelectorOnMainThread with a nil object.
+ * WebView/WebResource.mm:
+ (-[WebResource _ignoreWhenUnarchiving]): Use _cmd instead of making the selector again.
+ (-[WebResource _initWithData:URL:MIMEType:textEncodingName:frameName:response:copyData:]): Use the new
+ _webkit_performSelectorOnMainThread:withObject: method instead of performSelectorOnMainThread.
+ * WebView/WebView.mm:
+ (-[WebView _initWithArguments:]): Added. Pulls arguments out of the dictionary and calls the right init method.
+ (needsWebViewInitThreadWorkaround): Checks if the thead is not the main thread and if we are in the Installer bundle.
+ (-[WebView initWithFrame:frameName:groupName:]): Call needsWebViewInitThreadWorkaround and use _webkit_performSelectorOnMainThread
+ to call _initWithArguments: passing the frame, frameName and groupName.
+ (-[WebView initWithCoder:]): Ditto, except pass the coder to _initWithArguments:.
+
+2009-01-12 Gavin Barraclough <barraclough@apple.com>
+
+ Reviewed by Oliver Hunt.
+
+ Deprecate JSValuePtr::getNumber() - two ways to get a number should be enough.
+
+ * WebView/WebView.mm:
+ (aeDescFromJSValue):
+
+2009-01-12 Brady Eidson <beidson@apple.com>
+
+ Reviewed by Darin Adler
+
+ <rdar://problem/6468274> - Track Non-get requests in global history
+
+ * History/WebHistory.mm:
+ (-[WebHistory _visitedURL:withTitle:method:wasFailure:]):
+ * History/WebHistoryInternal.h:
+
+ * History/WebHistoryItem.mm:
+ (-[WebHistoryItem initFromDictionaryRepresentation:]):
+ (-[WebHistoryItem dictionaryRepresentation]):
+ (-[WebHistoryItem _lastVisitWasHTTPNonGet]):
+ * History/WebHistoryItemPrivate.h:
+
+ * WebCoreSupport/WebFrameLoaderClient.mm:
+ (WebFrameLoaderClient::updateGlobalHistory): Only pass the method through if it was an HTTP load
+
+2009-01-12 Anders Carlsson <andersca@apple.com>
+
+ Reviewed by Sam Weinig.
+
+ Move marshalling into NetscapePluginInstanceProxy.
+
+ Add support for marshallin strings.
+
+ * Plugins/Hosted/NetscapePluginHostProxy.mm:
+ (WKPCEvaluate):
+ (WKPCInvoke):
+ * Plugins/Hosted/NetscapePluginInstanceProxy.h:
+ * Plugins/Hosted/NetscapePluginInstanceProxy.mm:
+ (WebKit::NetscapePluginInstanceProxy::evaluate):
+ (WebKit::NetscapePluginInstanceProxy::invoke):
+ (WebKit::NetscapePluginInstanceProxy::marshalValue):
+ * Plugins/Hosted/WebKitPluginHostTypes.h:
+
+2009-01-12 Anders Carlsson <andersca@apple.com>
+
+ Reviewed by Sam Weinig.
+
+ Implement WKPCInvoke.
+
+ * Plugins/Hosted/NetscapePluginHostProxy.mm:
+ (WKPCEvaluate):
+ (WKPCInvoke):
+ * Plugins/Hosted/NetscapePluginInstanceProxy.h:
+ * Plugins/Hosted/NetscapePluginInstanceProxy.mm:
+ (WebKit::NetscapePluginInstanceProxy::idForObject):
+ (WebKit::NetscapePluginInstanceProxy::invoke):
+ * Plugins/Hosted/WebKitPluginClient.defs:
+
+2009-01-12 Anders Carlsson <andersca@apple.com>
+
+ Reviewed by Sam Weinig.
+
+ Move marshalling code to NetscapePluginInstanceProxy. Add support for marshalling JS objects.
+
+ * Plugins/Hosted/NetscapePluginHostProxy.mm:
+ (WKPCEvaluate):
+ * Plugins/Hosted/NetscapePluginInstanceProxy.h:
+ * Plugins/Hosted/NetscapePluginInstanceProxy.mm:
+ (WebKit::NetscapePluginInstanceProxy::marshalValue):
+ * Plugins/Hosted/WebKitPluginHostTypes.h:
+
+2009-01-12 Julien Chaffraix <jchaffraix@pleyo.com>
+
+ Reviewed by Darin Adler.
+
+ Bug 22861: Turn the FontCache into a singleton
+ https://bugs.webkit.org/show_bug.cgi?id=22861
+
+ * Misc/WebCoreStatistics.mm:
+ (+[WebCoreStatistics cachedFontDataCount]):
+ (+[WebCoreStatistics cachedFontDataInactiveCount]):
+ (+[WebCoreStatistics purgeInactiveFontData]):
+ Redirected all the static calls to the global FontCache
+ instance.
+
+2009-01-11 Dmitry Titov <dimich@chromium.org>
+
+ Reviewed by Darin Adler.
+
+ https://bugs.webkit.org/show_bug.cgi?id=23207
+ Moved currentTime() to from WebCore to WTF.
+
+ * WebView/WebFrame.mm: a different header file included.
+
+2009-01-10 Darin Adler <darin@apple.com>
+
+ Reviewed by Sam Weinig.
+
+ <rdar://problem/5845089> REGRESSION (r30044): Mail custom stationery missing images
+ because of change to -[HTMLObjectElement data]
+
+ * WebView/WebView.mm:
+ (-[WebView _commonInitializationWithFrameName:groupName:usesDocumentViews:]): Added a thread
+ violation check because I saw this being done off the main thread while testing Mail, and it
+ caused problems. Put all the one time initialization under a single guard to make things just
+ a little faster other times, and to make it clearer which things are one-time. Added a call to
+ the new patchMailRemoveAttributesMethod function.
+ (-[WebView initWithFrame:frameName:groupName:]): Added a thread violation check here too,
+ because I assumed it would be slightly better to have a public method name in the violation
+ message. This calls commonInitialization later, so it will hit that one eventually.
+ (objectElementDataAttribute): Added. Just returns the value of the "data" attribute.
+ (recursivelyRemoveMailAttributes): Added. Patch to an internal Mail method that in turn patches
+ a WebKit method and removes the patch again on the way out.
+ (patchMailRemoveAttributesMethod): Added. On Leopard only, checks the Mail version, and then
+ applies the patch that fixes this bug.
+
+2009-01-09 Dan Bernstein <mitz@apple.com>
+
+ Reviewed by Darin Adler.
+
+ - fixed <rdar://problem/6234347> Add/change conditional key
+ bindings for changing paragraph- and character-level writing
+ direction (to match NSTextView)
+
+ * WebView/WebHTMLView.mm:
+ (-[WebHTMLView validateUserInterfaceItemWithoutDelegate:]): Added
+ code to validate makeBaseWritingDirectionLeftToRight: and
+ makeBaseWritingDirectionRightToLeft:.
+ (writingDirectionKeyBindingsEnabled): Changed this function to
+ always return YES, except on Tiger and Leopard.
+ (-[WebHTMLView makeBaseWritingDirectionLeftToRight:]): Renamed
+ changeBaseWritingDirectionToLTR: to this.
+ (-[WebHTMLView makeBaseWritingDirectionRightToLeft:]): Renamed
+ changeBaseWritingDirectionToRTL: to this.
+ (-[WebHTMLView changeBaseWritingDirectionToLTR:]): Now calls
+ makeBaseWritingDirectionLeftToRight:.
+ (-[WebHTMLView changeBaseWritingDirectionToRTL:]): Now calls
+ makeBaseWritingDirectionRightToLeft:.
+ * WebView/WebView.mm: Added makeBaseWritingDirectionLeftToRight
+ and makeBaseWritingDirectionRightToLeft to
+ FOR_EACH_RESPONDER_SELECTOR.
+
+2009-01-08 Anders Carlsson <andersca@apple.com>
+
+ Reviewed by Sam Weinig.
+
+ Add and implement WKPCGetStringIdentifier.
+
+ * Plugins/Hosted/NetscapePluginHostProxy.mm:
+ (WKPCGetStringIdentifier):
+ * Plugins/Hosted/WebKitPluginClient.defs:
+
+2009-01-08 Stephanie Lewis <slewis@gmail.com>
+
+ Fix Tiger build.
+
+ * WebView/WebTextIterator.mm:
+
+2009-01-08 Anders Carlsson <andersca@apple.com>
+
+ Reviewed by Sam Weinig.
+
+ Add basic support for evaluating scripts.
+
+ * Plugins/Hosted/NetscapePluginHostProxy.mm:
+ (WebKit::fromUTF8WithLatin1Fallback):
+ (WebKit::NetscapePluginHostProxy::~NetscapePluginHostProxy):
+ (WKPCReleaseObject):
+ (marshalValue):
+ (WKPCEvaluate):
+ * Plugins/Hosted/NetscapePluginInstanceProxy.h:
+ * Plugins/Hosted/NetscapePluginInstanceProxy.mm:
+ (WebKit::NetscapePluginInstanceProxy::releaseObject):
+ (WebKit::NetscapePluginInstanceProxy::evaluate):
+ * Plugins/Hosted/WebKitPluginClient.defs:
+ * Plugins/Hosted/WebKitPluginHostTypes.h:
+
+2009-01-08 David Hyatt <hyatt@apple.com>
+
+ Fix for <rdar://problem/6465682> REGRESSION: In Mail, can't force a message to auto scroll
+
+ Add a new ChromeClient method for handling exposure of scrolled rects.
+
+ Reviewed by Oliver Hunt
+
+ * WebCoreSupport/WebChromeClient.h:
+ * WebCoreSupport/WebChromeClient.mm:
+ (WebChromeClient::scrollRectIntoView):
+
+2009-01-08 Darin Adler <darin@apple.com>
+
+ Reviewed by Tim Hatcher.
+
+ Bug 23185: add a currentRange method to the WebTextIterator SPI
+ https://bugs.webkit.org/show_bug.cgi?id=23185
+ rdar://problem/6455834
+
+ I also noticed a garbage-collection-related threading issue that I fixed, and
+ that the SPI for getting text was unnecessarily inefficient, so I fixed that too.
+
+ * WebView/WebTextIterator.h: Moved currentNode and currentText into a "deprecated"
+ category. Added currentTextPointer and currentTextLength.
+
+ * WebView/WebTextIterator.mm: Changed m_textIterator into an OwnPtr, and also
+ used _textIterator to be consistent with ObjC rather than C++ naming.
+ (+[WebTextIteratorPrivate initialize]): Added. Calls WebCoreObjCFinalizeOnMainThread,
+ since the finalize method here works with main-thread only WebCore objects.
+ (-[WebTextIterator initWithRange:]): Changed since _textIterator is an OwnPtr now.
+ (-[WebTextIterator advance]): Changed name of m_textIterator. Removed null assertion,
+ since I don't think it provides much value.
+ (-[WebTextIterator atEnd]): Ditto.
+ (-[WebTextIterator currentRange]): Added.
+ (-[WebTextIterator currentTextPointer]): Added.
+ (-[WebTextIterator currentTextLength]): Added.
+ (-[WebTextIterator currentNode]): Did same as above, but also put into new category.
+ (-[WebTextIterator currentText]): Ditto.
+
+2009-01-08 Eric Carlson <eric.carlson@apple.com>
+
+ Reviewed by Adele Peterson.
+
+ Simplify Mac interfaces for drawing media controller elements
+
+ <rdar://problem/6293969>
+
+ * WebCoreSupport/WebSystemInterface.m:
+ (InitWebCoreSystemInterface): Update for changes to media controller functions
+
+2009-01-07 Anders Carlsson <andersca@apple.com>
+
+ Reviewed by Dan Bernstein.
+
+ Fix build.
+
+ * Plugins/Hosted/NetscapePluginInstanceProxy.h:
+ * Plugins/Hosted/NetscapePluginInstanceProxy.mm:
+ (WebKit::NetscapePluginInstanceProxy::idForObject):
+
+2009-01-07 Anders Carlsson <andersca@apple.com>
+
+ Reviewed by Dan Bernstein.
+
+ Add a way for a plug-in to get a reference to the Window JS object.
+
+ * Plugins/Hosted/NetscapePluginHostProxy.mm:
+ (WKPCGetWindowNPObject):
+ Call the appropriate instance.
+
+ * Plugins/Hosted/NetscapePluginInstanceProxy.h:
+ Add object ID counter.
+
+ * Plugins/Hosted/NetscapePluginInstanceProxy.mm:
+ (WebKit::NetscapePluginInstanceProxy::destroy):
+ Clear the object ID map.
+
+ (WebKit::NetscapePluginInstanceProxy::idForObject):
+ New method that returns a unique ID for a given JS object.
+
+ (WebKit::NetscapePluginInstanceProxy::getWindowNPObject):
+ Return the object ID for the window JS object.
+
+ * Plugins/Hosted/WebKitPluginClient.defs:
+ Add GetWindowNPObject.
+
+2009-01-07 Darin Adler <darin@apple.com>
+
+ Reviewed by Oliver Hunt.
+
+ Bug 23160: add setMemoryCacheClientCallsEnabled SPI so Safari can be faster with activity window closed
+ https://bugs.webkit.org/show_bug.cgi?id=23160
+
+ * WebView/WebView.mm:
+ (-[WebView setMemoryCacheDelegateCallsEnabled:]): Added.
+ (-[WebView areMemoryCacheDelegateCallsEnabled]): Added
+ * WebView/WebViewPrivate.h: Ditto.
+
+2009-01-05 Gavin Barraclough <baraclough@apple.com>
+
+ Rubber Stamped by Oliver Hunt.
+
+ Replace all uses of JSValue* with new wrapper class, JSValuePtr.
+ See JavaScriptCore/ChangeLog for more detailed description.
+
+ * WebView/WebFrame.mm:
+ (-[WebFrame _stringByEvaluatingJavaScriptFromString:forceUserGesture:]):
+ * WebView/WebScriptDebugDelegate.mm:
+ (-[WebScriptCallFrame _convertValueToObjcValue:]):
+ (-[WebScriptCallFrame exception]):
+ (-[WebScriptCallFrame evaluateWebScript:]):
+ * WebView/WebView.mm:
+ (aeDescFromJSValue):
+ (-[WebView aeDescByEvaluatingJavaScriptFromString:]):
+
+2009-01-06 Pierre-Olivier Latour <pol@apple.com>
+
+ Reviewed by Darin Adler.
+
+ Exposed through WebFrame private interface the new WebCore API AnimationController::numberOfActiveAnimations() to be used by DRT.
+
+ https://bugs.webkit.org/show_bug.cgi?id=23126
+
+ * WebView/WebFrame.mm:
+ (-[WebFrame _numberOfActiveAnimations]):
+ * WebView/WebFramePrivate.h:
+
+2009-01-05 David Kilzer <ddkilzer@apple.com>
+
+ Add SPI to enable, disable and check state of WebIconDatabase
+
+ Reviewed by Darin Adler & Timothy Hatcher.
+
+ Add -[WebIconDatabase isEnabled] and -[WebIconDatabase setEnabled:]
+ SPI to make it possible to enable, disable and check the state of
+ the icon database.
+
+ * Misc/WebIconDatabase.mm:
+ (-[WebIconDatabase init]): Extracted code into -_startUpIconDatabase.
+ (-[WebIconDatabase iconForURL:withSize:cache:]): Switched to use
+ -isEnabled instead of -_isEnabled.
+ (-[WebIconDatabase iconURLForURL:]): Ditto.
+ (-[WebIconDatabase retainIconForURL:]): Ditto.
+ (-[WebIconDatabase releaseIconForURL:]): Ditto.
+ (-[WebIconDatabase isEnabled]): Renamed from -_isEnabled in
+ WebInternal category.
+ (-[WebIconDatabase setEnabled:]): Added. Takes care of changing
+ the enabled/disabled state of the icon database.
+ (-[WebIconDatabase removeAllIcons]): Switched to use -isEnabled
+ instead of -_isEnabled.
+ (-[WebIconDatabase _startUpIconDatabase]): Added. Extrated from
+ -init.
+ (-[WebIconDatabase _shutDownIconDatabase]): Added. Remove
+ observers when the icon database is disabled.
+ * Misc/WebIconDatabaseInternal.h: Added declarations for
+ -_startUpIconDatabase and -_shutDownIconDatabase.
+ * Misc/WebIconDatabasePrivate.h: Added declarations for
+ -isEnabled and -setEnabled:.
+
+2009-01-05 Brady Eidson <beidson@apple.com>
+
+ Reviewed by Jon Honeycutt
+
+ Expose setting the last-visit-was-failure flag on a history items in preparation for <rdar://problem/6173319>
+
+ * History/WebHistoryItem.mm:
+ (-[WebHistoryItem _setLastVisitWasFailure:]):
+ * History/WebHistoryItemPrivate.h:
+
+2009-01-05 Adam Treat <adam.treat@torchmobile.com>
+
+ Another blind mac build fix
+
+ * WebCoreSupport/WebChromeClient.mm:
+ (WebChromeClient::contentsSizeChanged):
+
+2009-01-05 Adam Treat <adam.treat@torchmobile.com>
+
+ Blind mac build fix
+
+ * WebCoreSupport/WebChromeClient.mm:
+
+2009-01-05 Adam Treat <adam.treat@torchmobile.com>
+
+ Fix mac build
+
+ * WebCoreSupport/WebChromeClient.h:
+
+2009-01-05 Adam Treat <adam.treat@torchmobile.com>
+
+ Reviewed by George Staikos.
+
+ Build fix for contentsSizeChanged
+
+ * WebCoreSupport/WebChromeClient.h:
+ * WebCoreSupport/WebChromeClient.mm:
+ (WebChromeClient::contentsSizeChanged):
+
+2009-01-02 Darin Adler <darin@apple.com>
+
+ Reviewed by Sam Weinig.
+
+ Bug 23072: REGRESSION (r37371): In the Dictionary application, scroll bar appears
+ inside its web view when resizing its window
+ https://bugs.webkit.org/show_bug.cgi?id=23072
+ rdar://problem/6368028
+
+ The first attempt at fixing this did not work.
+ This time I was able to reproduce the bug and test the fix.
+
+ * WebCoreSupport/WebFrameLoaderClient.mm:
+ (applyAppleDictionaryApplicationQuirkNonInlinePart): Changed the arguments and
+ function names around a bit to make even less code at the call site.
+ (applyAppleDictionaryApplicationQuirk): Put the check for whether this is the
+ Dictionary application in here.
+ (WebFrameLoaderClient::dispatchDidLoadResourceFromMemoryCache): Put a call to
+ applyAppleDictionaryApplicationQuirk here. This was a case I had missed before,
+ when the script is cached. This fixes one of the two problems with the initial
+ patch; the other fix is in WebCore.
+ (WebFrameLoaderClient::dispatchWillSendRequest): Changed the
+ applyAppleDictionaryApplicationQuirk call here to work the new simpler way.
+
+ * WebView/WebView.mm: Had to add an include due to changes in WebCore header includes.
+
+2009-01-02 Cameron Zwarich <cwzwarich@uwaterloo.ca>
+
+ Reviewed by Darin Adler.
+
+ Bug 23060: REGRESSION (r38629): Cannot scroll a WebHTMLView using Home/End/Page up/Page down
+ <https://bugs.webkit.org/show_bug.cgi?id=23060>
+ <rdar://problem/6467830>
+
+ After r38629, all keyboard events get sent by Editor to the EditorClient, even
+ if the selection is not editable. If the event's command is unsupported by
+ WebHTMLView, WebHTMLView mistakenly thinks that the event was handled when it
+ was not. When using the page up / page down keys, the events generated are of
+ the form scrollPageUp rather than movePageUp, so they are unsupported by
+ WebHTMLView and cause this bug to occur.
+
+ * WebView/WebHTMLView.mm:
+ (-[WebHTMLView doCommandBySelector:]):
+
+2009-01-02 Darin Adler <darin@apple.com>
+
+ Reviewed by Oliver Hunt.
+
+ Bug 23072: REGRESSION (r37371): In the Dictionary application, scroll bar appears inside its web view when resizing its window
+ https://bugs.webkit.org/show_bug.cgi?id=23072
+ rdar://problem/6368028
+
+ * WebCoreSupport/WebFrameLoaderClient.mm:
+ (isAppleDictionaryApplication): Added.
+ (applyAppleDictionaryApplicationQuirk): Added. Under the right conditions, sets
+ a flag to ask HTMLFrameElementBase to ignore the scrolling attribute.
+ (WebFrameLoaderClient::dispatchWillSendRequest): Call the two functions above to
+ apply the quirk when the relevant script is loaded.
+
+2008-12-26 Dan Bernstein <mitz@apple.com>
+
+ Reviewed by Sam Weinig.
+
+ - fix <rdar://problem/6467608> lastVisitWasFailure flag persists in
+ global history after a successful visit
+
+ * History/WebHistory.mm:
+ (-[WebHistory _visitedURL:withTitle:wasFailure:]): Changed to always
+ update the wasFailure flag on the HistoryItem.
+
+2008-12-23 Darin Adler <darin@apple.com>
+
+ Reviewed by Alexey Proskuryakov (a slightly earlier version).
+
+ - fix https://bugs.webkit.org/show_bug.cgi?id=22976
+ crash due to Mail's use of WebArchive and WebResource on non-main thread
+
+ * Misc/WebKitLogging.h: Improved comments for ASSERT_MAIN_THREAD. Got rid of
+ WebKitRunningOnMainThread function, which was just a cover for pthread_main_np.
+ * Misc/WebKitLogging.m: Ditto.
+
+ * Misc/WebKitVersionChecks.h: Added a version after which we won't do the
+ main thread workaround.
+
+ * Misc/WebNSObjectExtras.h: Added a new method, _webkit_getPropertyOnMainThread:,
+ which performs a selector on the main thread, waits for it to complete, and then
+ returns the value on the caller thread.
+ * Misc/WebNSObjectExtras.mm: Added.
+
+ * WebView/WebArchive.mm:
+ (-[WebArchive init]): Added WebCoreThreadViolationCheck.
+ (-[WebArchive initWithMainResource:subresources:subframeArchives:]): Perform
+ initialization on main thread if needMailThreadWorkaround is true.
+ Also added WebCoreThreadViolationCheck.
+ (-[WebArchive initWithData:]): Added WebCoreThreadViolationCheck.
+ (-[WebArchive mainResource]): Get property on main thread if
+ needMailThreadWorkaround is true. Also added WebCoreThreadViolationCheck.
+ (-[WebArchive subresources]): Ditto.
+ (-[WebArchive subframeArchives]): Ditto.
+ (-[WebArchive data]): Ditto.
+ (-[WebArchive _initWithCoreLegacyWebArchive:]): Added WebCoreThreadViolationCheck.
+ (-[WebArchive _coreLegacyWebArchive]): Ditto.
+ (-[WebArchive _initWithArguments:]): Added. Used to implement the cross-thread
+ version of initWithMainResource above.
+
+ * WebView/WebResource.mm:
+ (-[WebResource initWithCoder:]): Added WebCoreThreadViolationCheck.
+ (-[WebResource data]): Get property on main thread if
+ needMailThreadWorkaround is true. Also added WebCoreThreadViolationCheck.
+ (-[WebResource URL]): Ditto.
+ (-[WebResource MIMEType]): Ditto.
+ (-[WebResource textEncodingName]): Ditto.
+ (-[WebResource frameName]): Ditto.
+ (-[WebResource _ignoreWhenUnarchiving]): Ditto.
+ (-[WebResource _initWithData:URL:MIMEType:textEncodingName:frameName:response:copyData:]):
+ Perform initialization on main thread if needMailThreadWorkaround is true.
+ Also added WebCoreThreadViolationCheck.
+ (-[WebResource _suggestedFilename]): Added. Helper for _fileWrapperRepresentation.
+ (-[WebResource _fileWrapperRepresentation]): Rewrote to use methods instead of
+ getting at coreResource directly.
+ (-[WebResource _response]): Get property on main thread if
+ needMailThreadWorkaround is true. Also added WebCoreThreadViolationCheck.
+ (-[WebResource _stringValue]): Ditto.
+ (+[WebResource _needMailThreadWorkaroundIfCalledOffMainThread]): Added.
+ (-[WebResource _initWithArguments:]): Added. Used to implement the cross-thread
+ version of _initWithData above.
+
+ * WebView/WebResourceInternal.h: Changed to include WebResourcePrivate.h since internal
+ clients have access to the SPI as well as the API. Added definition of MAIL_THREAD_WORKAROUND
+ and the needMainThreadWorkaround helper function.
+
+ * Misc/WebIconDatabase.mm: Removed include of now-defunct FoundationExtras.h
+ file. This probably fixes clean builds.
+ * WebCoreSupport/WebIconDatabaseClient.mm: Ditto.
+
+ * WebCoreSupport/WebFrameLoaderClient.mm: Removed include of WebResourcePrivate.h,
+ since it's not actually used.
+ * WebView/WebDataSource.mm: Ditto.
+ * WebView/WebHTMLRepresentation.mm: Ditto.
+
+2008-12-23 Darin Adler <darin@apple.com>
+
+ Reviewed by Dan Bernstein.
+
+ - fix https://bugs.webkit.org/show_bug.cgi?id=22979
+ crash seen in -[WebView drawsBackground] when quitting
+ <rdar://problem/6464601>
+
+ * WebView/WebView.mm:
+ (-[WebView drawsBackground]): Added comment and a null check for _private.
+
+2008-12-22 Kevin Decker <kdecker@apple.com>
+
+ Reviewed by Anders Carlsson.
+
+ <rdar://problem/6449588> REGRESSION (r38279-r38280): Minimize them remaximize a window with a flash plugin, plugin doesn't resume at full speed
+
+ * Plugins/WebBaseNetscapePluginView.mm:
+ (-[WebBaseNetscapePluginView windowDidDeminiaturize:]): Deminiaturizing should restart timers, not stop timers.
+
+2008-12-19 Geoffrey Garen <ggaren@apple.com>
+
+ Reviewed by Darin Adler, Adele Peterson, Brady Eidson.
+
+ Added SPI for getting an unsorted vector of all items in history.
+
+ * History/WebHistory.h:
+ * History/WebHistory.mm:
+ (-[WebHistory allItems]):
+
+2008-12-18 Dan Bernstein <mitz@apple.com>
+
+ Reviewed by Sam Weinig.
+
+ - implement FrameLoaderClient::shouldUseCredentialStorage() by calling
+ a new resource load delegae method.
+
+ * WebCoreSupport/WebFrameLoaderClient.h:
+ * WebCoreSupport/WebFrameLoaderClient.mm:
+ (WebFrameLoaderClient::shouldUseCredentialStorage): Added. Calls the
+ delegate method. If the method is unimplemented, returns true for
+ backwards compatibility.
+ * WebView/WebView.mm:
+ (-[WebView _cacheResourceLoadDelegateImplementations]): Initialize the
+ shouldUseCredentialStorageFunc member.
+ (CallResourceLoadDelegateReturningBoolean): Added.
+ * WebView/WebViewInternal.h:
+ * WebView/WebResourceLoadDelegatePrivate.h: Declared the delegate method
+ -webView:resource:shouldUseCredentialStorageForDataSource:.
+
+2008-12-18 Cameron Zwarich <zwarich@apple.com>
+
+ Reviewed by Jonathan Honeycutt.
+
+ Fix an apparent typo in r39385 that is causing lots of crashes.
+
+ * WebCoreSupport/WebFrameLoaderClient.mm:
+ (WebFrameLoaderClient::dispatchDidFirstVisuallyNonEmptyLayout):
+
+2008-12-18 Brady Eidson <beidson@apple.com>
+
+ Reviewed by John Sullivan
+
+ Initial visit to a website creates history items that start with a visit count of
+ zero instead of one
+
+ * History/WebHistory.mm:
+ (-[WebHistoryPrivate visitedURL:withTitle:]): Set the visit count on new items
+
+ * History/WebHistoryItem.mm:
+ (-[WebHistoryItem _setVisitCount:]): Call through to the WebCore item
+ * History/WebHistoryItemInternal.h:
+
+2008-12-18 Sam Weinig <sam@webkit.org>
+
+ Reviewed by John Sullivan.
+
+ Implement FrameLoaderClient::dispatchDidFirstVisuallyNonEmptyLayout() by calling
+ a new private frame load delegate method.
+
+ * WebCoreSupport/WebFrameLoaderClient.h:
+ * WebCoreSupport/WebFrameLoaderClient.mm:
+ (WebFrameLoaderClient::dispatchDidFirstVisuallyNonEmptyLayout):
+ * WebView/WebView.mm:
+ (-[WebView _cacheFrameLoadDelegateImplementations]):
+ * WebView/WebViewInternal.h:
+ * WebView/WebViewPrivate.h:
+
+2008-12-16 Antti Koivisto <antti@apple.com>
+
+ Reviewed by John Sullivan.
+
+ Add version check for shift-reload behavior.
+
+ * Misc/WebKitVersionChecks.h:
+ * WebView/WebFrame.mm:
+ (-[WebFrame reload]):
+
+2008-12-16 Anders Carlsson <andersca@apple.com>
+
+ Reviewed by Dan Bernstein.
+
+ Start sending keyboard events to the plug-in host.
+
+ * Plugins/Hosted/NetscapePluginInstanceProxy.h:
+ * Plugins/Hosted/NetscapePluginInstanceProxy.mm:
+ (WebKit::NetscapePluginInstanceProxy::keyEvent):
+ * Plugins/Hosted/WebHostedNetscapePluginView.mm:
+ (-[WebHostedNetscapePluginView keyDown:]):
+ (-[WebHostedNetscapePluginView keyUp:]):
+ * Plugins/Hosted/WebKitPluginHost.defs:
+
+2008-12-16 Anders Carlsson <andersca@apple.com>
+
+ Reviewed by Kevin Decker.
+
+ <rdar://problem/6450538>
+
+ Fix flag enumeration.
+
+ * Plugins/Hosted/WebKitPluginHostTypes.h:
+
+2008-12-16 Anders Carlsson <andersca@apple.com>
+
+ Reviewed by Kevin Decker.
+
+ Instead of passing a gazillion booleans to WKPCLoadURL, pass a single set of flags.
+
+ * Plugins/Hosted/NetscapePluginHostProxy.mm:
+ (WKPCLoadURL):
+ * Plugins/Hosted/NetscapePluginInstanceProxy.h:
+ * Plugins/Hosted/NetscapePluginInstanceProxy.mm:
+ (WebKit::NetscapePluginInstanceProxy::loadURL):
+ * Plugins/Hosted/WebKitPluginClient.defs:
+ * Plugins/Hosted/WebKitPluginHostTypes.h:
+
+2008-12-16 Anders Carlsson <andersca@apple.com>
+
+ Reviewed by Kevin Decker.
+
+ Add trailing null to headers to avoid a crash in the plug-in host.
+
+ * Plugins/Hosted/HostedNetscapePluginStream.mm:
+ (WebKit::HostedNetscapePluginStream::didReceiveResponse):
+
+2008-12-15 Mark Rowe <mrowe@apple.com>
+
+ Rubber-stamped by Cameron Zwarich.
+
+ <rdar://problem/6289933> Change WebKit-related projects to build with GCC 4.2 on Leopard.
+
+ * Configurations/Base.xcconfig:
+ * Configurations/DebugRelease.xcconfig:
+
+2008-12-15 Stephanie Lewis <slewis@apple.com>
+
+ Fix build.
+
+ * Plugins/Hosted/NetscapePluginInstanceProxy.mm:
+
+2008-12-15 Anders Carlsson <andersca@apple.com>
+
+ Reviewed by Sam Weinig.
+
+ Change InstantiatePlugin to be asynchronous so we won't deadlock if the plug-in tries to call
+ back into us while it's being instantiated.
+
+ * Plugins/Hosted/NetscapePluginHostManager.mm:
+ (WebKit::NetscapePluginHostManager::instantiatePlugin):
+ * Plugins/Hosted/NetscapePluginHostProxy.h:
+ (WebKit::NetscapePluginHostProxy::clientPort):
+ * Plugins/Hosted/NetscapePluginHostProxy.mm:
+ (WKPCInstantiatePluginReply):
+ * Plugins/Hosted/NetscapePluginInstanceProxy.h:
+ (WebKit::NetscapePluginInstanceProxy::Reply::):
+ (WebKit::NetscapePluginInstanceProxy::Reply::Reply):
+ (WebKit::NetscapePluginInstanceProxy::Reply::~Reply):
+ (WebKit::NetscapePluginInstanceProxy::InstantiatePluginReply::InstantiatePluginReply):
+ (WebKit::NetscapePluginInstanceProxy::setCurrentReply):
+ (WebKit::NetscapePluginInstanceProxy::waitForReply):
+ * Plugins/Hosted/NetscapePluginInstanceProxy.mm:
+ (WebKit::NetscapePluginInstanceProxy::NetscapePluginInstanceProxy):
+ (WebKit::NetscapePluginInstanceProxy::processRequestsAndWaitForReply):
+ * Plugins/Hosted/WebKitPluginClient.defs:
+ * Plugins/Hosted/WebKitPluginHost.defs:
+
+2008-12-15 Anders Carlsson <andersca@apple.com>
+
+ Reviewed by Darin Adler.
+
+ Let WebKit generate a plug-in ID instead of having the plug-in host do it.
+
+ * Plugins/Hosted/NetscapePluginHostManager.mm:
+ (WebKit::NetscapePluginHostManager::instantiatePlugin):
+ Create the plug-in proxy before instantiating the plug-in.
+
+ * Plugins/Hosted/NetscapePluginInstanceProxy.h:
+ (WebKit::NetscapePluginInstanceProxy::create):
+ (WebKit::NetscapePluginInstanceProxy::setRenderContextID):
+ (WebKit::NetscapePluginInstanceProxy::setUseSoftwareRenderer):
+ * Plugins/Hosted/NetscapePluginInstanceProxy.mm:
+ (WebKit::NetscapePluginInstanceProxy::NetscapePluginInstanceProxy):
+ * Plugins/Hosted/WebKitPluginHost.defs:
+
+2008-12-15 Anders Carlsson <andersca@apple.com>
+
+ Reviewed by Sam Weinig.
+
+ LoadURL doesn't need to be asynchronous.
+
+ * Plugins/Hosted/NetscapePluginHostProxy.mm:
+ (WKPCLoadURL):
+ * Plugins/Hosted/WebKitPluginClient.defs:
+ * Plugins/Hosted/WebKitPluginHost.defs:
+
+2008-12-15 Antti Koivisto <antti@apple.com>
+
+ Reviewed by Darin Adler.
+
+ - Add [WebFrame reloadFromOrigin] for performing end-to-end reload.
+ - Add corresponding IBAction to WebView.
+ - Temporarily make [WebFrame reload] trigger end-to-end reload if shift modifier is pressed when it is called.
+
+ * WebView/WebFrame.h:
+ * WebView/WebFrame.mm:
+ (-[WebFrame reload]):
+ (-[WebFrame reloadFromOrigin]):
+ * WebView/WebFramePrivate.h: Match the FrameLoadType enum in WebCore.
+ * WebView/WebView.h:
+ * WebView/WebView.mm:
+ (-[WebView reloadFromOrigin:]):
+
+2008-12-14 Dan Bernstein <mitz@apple.com>
+
+ Reviewed by Darin Adler.
+
+ - fix <rdar://problem/3258561> WebHistoryAllItemsRemovedNotification
+ should add items to userInfo
+
+ * History/WebHistory.mm:
+ (-[WebHistoryPrivate allItems]): Added this helper method, which returns
+ all values in the _entriesByURL dictionary.
+ (-[WebHistory removeAllItems]): Changed to send the array of all items
+ in the notification.
+
+2008-12-13 Darin Adler <darin@apple.com>
+
+ - <rdar://problem/6441035> WebTextIterator class not exported in WebKit
+
+ * WebKit.exp: Added the class. We forgot to export it when we added
+ the WebTextIterator SPI.
+
+2008-12-12 Darin Adler <darin@apple.com>
+
+ Rubber stamped by Adam Roben.
+
+ - fix <rdar://problem/5648301> Can't tab around to text fields in Safari
+ login sheet after clicking static text, due to AppKit key loop change
+
+ * Panels/English.lproj/WebAuthenticationPanel.nib/classes.nib: Removed.
+ * Panels/English.lproj/WebAuthenticationPanel.nib/designable.nib: Added.
+ * Panels/English.lproj/WebAuthenticationPanel.nib/info.nib: Removed.
+ * Panels/English.lproj/WebAuthenticationPanel.nib/keyedobjects.nib:
+ Set nextKeyView of the selectable static texts to the editable text.
+ Updated nib format.
+
+2008-12-12 Stephanie Lewis <slewis@apple.com>
+
+ Reviewed by Geoff Garen.
+
+ Shrink Cache Sizes.
+
+ * WebView/WebView.mm:
+ (+[WebView _setCacheModel:]):
+
+2008-12-12 Anders Carlsson <andersca@apple.com>
+
+ Reviewed by Tim Hatcher.
+
+ Don't try to free the dummy "1" port state.
+
+ * Plugins/WebNetscapePluginView.mm:
+ (-[WebNetscapePluginView sendEvent:isDrawRect:]):
+ (-[WebNetscapePluginView updateAndSetWindow]):
+
+2008-12-11 Cameron Zwarich <zwarich@apple.com>
+
+ Rubber-stamped by Mark Rowe.
+
+ Roll out r39212 due to assertion failures during layout tests, multiple
+ layout test failures, memory leaks, and obvious incorrectness.
+
+ * WebView/WebPreferenceKeysPrivate.h:
+ * WebView/WebPreferences.mm:
+ (-[WebPreferences fullDocumentTeardownEnabled]):
+ * WebView/WebPreferencesPrivate.h:
+
+2008-12-11 Stephanie Lewis <slewis@apple.com>
+
+ Fix build.
+
+ * WebView/WebView.mm:
+
+2008-12-11 Stephanie Lewis <slewis@apple.com>
+
+ Reviewed by Oliver Hunt.
+
+ Empty Web cache before quitting a debug build in order
+ to report accurate CachedResource leaks.
+
+ * WebView/WebView.mm:
+ (-[WebView _close]):
+
+2008-12-11 Anders Carlsson <andersca@apple.com>
+
+ Fix Tiger build.
+
+ * Misc/WebNSDataExtras.h:
+
+2008-12-11 Anders Carlsson <andersca@apple.com>
+
+ Reviewed by Cameron Zwarich.
+
+ https://bugs.webkit.org/show_bug.cgi?id=22797
+ REGRESSION: Crash at http://news.cnet.com/8301-17939_109-10119149-2.html
+
+ Make sure to protect the stream because destroyStream can otherwise cause it to be deleted.
+
+ * Plugins/WebBaseNetscapePluginStream.mm:
+ (WebNetscapePluginStream::destroyStreamWithReason):
+
+2008-12-10 Glenn Wilson <gwilson@google.com>
+
+ Reviewed by Adam Roben.
+
+ Added new methods for overriding default WebPreference values
+ and for resetting preferences to their defaults.
+ https://bugs.webkit.org/show_bug.cgi?id=20534
+
+ * WebView/WebPreferenceKeysPrivate.h:
+ * WebView/WebPreferences.mm:
+ (-[WebPreferences resetToDefaults]): new method
+ (-[WebPreferences overridePreference:flag:]): new method
+ * WebView/WebPreferencesPrivate.h: new method signatures
+
+2008-12-10 Anders Carlsson <andersca@apple.com>
+
+ Reviewed by Darin Adler.
+
+ Implement support for NPN_PostURL/NPN_PostURLNotify in WebKit.
+
+ * Plugins/Hosted/NetscapePluginInstanceProxy.h:
+ Add stopAllStreams.
+
+ * Plugins/Hosted/NetscapePluginInstanceProxy.mm:
+ (WebKit::NetscapePluginInstanceProxy::stopAllStreams):
+ Factored out this from ::destroy.
+
+ (WebKit::NetscapePluginInstanceProxy::destroy):
+ Call stopAllStreams().
+
+ (WebKit::NetscapePluginInstanceProxy::pluginHostDied):
+ Ditto.
+
+ (WebKit::NetscapePluginInstanceProxy::loadURL):
+ Handle post being true. This code has been copied from WebNetscapePluginView.mm (for now).
+
+2008-12-10 Anders Carlsson <andersca@apple.com>
+
+ Reviewed by Darin Adler.
+
+ Move two NSData category methods to WebNSDataExtras.m.
+
+ * Misc/WebNSDataExtras.h:
+ * Misc/WebNSDataExtras.m:
+ (-[NSData _web_startsWithBlankLine]):
+ (-[NSData _web_locationAfterFirstBlankLine]):
+ * Plugins/WebNetscapePluginView.mm:
+
+2008-12-10 Alice Liu <alice.liu@apple.com>
+
+ fixed https://bugs.webkit.org/show_bug.cgi?id=20685
+
+ Reviewed by Darin Adler.
+
+ * Misc/WebNSPasteboardExtras.mm:
+ Ask image for its file extension instead of falling back on MIME type and file path.
+ Also moved this code to before setting the pasteboard data so as not to set any if
+ no extension can be determined.
+ (-[NSPasteboard _web_declareAndWriteDragImageForElement:URL:title:archive:source:]):
+
+ * WebView/WebHTMLView.mm:
+ Fixed a separate but related long-standing bug of how the filename for the promised
+ drag data is determined by asking the image for a proper file extension.
+ (-[WebHTMLView namesOfPromisedFilesDroppedAtDestination:]):
+
+2008-12-09 Anders Carlsson <andersca@apple.com>
+
+ Reviewed by Darin Adler.
+
+ Fix typecast.
+
+ * WebView/WebHTMLView.mm:
+ (-[WebHTMLView _pauseNullEventsForAllNetscapePlugins]):
+
+2008-12-09 Anders Carlsson <andersca@apple.com>
+
+ Reviewed by Darin Adler.
+
+ Implement software rendering of hosted plug-ins.
+
+ * Plugins/Hosted/NetscapePluginHostProxy.mm:
+ (WKPCInvalidateRect):
+ New MiG function. This is called by the plug-in host when it has drawn something.
+
+ * Plugins/Hosted/WebHostedNetscapePluginView.h:
+ * Plugins/Hosted/WebHostedNetscapePluginView.mm:
+ (-[WebHostedNetscapePluginView createPlugin]):
+ Create a software renderer.
+
+ (-[WebHostedNetscapePluginView destroyPlugin]):
+ Destroy the software renderer.
+
+ (-[WebHostedNetscapePluginView drawRect:]):
+ Draw using the software renderer.
+
+ * Plugins/Hosted/WebKitPluginClient.defs:
+ Add InvalidateRect.
+
+2008-12-09 Brett Wilson <brettw@chromium.org>
+
+ Reviewed by Dave Hyatt.
+
+ https://bugs.webkit.org/show_bug.cgi?id=22177
+
+ Add a callback on ChromeClient that the state of form elements on
+ the page has changed. This is to allow clients implementing session
+ saving to know when the current state is dirty.
+
+ * WebCoreSupport/WebChromeClient.h:
+ (WebChromeClient::formStateDidChange):
+
+2008-12-09 Anders Carlsson <andersca@apple.com>
+
+ Reviewed by Dan Bernstein.
+
+ Make sure to pause null events for hosted plug-ins as well.
+
+ * WebView/WebHTMLView.mm:
+ (-[WebHTMLView _pauseNullEventsForAllNetscapePlugins]):
+
+2008-12-09 Anders Carlsson <andersca@apple.com>
+
+ Reviewed by Darin Adler.
+
+ * Plugins/Hosted/NetscapePluginHostProxy.h:
+ * Plugins/Hosted/NetscapePluginHostProxy.mm:
+ (WebKit::NetscapePluginHostProxy::NetscapePluginHostProxy):
+ (WebKit::NetscapePluginHostProxy::~NetscapePluginHostProxy):
+ Unfortunately we can't use a libdispatch source right now, because of <rdar://problem/6393180>.
+
+2008-12-09 Timothy Hatcher <timothy@apple.com>
+
+ Implement a few methods needed to keep Dictionary.app working on Leopard.
+
+ <rdar://problem/6002160> Internal changes to WebKit in Safari 4
+ Developer Preview might break Dictionary
+
+ Reviewed by Dan Bernstein.
+
+ * WebView/WebFrame.mm:
+ (-[WebFrame convertNSRangeToDOMRange:]): Added. Calls _convertNSRangeToDOMRange.
+ (-[WebFrame convertDOMRangeToNSRange:]): Added. Calls _convertDOMRangeToNSRange.
+ * WebView/WebHTMLView.mm:
+ (-[WebHTMLView _bridge]): Added. Returns the WebFrame, which has the methods
+ that Dictionary.app is using.
+
+2008-12-08 Anders Carlsson <andersca@apple.com>
+
+ Reviewed by Darin Adler.
+
+ More work towards getting NPN_GetURL working.
+
+ * Plugins/Hosted/HostedNetscapePluginStream.h:
+ Inherit from NetscapePlugInStreamLoaderClient.
+
+ (WebKit::HostedNetscapePluginStream::streamID):
+ * Plugins/Hosted/HostedNetscapePluginStream.mm:
+ (WebKit::HostedNetscapePluginStream::startStream):
+ Keep track of the resposne URL and the MIME type. Pass the response URL to the
+ plug-in host.
+
+ (WebKit::HostedNetscapePluginStream::didFinishLoading):
+ Disconnect the stream.
+
+ (WebKit::HostedNetscapePluginStream::start):
+ Create a plug-in stream loader and start loading.
+
+ (WebKit::HostedNetscapePluginStream::stop):
+ Cancel the load.
+
+ * Plugins/Hosted/NetscapePluginHostProxy.mm:
+ (WKPCLoadURL):
+ Fix the parameter order.
+
+ (WKPCCancelLoadURL):
+ New function that cancels a load of a stream with a given reason.
+
+ * Plugins/Hosted/NetscapePluginInstanceProxy.h:
+ * Plugins/Hosted/NetscapePluginInstanceProxy.mm:
+ (WebKit::NetscapePluginInstanceProxy::destroy):
+ Stop the streams.
+
+ (WebKit::NetscapePluginInstanceProxy::pluginStream):
+ Return a plug-in stream given a stream ID.
+
+ (WebKit::NetscapePluginInstanceProxy::disconnectStream):
+ Remove the stream from the streams map.
+
+ (WebKit::NetscapePluginInstanceProxy::loadRequest):
+ Create a stream and load it.
+
+ * Plugins/Hosted/WebKitPluginClient.defs:
+ Add CancelLoadURL.
+
+ * Plugins/Hosted/WebKitPluginHost.defs:
+ Add responseURL to StartStream.
+
+ * Plugins/WebBaseNetscapePluginView.h:
+ * Plugins/WebBaseNetscapePluginView.mm:
+ (-[WebBaseNetscapePluginView pluginPackage]):
+ Move this down to the base class from WebNetscapePluginView.
+
+ * Plugins/WebNetscapePluginView.h:
+ * Plugins/WebNetscapePluginView.mm:
+
+2008-12-08 Dan Bernstein <mitz@apple.com>
+
+ Reviewed by John Sullivan.
+
+ - WebKit/mac part of tracking the global history item for a WebView
+
+ * WebView/WebView.mm:
+ (-[WebView _globalHistoryItem]): Added. Returns the page's global
+ history item.
+ * WebView/WebViewPrivate.h:
+
+2008-12-06 Simon Fraser <simon.fraser@apple.com>
+
+ Reviewed by Dave Hyatt
+
+ https://bugs.webkit.org/show_bug.cgi?id=15671
+
+ VisiblePosition::caretRect() was renaemd to absoluteCaretBounds().
+
+ * WebView/WebFrame.mm:
+ (-[WebFrame _caretRectAtNode:offset:affinity:]):
+
+2008-12-06 David Kilzer <ddkilzer@apple.com>
+
+ Bug 22666: Clean up data structures used when collecting URLs of subresources for webarchives
+
+ <https://bugs.webkit.org/show_bug.cgi?id=22666>
+
+ Reviewed by Darin Adler.
+
+ * DOM/WebDOMOperations.mm:
+ (-[DOMNode _subresourceURLs]): Changed from using Vector<KURL> to
+ ListHashSet<KURL> when calling WebCore::Node::getSubresourceURLs().
+
+2008-12-05 Alexey Proskuryakov <ap@webkit.org>
+
+ Reviewed by Darin Adler.
+
+ <rdar://problem/6405599> Tiger Mail crashes when using "Mail Contents of This Page"
+ in Safari before opening a mail message in Mail
+
+ * Carbon/CarbonWindowAdapter.m: Removed.
+ * Carbon/CarbonWindowAdapter.mm: Copied from WebKit/mac/Carbon/CarbonWindowAdapter.m.
+ (+[CarbonWindowAdapter initialize]):
+ * History/WebBackForwardList.mm:
+ (+[WebBackForwardList initialize]):
+ * History/WebHistoryItem.mm:
+ (+[WebHistoryItem initialize]):
+ * Misc/WebElementDictionary.mm:
+ (+[WebElementDictionary initialize]):
+ * Plugins/Hosted/WebHostedNetscapePluginView.mm:
+ (+[WebHostedNetscapePluginView initialize]):
+ * Plugins/WebBaseNetscapePluginView.mm:
+ * Plugins/WebBasePluginPackage.m: Removed.
+ * Plugins/WebBasePluginPackage.mm: Copied from WebKit/mac/Plugins/WebBasePluginPackage.m.
+ (+[WebBasePluginPackage initialize]):
+ * Plugins/WebNetscapePluginView.mm:
+ (+[WebNetscapePluginView initialize]):
+ * WebCoreSupport/WebEditorClient.mm:
+ (+[WebEditCommand initialize]):
+ * WebCoreSupport/WebFrameLoaderClient.mm:
+ * WebView/WebArchive.mm:
+ (+[WebArchivePrivate initialize]):
+ * WebView/WebDataSource.mm:
+ (+[WebDataSourcePrivate initialize]):
+ * WebView/WebHTMLView.mm:
+ (+[WebHTMLViewPrivate initialize]):
+ (+[WebHTMLView initialize]):
+ * WebView/WebResource.mm:
+ (+[WebResourcePrivate initialize]):
+ * WebView/WebView.mm:
+ (+[WebViewPrivate initialize]):
+ Call JSC::initializeThreading();
+
+2008-12-04 Stephanie Lewis <slewis@apple.com>
+
+ Fix build.
+
+ * Plugins/Hosted/NetscapePluginHostProxy.mm:
+ (WKPCLoadURL):
+
+2008-12-04 Anders Carlsson <andersca@apple.com>
+
+ Reviewed by Sam Weinig.
+
+ More work on streams.
+
+ * Plugins/Hosted/HostedNetscapePluginStream.h: Added.
+ (WebKit::HostedNetscapePluginStream::create):
+ * Plugins/Hosted/HostedNetscapePluginStream.mm: Added.
+ (WebKit::HostedNetscapePluginStream::HostedNetscapePluginStream):
+ (WebKit::HostedNetscapePluginStream::startStreamWithResponse):
+ (WebKit::HostedNetscapePluginStream::startStream):
+ (WebKit::HostedNetscapePluginStream::didReceiveData):
+ (WebKit::HostedNetscapePluginStream::didFinishLoading):
+ (WebKit::HostedNetscapePluginStream::didReceiveResponse):
+ * Plugins/Hosted/NetscapePluginInstanceProxy.h:
+ (WebKit::NetscapePluginInstanceProxy::pluginView):
+ (WebKit::NetscapePluginInstanceProxy::hostProxy):
+ * Plugins/Hosted/NetscapePluginInstanceProxy.mm:
+ (WebKit::NetscapePluginInstanceProxy::PluginRequest::PluginRequest):
+ (WebKit::NetscapePluginInstanceProxy::PluginRequest::requestID):
+ (WebKit::NetscapePluginInstanceProxy::PluginRequest::request):
+ (WebKit::NetscapePluginInstanceProxy::PluginRequest::frameName):
+ (WebKit::NetscapePluginInstanceProxy::PluginRequest::didStartFromUserGesture):
+ (WebKit::NetscapePluginInstanceProxy::NetscapePluginInstanceProxy):
+ (WebKit::NetscapePluginInstanceProxy::performRequest):
+ (WebKit::NetscapePluginInstanceProxy::evaluateJavaScript):
+ (WebKit::NetscapePluginInstanceProxy::requestTimerFired):
+ (WebKit::NetscapePluginInstanceProxy::loadRequest):
+ * Plugins/Hosted/WebKitPluginHost.defs:
+
+2008-12-04 Anders Carlsson <andersca@apple.com>
+
+ Reviewed by Sam Weinig.
+
+ Start implementing WKPCLoadURL. Currently this has copied a lot of code from WebNetscapePluginView
+ but once we have a more complete implementation of NPStreams we can start refactoring things so that the
+ implementations can share more code.
+
+ * Plugins/Hosted/NetscapePluginHostProxy.mm:
+ (WKPCLoadURL):
+ * Plugins/Hosted/NetscapePluginInstanceProxy.h:
+ * Plugins/Hosted/NetscapePluginInstanceProxy.mm:
+ (WebKit::NetscapePluginInstanceProxy::NetscapePluginInstanceProxy):
+ (WebKit::NetscapePluginInstanceProxy::loadURL):
+ (WebKit::NetscapePluginInstanceProxy::performRequest):
+ (WebKit::NetscapePluginInstanceProxy::requestTimerFired):
+ (WebKit::NetscapePluginInstanceProxy::loadRequest):
+ * Plugins/Hosted/WebKitPluginClient.defs:
+ * Plugins/Hosted/WebKitPluginHost.defs:
+
+2008-12-04 Anders Carlsson <andersca@apple.com>
+
+ Reviewed by Dan Bernstein.
+
+ Move requestWithURLCString to WebBaseNetscapePluginView.
+
+ * Plugins/WebBaseNetscapePluginView.h:
+ * Plugins/WebBaseNetscapePluginView.mm:
+ (-[WebBaseNetscapePluginView requestWithURLCString:]):
+ * Plugins/WebNetscapePluginView.mm:
+
+2008-12-03 Anders Carlsson <andersca@apple.com>
+
+ Reviewed by Sam Weinig.
+
+ Move WebPluginRequest to its own file.
+
+ * Plugins/WebNetscapePluginView.mm:
+ * Plugins/WebPluginRequest.h: Added.
+ * Plugins/WebPluginRequest.m: Added.
+ (-[WebPluginRequest initWithRequest:frameName:notifyData:sendNotification:didStartFromUserGesture:]):
+ (-[WebPluginRequest dealloc]):
+ (-[WebPluginRequest request]):
+ (-[WebPluginRequest frameName]):
+ (-[WebPluginRequest isCurrentEventUserGesture]):
+ (-[WebPluginRequest sendNotification]):
+ (-[WebPluginRequest notifyData]):
+
+2008-12-03 Anders Carlsson <andersca@apple.com>
+
+ Handle the CA model.
+
+ * Plugins/WebNetscapePluginView.mm:
+ (-[WebNetscapePluginView setWindowIfNecessary]):
+
+2008-12-03 Anders Carlsson <andersca@apple.com>
+
+ Reviewed by Kevin Decker.
+
+ <rdar://problem/6412293>
+ Call NPP_SetWindow for CA plug-ins.
+
+ * Plugins/WebNetscapePluginView.mm:
+ (-[WebNetscapePluginView saveAndSetNewPortStateForUpdate:]):
+ (-[WebNetscapePluginView restorePortState:]):
+ (-[WebNetscapePluginView isNewWindowEqualToOldWindow]):
+ (-[WebNetscapePluginView updateAndSetWindow]):
+ (-[WebNetscapePluginView setWindowIfNecessary]):
+
+2008-12-03 Anders Carlsson <andersca@apple.com>
+
+ Fix the release build.
+
+ * Plugins/Hosted/NetscapePluginHostProxy.mm:
+ (WebKit::NetscapePluginHostProxy::deadNameNotificationCallback):
+
+2008-12-03 Anders Carlsson <andersca@apple.com>
+
+ Reviewed by Dan Bernstein.
+
+ <rdar://problem/6412234>
+ Don't crash if we can't launch the plug-in host.
+
+ * Plugins/Hosted/NetscapePluginHostManager.mm:
+ (WebKit::NetscapePluginHostManager::instantiatePlugin):
+
+2008-12-02 Anders Carlsson <andersca@apple.com>
+
+ Reviewed by Dan Bernstein.
+
+ Start processing messages sent to the client port.
+
+ * Plugins/Hosted/NetscapePluginHostProxy.h:
+ * Plugins/Hosted/NetscapePluginHostProxy.mm:
+ Add a map from ports to plug-in proxies. Turn the set of instances into a map from
+ pluginID to instance proxy.
+
+ (WKPCStatusText):
+ Look up the right instance proxy and call status().
+
+ * Plugins/Hosted/NetscapePluginInstanceProxy.h:
+ (WebKit::NetscapePluginInstanceProxy::pluginID):
+ * Plugins/Hosted/NetscapePluginInstanceProxy.mm:
+ (WebKit::NetscapePluginInstanceProxy::status):
+ Implement this.
+
+ * Plugins/Hosted/WebKitPluginClient.defs:
+ Add the plug-in ID to StatusText.
+
+2008-12-02 Gregory Hughes <ghughes@apple.com>
+
+ Reviewed by Beth Dakin.
+
+ Bug 22513: ZOOM: text selection does not send correct zoom bounds
+
+ When zoomed, text selection must send the zoom bounds in flipped
+ screen coordinates.
+
+ * WebCoreSupport/WebViewFactory.mm:
+ (-[WebViewFactory accessibilityConvertScreenRect:]):
+
+2008-12-02 Anders Carlsson <andersca@apple.com>
+
+ Reviewed by Dan Bernstein.
+
+ Create a client mach port and pass it to the plug-in host.
+
+ * Plugins/Hosted/NetscapePluginHostManager.h:
+ * Plugins/Hosted/NetscapePluginHostManager.mm:
+ (WebKit::NetscapePluginHostManager::hostForPackage):
+ (WebKit::NetscapePluginHostManager::spawnPluginHost):
+ * Plugins/Hosted/NetscapePluginHostProxy.h:
+ * Plugins/Hosted/NetscapePluginHostProxy.mm:
+ (WebKit::NetscapePluginHostProxy::NetscapePluginHostProxy):
+ * Plugins/Hosted/WebKitPluginHost.defs:
+
+2008-12-02 Anders Carlsson <andersca@apple.com>
+
+ Reviewed by Sam Weinig.
+
+ Let the plug-in views know if the plug-in host crashes.
+
+ * Plugins/Hosted/NetscapePluginHostManager.h:
+ * Plugins/Hosted/NetscapePluginHostManager.mm:
+ (WebKit::NetscapePluginHostManager::instantiatePlugin):
+ * Plugins/Hosted/NetscapePluginHostProxy.h:
+ * Plugins/Hosted/NetscapePluginHostProxy.mm:
+ (WebKit::NetscapePluginHostProxy::pluginHostDied):
+ (WebKit::NetscapePluginHostProxy::addPluginInstance):
+ (WebKit::NetscapePluginHostProxy::removePluginInstance):
+
+ * Plugins/Hosted/NetscapePluginInstanceProxy.h:
+ (WebKit::NetscapePluginInstanceProxy::create):
+ * Plugins/Hosted/NetscapePluginInstanceProxy.mm:
+ Keep a pointer to the host proxy.
+
+ (WebKit::NetscapePluginInstanceProxy::NetscapePluginInstanceProxy):
+ Add the instance to the host set.
+
+ (WebKit::NetscapePluginInstanceProxy::~NetscapePluginInstanceProxy):
+ Remove the instance form the host set.
+
+ (WebKit::NetscapePluginInstanceProxy::pluginHostDied):
+ Tell the plug-in view that the plug-in died.
+
+ * Plugins/Hosted/WebHostedNetscapePluginView.h:
+ * Plugins/Hosted/WebHostedNetscapePluginView.mm:
+ (-[WebHostedNetscapePluginView createPlugin]):
+ Pass the plug-in view to the instantiatePlugin.
+
+ (-[WebHostedNetscapePluginView pluginHostDied]):
+ Handle the plug-in host crashing.
+
+ (-[WebHostedNetscapePluginView drawRect:]):
+ Fill the plug-in view with a nice red shade if the plug-in crashes.
+
+2008-12-01 Anders Carlsson <andersca@apple.com>
+
+ Reviewed by Dan Bernstein.
+
+ Recover if the plug-in host dies and we try to instantiate another plugin before we get the port death notification
+
+ * Plugins/Hosted/NetscapePluginHostManager.h:
+ * Plugins/Hosted/NetscapePluginHostManager.mm:
+ (WebKit::NetscapePluginHostManager::pluginHostDied):
+ Remove the plug-in host from the map.
+
+ (WebKit::NetscapePluginHostManager::instantiatePlugin):
+ NetscapePluginHostProxy is no longer refcounted.
+
+ * Plugins/Hosted/NetscapePluginHostProxy.h:
+ This is no longer refcounted. Add a set of plug-in instances (unused for now).
+
+ * Plugins/Hosted/NetscapePluginHostProxy.mm:
+ (WebKit::NetscapePluginHostProxy::NetscapePluginHostProxy):
+ Create a death notification port.
+
+ (WebKit::NetscapePluginHostProxy::pluginHostDied):
+ Tell the manager that we're gone and delete ourselves.
+
+ (WebKit::NetscapePluginHostProxy::deathPortCallback):
+ New CFMachPort callback.
+
+2008-12-01 Anders Carlsson <andersca@apple.com>
+
+ Reviewed by Dan Bernstein.
+
+ Move instantiatePlugin to NetscapePluginHostManager.
+
+ * Plugins/Hosted/NetscapePluginHostManager.h:
+ * Plugins/Hosted/NetscapePluginHostManager.mm:
+ (WebKit::NetscapePluginHostManager::instantiatePlugin):
+ * Plugins/Hosted/NetscapePluginHostProxy.h:
+ * Plugins/Hosted/NetscapePluginHostProxy.mm:
+ * Plugins/Hosted/WebHostedNetscapePluginView.mm:
+ (-[WebHostedNetscapePluginView createPlugin]):
+
+2008-12-01 Anders Carlsson <andersca@apple.com>
+
+ Reviewed by Dan Bernstein.
+
+ Pass the plug-in host port directly to the instance proxy.
+
+ * Plugins/Hosted/NetscapePluginHostProxy.mm:
+ (WebKit::NetscapePluginHostProxy::instantiatePlugin):
+ * Plugins/Hosted/NetscapePluginInstanceProxy.h:
+ (WebKit::NetscapePluginInstanceProxy::create):
+ * Plugins/Hosted/NetscapePluginInstanceProxy.mm:
+ (WebKit::NetscapePluginInstanceProxy::NetscapePluginInstanceProxy):
+ (WebKit::NetscapePluginInstanceProxy::resize):
+ (WebKit::NetscapePluginInstanceProxy::destroy):
+ (WebKit::NetscapePluginInstanceProxy::focusChanged):
+ (WebKit::NetscapePluginInstanceProxy::windowFocusChanged):
+ (WebKit::NetscapePluginInstanceProxy::windowFrameChanged):
+ (WebKit::NetscapePluginInstanceProxy::startTimers):
+ (WebKit::NetscapePluginInstanceProxy::mouseEvent):
+ (WebKit::NetscapePluginInstanceProxy::stopTimers):
+
+2008-12-01 Anders Carlsson <andersca@apple.com>
+
+ Try to fix the Tiger build.
+
+ * Plugins/WebNetscapePluginView.mm:
+
+2008-12-01 Anders Carlsson <andersca@apple.com>
+
+ Rename _layer to _pluginLayer where I forgot to do so.
+
+ * Plugins/Hosted/WebHostedNetscapePluginView.mm:
+ (-[WebHostedNetscapePluginView destroyPlugin]):
+ * Plugins/WebNetscapePluginView.h:
+ * Plugins/WebNetscapePluginView.mm:
+ (-[WebNetscapePluginView createPlugin]):
+ (-[WebNetscapePluginView setLayer:]):
+ (-[WebNetscapePluginView destroyPlugin]):
+
+2008-12-01 Anders Carlsson <andersca@apple.com>
+
+ Reviewed by Adam Roben.
+
+ Make sure to re-insert layers as needed so they won't be lost when the layer backed
+ view is removed from the view hierarchy.
+
+ * Plugins/Hosted/WebHostedNetscapePluginView.h:
+ Add _pluginLayer ivar.
+
+ * Plugins/Hosted/WebHostedNetscapePluginView.mm:
+ (-[WebHostedNetscapePluginView createPlugin]):
+ Don't add the layer here.
+
+ (-[WebHostedNetscapePluginView setLayer:]):
+ Instead, add it here.
+
+ (-[WebHostedNetscapePluginView destroyPlugin]):
+ Set _pluginLayer to 0.
+
+ * Plugins/WebNetscapePluginView.mm:
+ (-[WebNetscapePluginView createPlugin]):
+ Don't add the layer here.
+
+ (-[WebNetscapePluginView setLayer:]):
+ Do it here.
+
+2008-11-30 Antti Koivisto <antti@apple.com>
+
+ Reviewed by Mark Rowe.
+
+ https://bugs.webkit.org/show_bug.cgi?id=22557
+
+ Report free size in central and thread caches too.
+
+ * Misc/WebCoreStatistics.mm:
+ (+[WebCoreStatistics memoryStatistics]):
+
+2008-11-29 Antti Koivisto <antti@apple.com>
+
+ Reviewed by Dan Bernstein.
+
+ https://bugs.webkit.org/show_bug.cgi?id=22557
+ Add statistics for JavaScript GC heap.
+
+ * Misc/WebCoreStatistics.mm:
+ (+[WebCoreStatistics javaScriptObjectsCount]):
+ (+[WebCoreStatistics memoryStatistics]):
+
+2008-11-29 Antti Koivisto <antti@apple.com>
+
+ Reviewed by Alexey Proskuryakov.
+
+ https://bugs.webkit.org/show_bug.cgi?id=22557
+
+ - Add purgeable memory statistics to cache statistics.
+ - Add method for getting fastMalloc statistics.
+ - Add method to force returning free memory back to system.
+
+ * Misc/WebCache.mm:
+ (+[WebCache statistics]):
+ * Misc/WebCoreStatistics.h:
+ * Misc/WebCoreStatistics.mm:
+ (+[WebCoreStatistics stopIgnoringWebCoreNodeLeaks]):
+ (+[WebCoreStatistics memoryStatistics]):
+ (+[WebCoreStatistics returnFreeMemoryToSystem]):
+
+2008-11-26 Mark Rowe <mrowe@apple.com>
+
+ Fix the Tiger build.
+
+ mig.h does not always define __MigTypeCheck on Tiger, which leads to problems when the generated
+ code is built with -Wundef.
+
+ * Plugins/Hosted/WebKitPluginHostTypes.h:
+
+2008-11-26 Anders Carlsson <andersca@apple.com>
+
+ Fix build.
+
+ * Configurations/Base.xcconfig:
+
+2008-11-26 Anders Carlsson <andersca@apple.com>
+
+ Reviewed by Mark Rowe.
+
+ Move WebHostedNetscapePluginView.{h|mm} to Plugins/Hosted.
+
+ (-[WebHostedNetscapePluginView handleMouseMoved:]):
+ (-[WebHostedNetscapePluginView setAttributeKeys:andValues:]):
+ Fix a leak.
+
+ (-[WebHostedNetscapePluginView createPlugin]):
+ Instantiate the plug-in, store the plug-in proxy in the _proxy ivar.
+
+ (-[WebHostedNetscapePluginView loadStream]):
+ (-[WebHostedNetscapePluginView shouldStop]):
+ Add stubs for these.
+
+ (-[WebHostedNetscapePluginView updateAndSetWindow]):
+ (-[WebHostedNetscapePluginView windowFocusChanged:]):
+ (-[WebHostedNetscapePluginView destroyPlugin]):
+ (-[WebHostedNetscapePluginView startTimers]):
+ (-[WebHostedNetscapePluginView stopTimers]):
+ (-[WebHostedNetscapePluginView focusChanged]):
+ (-[WebHostedNetscapePluginView windowFrameDidChange:]):
+ (-[WebHostedNetscapePluginView mouseDown:]):
+ (-[WebHostedNetscapePluginView mouseUp:]):
+ (-[WebHostedNetscapePluginView mouseDragged:]):
+ (-[WebHostedNetscapePluginView mouseEntered:]):
+ (-[WebHostedNetscapePluginView mouseExited:]):
+ Call the proxy.
+
+ (-[WebHostedNetscapePluginView addWindowObservers]):
+ (-[WebHostedNetscapePluginView removeWindowObservers]):
+ Add/remove observers for when the window frame changes.
+
+ * Plugins/WebHostedNetscapePluginView.h: Removed.
+ * Plugins/WebHostedNetscapePluginView.mm: Removed.
+
+2008-11-26 Anders Carlsson <andersca@apple.com>
+
+ Reviewed by Mark Rowe.
+
+ Add the plug-in host proxy and plug-in instance proxy objects.
+
+ These are just simple objects that forward their calls to the plug-in host.
+
+ * Plugins/Hosted/NetscapePluginHostProxy.h: Added.
+ (WebKit::NetscapePluginHostProxy::create):
+ (WebKit::NetscapePluginHostProxy::port):
+ * Plugins/Hosted/NetscapePluginHostProxy.mm: Added.
+ (WebKit::NetscapePluginHostProxy::NetscapePluginHostProxy):
+ (WebKit::NetscapePluginHostProxy::instantiatePlugin):
+ * Plugins/Hosted/NetscapePluginInstanceProxy.h: Added.
+ (WebKit::NetscapePluginInstanceProxy::create):
+ (WebKit::NetscapePluginInstanceProxy::renderContextID):
+ (WebKit::NetscapePluginInstanceProxy::useSoftwareRenderer):
+ * Plugins/Hosted/NetscapePluginInstanceProxy.mm: Added.
+ (WebKit::NetscapePluginInstanceProxy::NetscapePluginInstanceProxy):
+ (WebKit::NetscapePluginInstanceProxy::resize):
+ (WebKit::NetscapePluginInstanceProxy::destroy):
+ (WebKit::NetscapePluginInstanceProxy::focusChanged):
+ (WebKit::NetscapePluginInstanceProxy::windowFocusChanged):
+ (WebKit::NetscapePluginInstanceProxy::windowFrameChanged):
+ (WebKit::NetscapePluginInstanceProxy::startTimers):
+ (WebKit::NetscapePluginInstanceProxy::mouseEvent):
+ (WebKit::NetscapePluginInstanceProxy::stopTimers):
+
+2008-11-26 Anders Carlsson <andersca@apple.com>
+
+ Reviewed by Dan Bernstein, Mark Rowe and Kevin Decker.
+
+ Add the plug-in host manager singleton.
+
+ * Plugins/Hosted/NetscapePluginHostManager.h: Added.
+ * Plugins/Hosted/NetscapePluginHostManager.mm: Added.
+
+ (WebKit::NetscapePluginHostManager::hostForPackage):
+ If there's an existing host proxy available, just return it. Otherwise spawn a new plug-in host and
+ create a new plug-in host proxy from the new plug-in host port.
+
+ (WebKit::NetscapePluginHostManager::spawnPluginHost):
+ Pass the plug-in host path and the preferred CPU type to the plug-in agent. When the plug-in host has
+ finished launching, pass it the path to the plug-in bundle.
+
+ (WebKit::NetscapePluginHostManager::initializeVendorPort):
+ Check in with the plug-in agent and get the new plug-in vendor port back.
+
+2008-11-26 Anders Carlsson <andersca@apple.com>
+
+ Reviewed by Mark Rowe.
+
+ * Plugins/Hosted/WebKitPluginHostTypes.h:
+ Add copyright headers and fix the spacing around the *'s.
+
+2008-11-26 Anders Carlsson <andersca@apple.com>
+
+ Reviewed by Dan Bernstein.
+
+ * Plugins/Hosted/WebKitPluginHost.defs:
+ Add copyright headers.
+
+ * Plugins/Hosted/WebKitPluginHostTypes.h: Added.
+ Forgot to add this.
+
+2008-11-26 Anders Carlsson <andersca@apple.com>
+
+ Reviewed by Dan Bernstein.
+
+ Add plug-in host .defs.
+
+ * Plugins/Hosted/WebKitPluginAgent.defs: Added.
+ * Plugins/Hosted/WebKitPluginAgentReply.defs: Added.
+ * Plugins/Hosted/WebKitPluginClient.defs: Added.
+ * Plugins/Hosted/WebKitPluginHost.defs: Added.
+ * Plugins/Hosted/WebKitPluginHostTypes.defs: Added.
+
+2008-11-26 Anders Carlsson <andersca@apple.com>
+
+ Reviewed by Mark Rowe and Kevin Decker.
+
+ Minor plug-in changes.
+
+ * Plugins/WebBaseNetscapePluginView.h:
+ Add add/remove observer method declarations.
+
+ * Plugins/WebBaseNetscapePluginView.mm:
+ (-[WebBaseNetscapePluginView isFlipped]):
+ Move this down from WebNetscapePluginView.
+
+ * Plugins/WebNetscapePluginPackage.h:
+ * Plugins/WebNetscapePluginPackage.m:
+ (-[WebNetscapePluginPackage pluginHostArchitecture]):
+ Getter for the plug-in host architecture.
+
+ * Plugins/WebNetscapePluginView.mm:
+
+2008-11-25 Dan Bernstein <mitz@apple.com>
+
+ Reviewed by Mark Rowe.
+
+ - include the text direction submenu in context menus when appropriate
+
+ * WebView/WebPreferences.mm:
+ (+[WebPreferences initialize]): Changed the default
+ textDirectionSubmenuInclusionBehavior to "automatically", which includes
+ the menu when the selection is confined to a single paragraph the either
+ has right-to-left base writing direction or contains right-to-left or
+ embedded text. Left the default for Tiger and Leopard to be "never".
+
+2008-11-24 Darin Fisher <darin@chromium.org>
+
+ Fix bustage.
+
+ * History/WebHistory.mm:
+
+2008-11-24 Glenn Wilson <gwilson@chromium.org>
+
+ Reviewed by Alexey Proskuryakov.
+
+ http://bugs.webkit.org/show_bug.cgi?id=15643
+
+ Added API support for the "trailing whitespace" work-around. This includes an APIs
+ to get and set the state of this configuration variable.
+
+ * WebCoreSupport/WebEditorClient.h:
+ * WebCoreSupport/WebEditorClient.mm:
+ (WebEditorClient::selectTrailingWhitespaceEnabled):
+ * WebView/WebView.mm:
+ (-[WebView setSelectTrailingWhitespaceEnabled:]):
+ (-[WebView isSelectTrailingWhitespaceEnabled]):
+ (-[WebView setSmartInsertDeleteEnabled:]):
+ * WebView/WebViewPrivate.h:
+
+2008-11-24 Darin Adler <darin@apple.com>
+
+ Reviewed by Dan Bernstein.
+
+ - https://bugs.webkit.org/show_bug.cgi?id=22470
+ remove unneeded URL argument from FrameLoaderClient::updateGlobalHistory
+
+ * WebCoreSupport/WebFrameLoaderClient.h: Remove argument.
+ * WebCoreSupport/WebFrameLoaderClient.mm:
+ (WebFrameLoaderClient::updateGlobalHistory): Get the URL from the
+ DocumentLoader, just as we do the title and the failure flag.
+
+2008-11-24 Darin Adler <darin@apple.com>
+
+ Reviewed by Dan Bernstein.
+
+ - finish https://bugs.webkit.org/show_bug.cgi?id=22295
+ track which history items are from page load failures
+
+ Last time around I did this only for the back/forward list and missed the
+ global history list.
+
+ * History/WebHistory.mm:
+ (-[WebHistory _visitedURL:withTitle:wasFailure:]): Added wasFailure argument.
+ Set the flag on the newly created history item. Also eliminated the use of
+ autorelease on the added-items array.
+ * History/WebHistoryInternal.h: Ditto.
+
+ * WebCoreSupport/WebFrameLoaderClient.mm:
+ (WebFrameLoaderClient::updateGlobalHistory): Added code to check for failure
+ and pass the argument in to WebHistory. Given that this function gets other
+ data from the DocumentLoader, I think we should get rid of the KURL argument,
+ but that's a separate issue so I don't do it in this patch.
+
+2008-11-24 Simon Fraser <simon.fraser@apple.com>
+
+ Fix call to Frame::selectionBounds in Tiger build.
+
+ * WebView/WebHTMLView.mm:
+ (-[WebHTMLView _lookUpInDictionaryFromMenu:]):
+
+2008-11-24 Simon Fraser <simon.fraser@apple.com>
+
+ Reviewed by Dan Bernstein
+
+ Via: https://bugs.webkit.org/show_bug.cgi?id=22433
+
+ Rename RenderView::selectionRect() to selectionBounds(), to remove
+ longstanding ambiguity with the base class selectionRect() method.
+ Do the same on Frame for consistency with RenderView.
+
+ * WebView/WebHTMLView.mm:
+ (-[WebHTMLView _lookUpInDictionaryFromMenu:]):
+ (-[WebHTMLView selectionRect]):
+ (-[WebHTMLView selectionImageRect]):
+
+2008-11-20 Pierre-Olivier Latour <pol@apple.com>
+
+ Reviewed by Dan Bernstein.
+
+ WebKit should be using Device RGB colorspace everywhere for
+ consistency.
+
+ https://bugs.webkit.org/show_bug.cgi?id=22300
+
+ * WebView/WebHTMLView.mm:
+ (-[WebHTMLView _dragImageForURL:withLabel:]):
+ (-[WebHTMLView _colorAsString:]):
+
+2008-11-20 Darin Adler <darin@apple.com>
+
+ Earlier version reviewed by Justin Garcia.
+
+ - part of fix for <rdar://problem/4108572> REGRESSION: Can't extend selection with shift-arrow in read only mode
+ Also resolves <rdar://problem/5000134>.
+
+ * WebView/WebHTMLView.mm: Removed some unused code, and made the Tiger workaround for bug 3789278
+ be Tiger-only.
+ (-[WebHTMLView resignFirstResponder]): Removed code setting unused resigningFirstResponder flag.
+ (-[WebHTMLView _wantsKeyDownForEvent:]): Added. Returns YES.
+ (-[WebHTMLView insertText:]): Don't try to insert text if the selection is not editable. We used
+ to prevent even processing the input, but that's not practical since some commands need to work
+ even in non-editable regions.
+
+2008-11-20 Anders Carlsson <andersca@apple.com>
+
+ Reviewed by Jon Honeycutt.
+
+ Move some frame/page checking code down to the base class.
+
+ * Plugins/WebBaseNetscapePluginView.mm:
+ (-[WebBaseNetscapePluginView start]):
+ * Plugins/WebNetscapePluginView.mm:
+ (-[WebNetscapePluginView _createPlugin]):
+
+2008-11-19 Anders Carlsson <andersca@apple.com>
+
+ Reviewed by Dan Bernstein.
+
+ Test: plugins/netscape-plugin-setwindow-size-2.html
+
+ Fix bug where NPP_SetWindow wasn't getting called for some plug-ins.
+
+ * Plugins/WebNetscapePluginView.mm:
+ (-[WebNetscapePluginView updateAndSetWindow]):
+ Don't bail if the drawing model is not the CA drawing model. Remove some code
+ that was doing the wrong thing.
+
+2008-11-19 Darin Fisher <darin@chromium.org>
+
+ Reviewed by Geoff Garen.
+
+ https://bugs.webkit.org/show_bug.cgi?id=22345
+ Define ScriptValue as a thin container for a JSC::Value*.
+
+ * WebView/WebFrame.mm:
+ (-[WebFrame _stringByEvaluatingJavaScriptFromString:forceUserGesture:]):
+ * WebView/WebView.mm:
+ (-[WebView aeDescByEvaluatingJavaScriptFromString:]):
+
+2008-11-19 Anders Carlsson <andersca@apple.com>
+
+ Reviewed by Sam Weinig.
+
+ <rdar://problem/6383762> WebKit r38340 crash on key press in plugin
+
+ Set the value to 0 before calling NPP_GetValue, in case the plug-in returns NPERR_NO_ERROR but does not
+ update the value.
+
+ * Plugins/WebNetscapePluginView.mm:
+ (-[WebNetscapePluginView createPlugin]):
+
+2008-11-19 Anders Carlsson <andersca@apple.com>
+
+ Reviewed by Sam Weinig.
+
+ Make sure to copy the MIME type.
+
+ * Plugins/WebBaseNetscapePluginView.mm:
+ (-[WebBaseNetscapePluginView initWithFrame:pluginPackage:URL:baseURL:MIMEType:attributeKeys:attributeValues:loadManually:DOMElement:]):
+
+2008-11-19 Geoffrey Garen <ggaren@apple.com>
+
+ Reviewed by Darin Adler.
+
+ First step toward fixing <rdar://problem/6263293> WebScriptDebugDelegate
+ should use intptr_t for sourceId, not int
+
+ Added a conditional typedef (currently disabled) to switch sourceId to
+ intptr_t in non-Tiger, non-Leopard builds.
+
+ * DefaultDelegates/WebDefaultScriptDebugDelegate.m:
+ (-[WebDefaultScriptDebugDelegate webView:didParseSource:fromURL:sourceId:forWebFrame:]):
+ (-[WebDefaultScriptDebugDelegate webView:didParseSource:baseLineNumber:fromURL:sourceId:forWebFrame:]):
+ (-[WebDefaultScriptDebugDelegate webView:didEnterCallFrame:sourceId:line:forWebFrame:]):
+ (-[WebDefaultScriptDebugDelegate webView:willExecuteStatement:sourceId:line:forWebFrame:]):
+ (-[WebDefaultScriptDebugDelegate webView:willLeaveCallFrame:sourceId:line:forWebFrame:]):
+ (-[WebDefaultScriptDebugDelegate webView:exceptionWasRaised:sourceId:line:forWebFrame:]):
+ * WebView/WebScriptDebugDelegate.h:
+ * WebView/WebScriptDebugger.mm:
+ (WebScriptDebugger::sourceParsed):
+ (WebScriptDebugger::callEvent):
+ (WebScriptDebugger::atStatement):
+ (WebScriptDebugger::returnEvent):
+ (WebScriptDebugger::exception):
+
+2008-11-18 Dan Bernstein <mitz@apple.com>
+
+ Reviewed by Mark Rowe.
+
+ - fix https://bugs.webkit.org/show_bug.cgi?id=22331
+ <rdar://problem/6381657> REGRESSION: Contextual menu no longer has an "Inspect Element" item
+
+ * WebView/WebUIDelegatePrivate.h: Reorder new enum values after existing
+ ones.
+
+2008-11-17 Beth Dakin <bdakin@apple.com>
+
+ Reviewed by Adele Peterson.
+
+ Fix for <rdar://problem/6373102> REGRESSION (r36919): In a new mail
+ message, the caret appears in message body by default
+
+ This fixes a regression caused by http://trac.webkit.org/changeset/36919.
+ That change was too sweeping; we do not want to
+ unconditionally set the page to be active, but we can be looser
+ than the original constraints. This patch set the window active if
+ the first responder is or is a descendant of the main frame's frame
+ view.
+
+ * WebView/WebView.mm:
+ (-[WebView _updateFocusedAndActiveStateForFrame:]):
+
+2008-11-18 Alexey Proskuryakov <ap@webkit.org>
+
+ Reviewed by Darin Adler.
+
+ https://bugs.webkit.org/show_bug.cgi?id=22337
+ Enable workers by default
+
+ * Configurations/WebKit.xcconfig: Define ENABLE_WORKERS (change from ENABLE_WORKER_THREADS,
+ which was accidentally committed before).
+
+2008-11-17 Geoffrey Garen <ggaren@apple.com>
+
+ Not reviewed.
+
+ Try to fix Mac build.
+
+ * WebView/WebScriptDebugDelegate.mm:
+
+2008-11-17 Pierre-Olivier Latour <pol@apple.com>
+
+ Reviewed by Sam Weinig.
+
+ Added SPI to allow pausing a running CSS transition or animation
+ at a given time for testing purposes.
+
+ https://bugs.webkit.org/show_bug.cgi?id=21261
+
+ * WebView/WebFrame.mm:
+ (-[WebFrame _pauseAnimation:onNode:atTime:]):
+ (-[WebFrame _pauseTransitionOfProperty:onNode:atTime:]):
+ * WebView/WebFramePrivate.h:
+
+2008-11-17 Geoffrey Garen <ggaren@apple.com>
+
+ Reviewed by Sam Weinig.
+
+ Updated for JavaScriptCore renames.
+
+ * ForwardingHeaders/runtime/Completion.h: Copied from ForwardingHeaders/runtime/Interpreter.h.
+ * ForwardingHeaders/runtime/Interpreter.h: Removed.
+ * WebView/WebScriptDebugDelegate.mm:
+
+2008-11-16 Greg Bolsinga <bolsinga@apple.com>
+
+ Reviewed by Darin Adler.
+
+ https://bugs.webkit.org/show_bug.cgi?id=21810
+ Remove use of static C++ objects that are destroyed at exit time (destructors)
+
+ Use DEFINE_STATIC_LOCAL for static RetainPtr<T>
+
+ * Misc/WebNSPasteboardExtras.mm: Use DEFINE_STATIC_LOCAL
+ (+[NSPasteboard _web_writableTypesForURL]):
+ (_createWritableTypesForImageWithoutArchive): Created so accessor has one line initialization
+ (_writableTypesForImageWithoutArchive): Use create function for one line initialization
+ (_createWritableTypesForImageWithArchive): Created so accessor has one line initialization
+ (_writableTypesForImageWithArchive): Use create function for one line initialization
+ * WebCoreSupport/WebPasteboardHelper.mm: Use DEFINE_STATIC_LOCAL
+ (WebPasteboardHelper::insertablePasteboardTypes):
+ * WebView/WebHTMLRepresentation.mm: Use DEFINE_STATIC_LOCAL
+ (+[WebHTMLRepresentation supportedMIMETypes]):
+ (+[WebHTMLRepresentation supportedNonImageMIMETypes]):
+ (+[WebHTMLRepresentation supportedImageMIMETypes]):
+
+2008-11-16 Darin Adler <darin@apple.com>
+
+ Reviewed by Dan Bernstein.
+
+ - https://bugs.webkit.org/show_bug.cgi?id=22295
+ track which history items are from page load failures
+
+ * History/WebHistoryItem.mm: Added lastVisitWasFailureKey.
+ (-[WebHistoryItem initFromDictionaryRepresentation:]): Set the lastVisitWasFailure
+ flag in the history item if the dictionary had lastVisitWasFailureKey true.
+ (-[WebHistoryItem dictionaryRepresentation]): Set the lastVisitWasFailureKey boolean
+ in the dictionary if the history item had the lastVisitWasFailure flag.
+ (-[WebHistoryItem lastVisitWasFailure]): Added.
+
+ * History/WebHistoryItemInternal.h: Moved include of WebBackForwardList here from
+ WebHistoryItemPrivate.h; removed other unneeded includes.
+
+ * History/WebHistoryItemPrivate.h: Added lastVisitWasFailure method.
+ Removed unneeded includes.
+
+ * Misc/WebNSDictionaryExtras.h: Added _webkit_boolForKey.
+ * Misc/WebNSDictionaryExtras.m:
+ (-[NSDictionary _webkit_boolForKey:]): Added.
+
+2008-11-14 Greg Bolsinga <bolsinga@apple.com>
+
+ Reviewed by Darin Adler.
+
+ https://bugs.webkit.org/show_bug.cgi?id=21810
+ Remove use of static C++ objects that are destroyed at exit time (destructors)
+
+ Create DEFINE_STATIC_LOCAL macro. Change static local objects to leak to avoid
+ exit-time destructor. Update code that was changed to fix this issue that ran
+ into a gcc bug (<rdar://problem/6354696> Codegen issue with C++ static reference
+ in gcc build 5465). Also typdefs for template types needed to be added in some
+ cases so the type could make it through the macro successfully.
+
+ Basically code of the form:
+ static T m;
+ becomes:
+ DEFINE_STATIC_LOCAL(T, m, ());
+
+ Also any code of the form:
+ static T& m = *new T;
+ also becomes:
+ DEFINE_STATIC_LOCAL(T, m, ());
+
+ * ForwardingHeaders/wtf/StdLibExtras.h: Added.
+ * History/WebBackForwardList.mm:
+ (backForwardLists):
+ * History/WebHistoryItem.mm:
+ (historyItemWrappers):
+ * Misc/WebStringTruncator.m:
+ (fontFromNSFont):
+ * Plugins/WebBaseNetscapePluginStream.mm:
+ (streams):
+ * WebView/WebView.mm:
+ (aeDescFromJSValue):
+
+2008-11-14 Dan Bernstein <mitz@apple.com>
+
+ Reviewed by Darin Adler.
+
+ - <rdar://problem/6234333> Implement action methods for setting and clearing character-level directionality
+ - part of <rdar://problem/6234337> Add a Text Direction menu to the default context menu when appropriate
+
+ * WebCoreSupport/WebViewFactory.mm:
+ (-[WebViewFactory contextMenuItemTagTextDirectionMenu]): Added.
+ * WebView/WebFrame.mm:
+ (core): Added a convertor from WebTextDirectionSubmenuInclusionBehavior
+ to WebCore::TextDirectionSubmenuInclusionBehavior.
+ * WebView/WebFrameInternal.h:
+ * WebView/WebHTMLView.mm:
+ Added makeTextWritingDirectionLeftToRight:,
+ makeTextWritingDirectionNatural: and
+ makeTextWritingDirectionRightToLeft: using the WEBCORE_COMMAND macro.
+ * WebView/WebPreferenceKeysPrivate.h:
+ Added WebKitTextDirectionSubmenuInclusionBehaviorPreferenceKey.
+ * WebView/WebPreferences.mm:
+ (+[WebPreferences initialize]): Set the default Text Direction
+ submenu inclusion behavior to never include.
+ (-[WebPreferences textDirectionSubmenuInclusionBehavior]): Added this
+ accessor.
+ (-[WebPreferences setTextDirectionSubmenuInclusionBehavior:]): Ditto.
+ * WebView/WebPreferencesPrivate.h: Defined the
+ WebTextDirectionSubmenuInclusionBehavior enum and declared
+ accessors.
+ * WebView/WebUIDelegatePrivate.h:
+ * WebView/WebView.mm:
+ (-[WebView _preferencesChangedNotification:]): Added code to transfer
+ the Text Direction submenu inclusion behavior preference to WebCore
+ settings.
+
+2008-11-14 Darin Adler <darin@apple.com>
+
+ Reviewed by Mark Rowe.
+
+ - fix https://bugs.webkit.org/show_bug.cgi?id=22222
+ selectKeyViewPrecedingView: with document view that can't be first responder
+ makes WebFrameView be first responder
+
+ * WebView/WebFrameView.mm: (-[WebFrameView becomeFirstResponder]):
+ Moved the acceptsFirstResponder special case inside the if statement so it won't
+ run in the "selecting previous" case. Also removed the "just before shipping Tiger"
+ code that doesn't need to be here any more.
+
+2008-11-13 Mark Rowe <mrowe@apple.com>
+
+ Fix the build.
+
+ Don't use NSPICTPboardType on systems where it is deprecated. The system will take care of converting
+ from this format to a format that we can understand.
+
+ * WebCoreSupport/WebPasteboardHelper.mm:
+ (WebPasteboardHelper::insertablePasteboardTypes):
+ * WebView/WebHTMLView.mm:
+ (-[WebHTMLView _documentFragmentFromPasteboard:inContext:allowPlainText:]):
+ (+[WebHTMLView _insertablePasteboardTypes]):
+ (-[WebHTMLView _documentFragmentFromPasteboard:forType:inContext:subresources:]):
+
+2008-11-13 John Sullivan <sullivan@apple.com>
+
+ fixed <rdar://problem/6361578> Web Kit UI strings: a few edits
+
+ Reviewed by Tim Hatcher
+
+ * Misc/WebKitErrors.m:
+ "Cannot show content with specified mime type" -> "Content with specified MIME type can't be shown"
+ "Cannot show URL" -> "The URL can't be shown"
+ "Cannot find plug-in" -> "The plug-in can't be found"
+ "Cannot load plug-in" -> "The plug-in can't be loaded"
+
+ * Panels/English.lproj/WebAuthenticationPanel.nib/classes.nib:
+ * Panels/English.lproj/WebAuthenticationPanel.nib/info.nib:
+ * Panels/English.lproj/WebAuthenticationPanel.nib/keyedobjects.nib: Added.
+ * Panels/English.lproj/WebAuthenticationPanel.nib/objects.nib: Removed.
+ Changed placeholder fine print in the nib to match one of the two strings it might be replaced by.
+ This automagically updated the nib to a newer format, hence the objects -> keyedobjects change.
+ I could have changed the placeholder fine print to be empty but this lets localizers understand
+ the dialog layout better.
+
+ * Panels/WebAuthenticationPanel.m:
+ (-[WebAuthenticationPanel setUpForChallenge:]):
+ "you need to log in" -> "you must log in"
+ "Your log-in information" -> "Your login information"
+ "The name or password entered" -> "The user name or password you entered"
+ "Please try again." -> "Make sure you're entering them correctly, and then try again."
+
+2008-11-12 Stephanie Lewis <slewis@apple.com>
+
+ Fix Mac build.
+
+ * Panels/WebAuthenticationPanel.m:
+
+2008-11-12 John Sullivan <sullivan@apple.com>
+
+ fixed <rdar://problem/3839110> Authentication dialogs talk about passwords being sent "in the clear"
+
+ Reviewed by Tim Hatcher
+
+ * Panels/WebAuthenticationPanel.m:
+ (-[WebAuthenticationPanel setUpForChallenge:]):
+ use "unencrypted" instead of "in the clear". Also, use the "Your log-in information
+ will be sent securely" version when the receiving server is https, regardless of
+ whether it uses basic or digest authentication.
+
+2008-11-12 Darin Adler <darin@apple.com>
+
+ Reviewed by Mark Rowe.
+
+ - fix https://bugs.webkit.org/show_bug.cgi?id=22223
+ <rdar://problem/6366864> REGRESSION(r38245): "View Source" crashes the browser
+
+ * WebView/WebFrameView.mm: (-[WebFrameView viewDidMoveToWindow]):
+ Add missing null check.
+
+2008-11-12 Anders Carlsson <andersca@apple.com>
+
+ Reviewed by Kevin Decker.
+
+ Fix stupid bug.
+
+ * Plugins/WebNetscapePluginView.mm:
+ (-[WebNetscapePluginView createPlugin]):
+
+2008-11-10 Tor Arne Vestbø <tavestbo@trolltech.com>
+
+ Reviewed by Simon Hausmann.
+
+ Move _web_encodingForResource from WebKit into WebCore and change return type
+
+ This change is needed to implement NSAPI in WebCore for Mac, see:
+
+ https://bugs.webkit.org/show_bug.cgi?id=21427
+
+
+ * Misc/WebKitNSStringExtras.m:
+ (+[NSString _web_encodingForResource:]):
+
+2008-11-10 Tor Arne Vestbø <tavestbo@trolltech.com>
+
+ Reviewed by Simon Hausmann.
+
+ Moved the implementation of _webkit_isCaseInsensitiveEqualToString to
+ WebCore's WebCoreNSStringExtras as _stringIsCaseInsensitiveEqualToString.
+
+ This change is needed to implement NSAPI in WebCore for Mac, see:
+
+ https://bugs.webkit.org/show_bug.cgi?id=21427
+
+ * Misc/WebKitNSStringExtras.m:
+ (-[NSString _webkit_isCaseInsensitiveEqualToString:]):
+
+2008-11-11 Dan Bernstein <mitz@apple.com>
+
+ Reviewed by Adam Roben.
+
+ WebKit/mac part of adding a master volume control for media elements in a WebView
+
+ * WebView/WebView.mm:
+ (-[WebView setMediaVolume:]): Added.
+ (-[WebView mediaVolume]): Added.
+ * WebView/WebViewPrivate.h:
+
+2008-11-11 Aaron Golden <agolden@apple.com>
+
+ Bug 22134: -[WebHistoryItem dictionaryRepresentation] accesses past the end of a vector
+
+ <https://bugs.webkit.org/show_bug.cgi?id=22134>
+
+ Reviewed by Geoff Garen.
+
+ * History/WebHistoryItem.mm:
+ (-[WebHistoryItem initFromDictionaryRepresentation:]):
+ (-[WebHistoryItem dictionaryRepresentation]):
+
+2008-11-10 Anders Carlsson <andersca@apple.com>
+
+ Reviewed by Kevin Decker.
+
+ Move renewGState to the base class.
+
+ * Plugins/WebBaseNetscapePluginView.mm:
+ (-[WebBaseNetscapePluginView renewGState]):
+ * Plugins/WebNetscapePluginView.mm:
+
+2008-11-10 Anders Carlsson <andersca@apple.com>
+
+ Reviewed by Kevin Decker.
+
+ Move start, stop and all the related methods down to WebBaseNetscapePluginView.
+
+ * Plugins/WebBaseNetscapePluginView.h:
+ * Plugins/WebBaseNetscapePluginView.mm:
+ (-[WebBaseNetscapePluginView updateAndSetWindow]):
+ (-[WebBaseNetscapePluginView addWindowObservers]):
+ (-[WebBaseNetscapePluginView removeWindowObservers]):
+ (-[WebBaseNetscapePluginView start]):
+ (-[WebBaseNetscapePluginView stop]):
+ (-[WebBaseNetscapePluginView viewWillMoveToWindow:]):
+ (-[WebBaseNetscapePluginView viewWillMoveToSuperview:]):
+ (-[WebBaseNetscapePluginView viewDidMoveToWindow]):
+ (-[WebBaseNetscapePluginView viewWillMoveToHostWindow:]):
+ (-[WebBaseNetscapePluginView viewDidMoveToHostWindow]):
+ (-[WebBaseNetscapePluginView windowWillClose:]):
+ (-[WebBaseNetscapePluginView windowBecameKey:]):
+ (-[WebBaseNetscapePluginView windowResignedKey:]):
+ (-[WebBaseNetscapePluginView windowDidMiniaturize:]):
+ (-[WebBaseNetscapePluginView windowDidDeminiaturize:]):
+ (-[WebBaseNetscapePluginView loginWindowDidSwitchFromUser:]):
+ (-[WebBaseNetscapePluginView loginWindowDidSwitchToUser:]):
+ (-[WebBaseNetscapePluginView preferencesHaveChanged:]):
+ * Plugins/WebNetscapePluginView.h:
+ * Plugins/WebNetscapePluginView.mm:
+
+2008-11-10 Anders Carlsson <andersca@apple.com>
+
+ Reviewed by Kevin Decker.
+
+ Move rightMouseDown, rightMouseUp and sendActivateEvent to the base plugin view.
+ Add stubs for createPlugin, loadStream, shouldStop and destroyPlugin.
+
+ * Plugins/WebBaseNetscapePluginView.h:
+ * Plugins/WebBaseNetscapePluginView.mm:
+ (-[WebBaseNetscapePluginView windowFocusChanged:]):
+ (-[WebBaseNetscapePluginView createPlugin]):
+ (-[WebBaseNetscapePluginView loadStream]):
+ (-[WebBaseNetscapePluginView destroyPlugin]):
+ (-[WebBaseNetscapePluginView sendActivateEvent:]):
+ (-[WebBaseNetscapePluginView rightMouseDown:]):
+ (-[WebBaseNetscapePluginView rightMouseUp:]):
+ * Plugins/WebNetscapePluginView.mm:
+ (-[WebNetscapePluginView windowFocusChanged:]):
+
+2008-11-10 Anders Carlsson <andersca@apple.com>
+
+ Reviewed by Kevin Decker.
+
+ Factor plug-in type specific code out to three new methods, createPlugin, destroyPlugin and loadStream.
+
+ * Plugins/WebNetscapePluginView.mm:
+ (-[WebNetscapePluginView createPlugin]):
+ (-[WebNetscapePluginView loadStream]):
+ (-[WebNetscapePluginView start]):
+ (-[WebNetscapePluginView shouldStop]):
+ (-[WebNetscapePluginView destroyPlugin]):
+ (-[WebNetscapePluginView stop]):
+
+2008-11-10 Anders Carlsson <andersca@apple.com>
+
+ Fix Tiger build.
+
+ * Plugins/WebNetscapePluginPackage.m:
+ (-[WebNetscapePluginPackage load]):
+
+2008-11-10 Anders Carlsson <andersca@apple.com>
+
+ Reviewed by Sam Weinig.
+
+ Move even more code down to WebBaseNetscapePluginView, get rid of some unnecessary methods.
+
+ * Plugins/WebBaseNetscapePluginView.h:
+ * Plugins/WebBaseNetscapePluginView.mm:
+ (-[WebBaseNetscapePluginView focusChanged]):
+ (-[WebBaseNetscapePluginView visibleRect]):
+ (-[WebBaseNetscapePluginView acceptsFirstResponder]):
+ (-[WebBaseNetscapePluginView setHasFocus:]):
+ (-[WebBaseNetscapePluginView becomeFirstResponder]):
+ (-[WebBaseNetscapePluginView resignFirstResponder]):
+ * Plugins/WebNetscapePluginView.h:
+ * Plugins/WebNetscapePluginView.mm:
+ (-[WebNetscapePluginView focusChanged]):
+ (-[WebNetscapePluginView tellQuickTimeToChill]):
+ (-[WebNetscapePluginView updateAndSetWindow]):
+ (-[WebNetscapePluginView start]):
+ (-[WebNetscapePluginView stop]):
+ (-[WebNetscapePluginView viewWillMoveToWindow:]):
+ (-[WebNetscapePluginView createPluginScriptableObject]):
+ (-[WebNetscapePluginView pluginView:receivedData:]):
+ (-[WebNetscapePluginView pluginView:receivedError:]):
+ (-[WebNetscapePluginView pluginViewFinishedLoading:]):
+ (-[WebNetscapePluginView inputContext]):
+ (-[WebNetscapePluginView hasMarkedText]):
+ (-[WebNetscapePluginView insertText:]):
+ (-[WebNetscapePluginView markedRange]):
+ (-[WebNetscapePluginView selectedRange]):
+ (-[WebNetscapePluginView setMarkedText:selectedRange:]):
+ (-[WebNetscapePluginView unmarkText]):
+ (-[WebNetscapePluginView validAttributesForMarkedText]):
+ (-[WebNetscapePluginView attributedSubstringFromRange:]):
+ (-[WebNetscapePluginView characterIndexForPoint:]):
+ (-[WebNetscapePluginView doCommandBySelector:]):
+ (-[WebNetscapePluginView firstRectForCharacterRange:]):
+ (-[WebNetscapePluginView _viewHasMoved]):
+ (-[WebNetscapePluginView _redeliverStream]):
+
+2008-11-10 Anders Carlsson <andersca@apple.com>
+
+ Reviewed by Kevin Decker.
+
+ Move timer handling code down to WebBaseNetscapePluginView.
+
+ * Plugins/WebBaseNetscapePluginView.h:
+ * Plugins/WebBaseNetscapePluginView.mm:
+ (-[WebBaseNetscapePluginView stopTimers]):
+ (-[WebBaseNetscapePluginView startTimers]):
+ (-[WebBaseNetscapePluginView restartTimers]):
+ * Plugins/WebNetscapePluginView.h:
+ * Plugins/WebNetscapePluginView.mm:
+ (-[WebNetscapePluginView stopTimers]):
+ (-[WebNetscapePluginView startTimers]):
+ (-[WebNetscapePluginView scheduleTimerWithInterval:repeat:timerFunc:]):
+ * WebView/WebHTMLView.mm:
+ (-[WebHTMLView _resumeNullEventsForAllNetscapePlugins]):
+
+2008-11-10 Anders Carlsson <andersca@apple.com>
+
+ Reviewed by Kevin Decker.
+
+ Move a bunch of methods and ivars up to WebBaseNetscapePluginView.
+
+ * Plugins/WebBaseNetscapePluginView.h:
+ * Plugins/WebBaseNetscapePluginView.mm:
+ (-[WebBaseNetscapePluginView dealloc]):
+ (-[WebBaseNetscapePluginView finalize]):
+ (-[WebBaseNetscapePluginView removeTrackingRect]):
+ (-[WebBaseNetscapePluginView resetTrackingRect]):
+ (-[WebBaseNetscapePluginView dataSource]):
+ (-[WebBaseNetscapePluginView webFrame]):
+ (-[WebBaseNetscapePluginView webView]):
+ (-[WebBaseNetscapePluginView currentWindow]):
+ * Plugins/WebNetscapePluginEventHandlerCarbon.mm:
+ (WebNetscapePluginEventHandlerCarbon::windowFocusChanged):
+ * Plugins/WebNetscapePluginView.h:
+ * Plugins/WebNetscapePluginView.mm:
+ (-[WebNetscapePluginView sendEvent:isDrawRect:]):
+ (-[WebNetscapePluginView sendActivateEvent:]):
+ (-[WebNetscapePluginView restartTimers]):
+ (-[WebNetscapePluginView setHasFocus:]):
+ (-[WebNetscapePluginView mouseDown:]):
+ (-[WebNetscapePluginView mouseUp:]):
+ (-[WebNetscapePluginView mouseEntered:]):
+ (-[WebNetscapePluginView mouseExited:]):
+ (-[WebNetscapePluginView handleMouseMoved:]):
+ (-[WebNetscapePluginView mouseDragged:]):
+ (-[WebNetscapePluginView scrollWheel:]):
+ (-[WebNetscapePluginView keyUp:]):
+ (-[WebNetscapePluginView keyDown:]):
+ (-[WebNetscapePluginView flagsChanged:]):
+ (-[WebNetscapePluginView updateAndSetWindow]):
+ (-[WebNetscapePluginView setWindowIfNecessary]):
+ (-[WebNetscapePluginView start]):
+ (-[WebNetscapePluginView stop]):
+ (-[WebNetscapePluginView isStarted]):
+ (-[WebNetscapePluginView dealloc]):
+ (-[WebNetscapePluginView finalize]):
+ (-[WebNetscapePluginView drawRect:]):
+ (-[WebNetscapePluginView windowBecameKey:]):
+ (-[WebNetscapePluginView preferencesHaveChanged:]):
+ (-[WebNetscapePluginView evaluateJavaScriptPluginRequest:]):
+ (-[WebNetscapePluginView webFrame:didFinishLoadWithReason:]):
+ (-[WebNetscapePluginView scheduleTimerWithInterval:repeat:timerFunc:]):
+ (-[WebNetscapePluginView _viewHasMoved]):
+
+2008-11-10 Anders Carlsson <andersca@apple.com>
+
+ Reviewed by Kevin Decker and Mark Rowe.
+
+ Add a WebHostedNetscapePluginView class.
+
+ * Plugins/WebHostedNetscapePluginView.h: Added.
+ * Plugins/WebHostedNetscapePluginView.mm: Added.
+
+ * Plugins/WebNetscapePluginPackage.h:
+ Use the right define.
+
+ * Plugins/WebPluginDatabase.mm:
+ (-[WebPluginDatabase removePluginInstanceViewsFor:]):
+ Check for WebBaseNetscapePluginView.
+
+ (-[WebPluginDatabase destroyAllPluginInstanceViews]):
+ Check for WebBaseNetscapePluginView.
+
+ * WebCoreSupport/WebFrameLoaderClient.mm:
+ (NetscapePluginWidget::NetscapePluginWidget):
+ (NetscapePluginWidget::handleEvent):
+ Use WebBaseNetscapePluginView.
+
+ (netscapePluginViewClass):
+ New function that returns the right netscape plugin view type to use.
+
+ (WebFrameLoaderClient::createPlugin):
+ Get the right class.
+
+ * WebKitPrefix.h:
+ Prefix the #define with WTF_.
+
+ * WebView/WebHTMLView.mm:
+ (-[NSArray _web_makePluginViewsPerformSelector:withObject:]):
+ Check for WebBaseNetscapePluginView.
+
+ * WebView/WebView.mm:
+ Remove an unnecessary include.
+
+2008-11-10 Anders Carlsson <andersca@apple.com>
+
+ Reviewed by Sam Weinig.
+
+ Don't use individual ivars for each plug-in vtable function. Instead, get them from the plugin package.
+
+ * Plugins/WebBaseNetscapePluginView.mm:
+ (-[WebBaseNetscapePluginView initWithFrame:pluginPackage:URL:baseURL:MIMEType:attributeKeys:attributeValues:loadManually:DOMElement:]):
+ * Plugins/WebNetscapePluginPackage.h:
+ * Plugins/WebNetscapePluginPackage.m:
+ (-[WebNetscapePluginPackage load]):
+ (-[WebNetscapePluginPackage _unloadWithShutdown:]):
+ * Plugins/WebNetscapePluginView.h:
+ * Plugins/WebNetscapePluginView.mm:
+ (-[WebNetscapePluginView sendEvent:isDrawRect:]):
+ (-[WebNetscapePluginView setWindowIfNecessary]):
+ (-[WebNetscapePluginView start]):
+ (-[WebNetscapePluginView initWithFrame:pluginPackage:URL:baseURL:MIMEType:attributeKeys:attributeValues:loadManually:DOMElement:]):
+ (-[WebNetscapePluginView createPluginScriptableObject]):
+ (-[WebNetscapePluginView evaluateJavaScriptPluginRequest:]):
+ (-[WebNetscapePluginView webFrame:didFinishLoadWithReason:]):
+ (-[WebNetscapePluginView loadPluginRequest:]):
+ (-[WebNetscapePluginView _createPlugin]):
+ (-[WebNetscapePluginView _destroyPlugin]):
+ (-[WebNetscapePluginView _printedPluginBitmap]):
+
+2008-11-10 Anders Carlsson <andersca@apple.com>
+
+ Reviewed by Kevin Decker.
+
+ Add a new WebBaseNetscapePluginView class.
+
+ * Plugins/WebBaseNetscapePluginView.h: Added.
+ * Plugins/WebBaseNetscapePluginView.mm: Added.
+ (-[WebBaseNetscapePluginView initWithFrame:pluginPackage:URL:baseURL:MIMEType:attributeKeys:attributeValues:loadManually:DOMElement:]):
+ (-[WebBaseNetscapePluginView setAttributeKeys:andValues:]):
+ (-[WebBaseNetscapePluginView handleMouseMoved:]):
+ * Plugins/WebNetscapePluginView.h:
+ * Plugins/WebNetscapePluginView.mm:
+ (-[WebNetscapePluginView cut:]):
+ (-[WebNetscapePluginView copy:]):
+ (-[WebNetscapePluginView paste:]):
+ (-[WebNetscapePluginView selectAll:]):
+ (-[WebNetscapePluginView start]):
+ (-[WebNetscapePluginView initWithFrame:pluginPackage:URL:baseURL:MIMEType:attributeKeys:attributeValues:loadManually:DOMElement:]):
+
+2008-11-10 Anders Carlsson <andersca@apple.com>
+
+ Reviewed by Adam Roben.
+
+ Rename WebBaseNetscapePluginView to WebNetscapePluginView.
+
+ * Plugins/WebBaseNetscapePluginStream.h:
+ * Plugins/WebBaseNetscapePluginStream.mm:
+ (WebNetscapePluginStream::WebNetscapePluginStream):
+ (WebNetscapePluginStream::setPlugin):
+ * Plugins/WebBaseNetscapePluginView.h: Removed.
+ * Plugins/WebBaseNetscapePluginView.mm: Removed.
+ * Plugins/WebNetscapePluginEventHandler.h:
+ (WebNetscapePluginEventHandler::WebNetscapePluginEventHandler):
+ * Plugins/WebNetscapePluginEventHandler.mm:
+ (WebNetscapePluginEventHandler::create):
+ * Plugins/WebNetscapePluginEventHandlerCarbon.h:
+ * Plugins/WebNetscapePluginEventHandlerCarbon.mm:
+ (WebNetscapePluginEventHandlerCarbon::WebNetscapePluginEventHandlerCarbon):
+ * Plugins/WebNetscapePluginEventHandlerCocoa.h:
+ * Plugins/WebNetscapePluginEventHandlerCocoa.mm:
+ (WebNetscapePluginEventHandlerCocoa::WebNetscapePluginEventHandlerCocoa):
+ * Plugins/WebNetscapePluginView.h: Copied from mac/Plugins/WebBaseNetscapePluginView.h.
+ * Plugins/WebNetscapePluginView.mm: Copied from mac/Plugins/WebBaseNetscapePluginView.mm.
+ (+[WebNetscapePluginView setCurrentPluginView:]):
+ (+[WebNetscapePluginView currentPluginView]):
+ (-[WebNetscapePluginView loadPluginRequest:]):
+ * Plugins/WebPluginDatabase.mm:
+ (-[WebPluginDatabase removePluginInstanceViewsFor:]):
+ (-[WebPluginDatabase destroyAllPluginInstanceViews]):
+ * Plugins/npapi.mm:
+ (pluginViewForInstance):
+ (NPN_MarkedTextAbandoned):
+ (NPN_MarkedTextSelectionChanged):
+ * WebCoreSupport/WebFrameLoaderClient.mm:
+ (NetscapePluginWidget::NetscapePluginWidget):
+ (NetscapePluginWidget::handleEvent):
+ (WebFrameLoaderClient::createPlugin):
+ * WebView/WebHTMLView.mm:
+ (-[WebHTMLView _pauseNullEventsForAllNetscapePlugins]):
+ (-[WebHTMLView _resumeNullEventsForAllNetscapePlugins]):
+ (-[NSArray _web_makePluginViewsPerformSelector:withObject:]):
+ * WebView/WebView.mm:
+
+2008-11-09 Darin Adler <darin@apple.com>
+
+ Reviewed by John Sullivan.
+
+ - fix https://bugs.webkit.org/show_bug.cgi?id=15063
+ <rdar://problem/5452227> REGRESSION (r25151): Switching to a tab waiting
+ for first data does not clear the window
+
+ * WebCoreSupport/WebFrameLoaderClient.mm:
+ (WebFrameLoaderClient::frameLoadCompleted): Added comments, and got rid of
+ a local variable to make this code match the code in the function below
+ more closely.
+ (WebFrameLoaderClient::provisionalLoadStarted): Added comments.
+
+ * WebView/WebFrame.mm:
+ (-[WebFrame _updateBackgroundAndUpdatesWhileOffscreen]): Improved comment.
+
+ * WebView/WebFrameView.mm:
+ (-[WebFrameView _scrollView]): Tweaked formatting.
+ (-[WebFrameView initWithFrame:]): Ditto.
+ (-[WebFrameView setFrameSize:]): Added a comment and tweaked formatting.
+ (-[WebFrameView viewDidMoveToWindow]): Added. This is the change that fixes
+ the bug. Calls setDrawsBackground:YES as appropriate since moving the view
+ out of the window to switch to another view disrupts the special technique
+ for showing the old page during the start of loading. This is the identical
+ reason for the setFrameSize: method above, and the code is almost the same.
+
+2008-11-08 David Kilzer <ddkilzer@apple.com>
+
+ Bug 22137: PLATFORM(MAC) build broken with HAVE(ACCESSIBILITY) disabled
+
+ <https://bugs.webkit.org/show_bug.cgi?id=22137>
+
+ Reviewed by Darin Adler.
+
+ * WebView/WebFrame.mm:
+ (-[WebFrame _accessibilityTree]): Return nil if HAVE(ACCESSIBILITY)
+ is false.
+
+2008-11-08 Dan Bernstein <mitz@apple.com>
+
+ Reviewed by Darin Adler.
+
+ - WebKit/mac part of adding WebPreferences for controlling databases and local storage
+
+ * WebView/WebPreferenceKeysPrivate.h: Added
+ WebKitDatabasesEnabledPreferenceKey and
+ WebKitLocalStorageEnabledPreferenceKey.
+ * WebView/WebPreferences.mm:
+ (+[WebPreferences initialize]): Made databases and local storage enabled
+ by default.
+ (-[WebPreferences databasesEnabled]): Added.
+ (-[WebPreferences setDatabasesEnabled:]): Added.
+ (-[WebPreferences localStorageEnabled]): Added.
+ (-[WebPreferences setLocalStorageEnabled:]): Added.
+ * WebView/WebPreferencesPrivate.h:
+ * WebView/WebView.mm:
+ (-[WebView _preferencesChangedNotification:]): Transfer the databases
+ and local storage preferences to WebCore settings.
+
+2008-11-06 Anders Carlsson <andersca@apple.com>
+
+ Reviewed by Kevin Decker.
+
+ https://bugs.webkit.org/show_bug.cgi?id=22115
+ NPN_HasPropertyUPP and NPN_HasMethodUPP entries in NPNetscapeFuncs are NULL
+
+ Initialize the browser funcs correctly.
+
+ * Plugins/WebNetscapePluginPackage.m:
+ (-[WebNetscapePluginPackage load]):
+
+2008-11-06 David Kilzer <ddkilzer@apple.com>
+
+ BUILD FIX: Backed out r38189 (and r38203) for Xcode 3.0.
+
+ Apparently older versions of gcc have issues with this patch.
+ Backing out a second time until the issues are resolved.
+
+2008-11-06 Cameron Zwarich <zwarich@apple.com>
+
+ Reviewed by Geoff Garen.
+
+ Move the remaining files in the kjs subdirectory of JavaScriptCore to
+ a new parser subdirectory, and remove the kjs subdirectory entirely.
+
+ The header SavedBuiltins.h was removed in r32587, so it no longer needs
+ a forwarding header.
+
+ * ForwardingHeaders/kjs: Removed.
+ * ForwardingHeaders/kjs/SavedBuiltins.h: Removed.
+
+2008-11-06 David Kilzer <ddkilzer@apple.com>
+
+ BUILD WAS NOT BROKEN: Rolling r38189 back in.
+
+ Please perform a clean build if you see crashes.
+
+2008-11-06 David Kilzer <ddkilzer@apple.com>
+
+ BUILD FIX: Backed out r38189 since it apparently broke the world.
+
+2008-11-06 John Sullivan <sullivan@apple.com>
+
+ Fixed problem with switching between text-only zoom and full-content zoom
+
+ There were two booleans tracking whether zoom was text-only, one in WebCore settings
+ and one in WebViewPrivate. Fixed by eliminating the one in WebViewPrivate.
+
+ Reviewed by Adam Roben
+
+ * WebView/WebView.mm:
+ remove declaration of zoomMultiplierIsTextOnly instance variable in WebViewPrivate
+ (-[WebViewPrivate init]):
+ removed initialization of zoomMultiplierIsTextOnly
+ (-[WebView textSizeMultiplier]):
+ call [self _realZoomMultiplierIsTextOnly] instead of accessing WebViewPrivate instance variable
+ (-[WebView _setZoomMultiplier:isTextOnly:]):
+ update WebCore settings rather than WebViewPrivate instance variable
+ (-[WebView _zoomMultiplier:]):
+ call [self _realZoomMultiplierIsTextOnly] instead of accessing WebViewPrivate instance variable
+ (-[WebView _realZoomMultiplierIsTextOnly]):
+ return value from WebCore settings instead of accessing WebViewPrivate instance variable
+ (-[WebView pageSizeMultiplier]):
+ call [self _realZoomMultiplierIsTextOnly] instead of accessing WebViewPrivate instance variable
+
+2008-11-06 Greg Bolsinga <bolsinga@apple.com>
+
+ Reviewed by Darin Adler.
+
+ Bug 21810: Remove use of static C++ objects that are destroyed at exit time (destructors)
+ https://bugs.webkit.org/show_bug.cgi?id=21810
+
+ * History/WebBackForwardList.mm:
+ (backForwardLists): Changed to leak an object to avoid an exit-time destructor.
+ * History/WebHistoryItem.mm:
+ (historyItemWrappers): Ditto
+ * Misc/WebStringTruncator.m:
+ (fontFromNSFont): Ditto
+ * Plugins/WebBaseNetscapePluginStream.mm:
+ (streams): Ditto
+ * WebView/WebView.mm:
+ (aeDescFromJSValue): Ditto
+
+2008-11-05 Anders Carlsson <andersca@apple.com>
+
+ Reviewed by Mark Rowe.
+
+ Keep track of which plug-in host architecture would be needed for a given plug-in package.
+
+ * Plugins/WebNetscapePluginPackage.h:
+ * Plugins/WebNetscapePluginPackage.m:
+ (-[WebNetscapePluginPackage _initWithPath:]):
+ * WebKitPrefix.h:
+
+2008-11-05 Cameron Zwarich <zwarich@apple.com>
+
+ Rubber-stamped by Sam Weinig.
+
+ Correct forwarding headers for files moved to the runtime subdirectory
+ of JavaScriptCore and remove unused forwarding headers.
+
+ * ForwardingHeaders/kjs/collector.h: Removed.
+ * ForwardingHeaders/kjs/identifier.h: Removed.
+ * ForwardingHeaders/kjs/interpreter.h: Removed.
+ * ForwardingHeaders/kjs/lookup.h: Removed.
+ * ForwardingHeaders/kjs/operations.h: Removed.
+ * ForwardingHeaders/kjs/protect.h: Removed.
+ * ForwardingHeaders/runtime/Interpreter.h: Copied from ForwardingHeaders/kjs/interpreter.h.
+ * WebView/WebScriptDebugDelegate.mm:
+
+2008-11-05 Anders Carlsson <andersca@apple.com>
+
+ Reviewed by Kevin Decker.
+
+ Remove WebPlugInStreamLoaderDelegate.h
+
+ * Plugins/WebBaseNetscapePluginStream.h:
+ * Plugins/WebPlugInStreamLoaderDelegate.h: Removed.
+
+2008-11-05 Dan Bernstein <mitz@apple.com>
+
+ - Tiger build fix
+
+ * Plugins/WebBaseNetscapePluginView.mm:
+ (-[WebBaseNetscapePluginView stop]):
+
+2008-11-04 Anders Carlsson <andersca@apple.com>
+
+ Reviewed by Kevin Decker.
+
+ Don't leak the CALayer.
+
+ * Plugins/WebBaseNetscapePluginView.h:
+ Make the layer a RetainPtr.
+
+ * Plugins/WebBaseNetscapePluginView.mm:
+ (-[WebBaseNetscapePluginView start]):
+
+ (-[WebBaseNetscapePluginView stop]):
+ Make sure to clear out the layer here.
+
+2008-11-04 Cameron Zwarich <zwarich@apple.com>
+
+ Rubber-stamped by Sam Weinig.
+
+ Remove the unused kjs/dtoa.h forwarding header.
+
+ * ForwardingHeaders/kjs/dtoa.h: Removed.
+
+2008-11-04 Anders Carlsson <andersca@apple.com>
+
+ Reviewed by Kevin Decker.
+
+ More cleanup. Make a bunch of instance variables RetainPtrs.
+
+ * Plugins/WebBaseNetscapePluginView.h:
+ * Plugins/WebBaseNetscapePluginView.mm:
+ (-[WebBaseNetscapePluginView visibleRect]):
+ (-[WebBaseNetscapePluginView saveAndSetNewPortStateForUpdate:]):
+ (-[WebBaseNetscapePluginView sendActivateEvent:]):
+ (-[WebBaseNetscapePluginView sendDrawRectEvent:]):
+ (-[WebBaseNetscapePluginView stopTimers]):
+ (-[WebBaseNetscapePluginView restartTimers]):
+ (-[WebBaseNetscapePluginView setHasFocus:]):
+ (-[WebBaseNetscapePluginView mouseDown:]):
+ (-[WebBaseNetscapePluginView mouseUp:]):
+ (-[WebBaseNetscapePluginView mouseEntered:]):
+ (-[WebBaseNetscapePluginView mouseExited:]):
+ (-[WebBaseNetscapePluginView handleMouseMoved:]):
+ (-[WebBaseNetscapePluginView mouseDragged:]):
+ (-[WebBaseNetscapePluginView scrollWheel:]):
+ (-[WebBaseNetscapePluginView keyUp:]):
+ (-[WebBaseNetscapePluginView keyDown:]):
+ (-[WebBaseNetscapePluginView flagsChanged:]):
+ (-[WebBaseNetscapePluginView cut:]):
+ (-[WebBaseNetscapePluginView copy:]):
+ (-[WebBaseNetscapePluginView paste:]):
+ (-[WebBaseNetscapePluginView selectAll:]):
+ (-[WebBaseNetscapePluginView didStart]):
+ (-[WebBaseNetscapePluginView start]):
+ (-[WebBaseNetscapePluginView stop]):
+ (-[WebBaseNetscapePluginView dataSource]):
+ (-[WebBaseNetscapePluginView pluginPackage]):
+ (-[WebBaseNetscapePluginView setPluginPackage:]):
+ (-[WebBaseNetscapePluginView setAttributeKeys:andValues:]):
+ (-[WebBaseNetscapePluginView initWithFrame:pluginPackage:URL:baseURL:MIMEType:attributeKeys:attributeValues:loadManually:DOMElement:]):
+ (-[WebBaseNetscapePluginView fini]):
+ (-[WebBaseNetscapePluginView dealloc]):
+ (-[WebBaseNetscapePluginView pluginView:receivedError:]):
+ (-[WebBaseNetscapePluginView requestWithURLCString:]):
+ (-[WebBaseNetscapePluginView webFrame:didFinishLoadWithReason:]):
+ (-[WebBaseNetscapePluginView loadPluginRequest:]):
+ (-[WebBaseNetscapePluginView loadRequest:inTarget:withNotifyData:sendNotification:]):
+ (-[WebBaseNetscapePluginView userAgent]):
+ (-[WebBaseNetscapePluginView getVariable:value:]):
+ (-[WebBaseNetscapePluginView setVariable:value:]):
+ (-[WebBaseNetscapePluginView _createPlugin]):
+ (-[WebBaseNetscapePluginView _redeliverStream]):
+
+2008-11-04 Brady Eidson <beidson@apple.com>
+
+ Reviewed by John Sullivan
+
+ Cleanup global history a tad.
+
+ Used to _addItemForURL always create a new item and merge it with a previous item if one existed.
+
+ It is more efficient and less complicated to update the previous item if one exists.
+
+ * History/WebHistory.mm:
+ (-[WebHistoryPrivate visitedURL:withTitle:]):
+ (-[WebHistory _visitedURL:withTitle:]): Instead of calling the general purpose [WebHistoryPrivate addItem:]
+ with a new history item, call the new special purposed visitedURL:withTitle:
+ * History/WebHistoryInternal.h:
+
+ * History/WebHistoryItem.mm:
+ (-[WebHistoryItem _visitedWithTitle:]): Call "visited()" on the WebCore history item with the pertinent info.
+ * History/WebHistoryItemInternal.h:
+
+ * WebCoreSupport/WebFrameLoaderClient.mm:
+ (WebFrameLoaderClient::updateGlobalHistory):
+
+2008-11-04 Anders Carlsson <andersca@apple.com>
+
+ Reviewed by Kevin Decker.
+
+ https://bugs.webkit.org/show_bug.cgi?id=22065
+
+ Only create the plug-in stream loader when the stream is started.
+
+ * Plugins/WebBaseNetscapePluginStream.mm:
+ (WebNetscapePluginStream::WebNetscapePluginStream):
+ (WebNetscapePluginStream::start):
+
+2008-11-04 Anders Carlsson <andersca@apple.com>
+
+ Reviewed by Kevin Decker.
+
+ https://bugs.webkit.org/show_bug.cgi?id=22065
+
+ Remove some old, unused plug-in code.
+
+ * Plugins/WebBaseNetscapePluginView.h:
+ * Plugins/WebBaseNetscapePluginView.mm:
+ (-[WebBaseNetscapePluginView saveAndSetNewPortStateForUpdate:]):
+ (-[WebBaseNetscapePluginView start]):
+ (-[WebBaseNetscapePluginView setVariable:value:]):
+
+2008-11-04 Simon Fraser <simon.fraser@apple.com>
+
+ Reviewed by Dave Hyatt
+
+ https://bugs.webkit.org/show_bug.cgi?id=21941
+
+ Rename absolutePosition() to localToAbsolute(), and add the ability
+ to optionally take transforms into account (which will eventually be the
+ default behavior).
+
+ * WebView/WebRenderNode.mm:
+ (copyRenderNode):
+
2008-11-01 Alexey Proskuryakov <ap@webkit.org>
Reviewed by Darin Adler.
diff --git a/WebKit/mac/Configurations/Base.xcconfig b/WebKit/mac/Configurations/Base.xcconfig
index 52c224b..2c83815 100644
--- a/WebKit/mac/Configurations/Base.xcconfig
+++ b/WebKit/mac/Configurations/Base.xcconfig
@@ -1,4 +1,3 @@
-DEAD_CODE_STRIPPING = YES;
DEBUG_INFORMATION_FORMAT = dwarf;
GCC_C_LANGUAGE_STANDARD = gnu99;
GCC_DEBUGGING_SYMBOLS = default;
@@ -19,13 +18,14 @@ GCC_WARN_ABOUT_MISSING_NEWLINE = YES;
GCC_WARN_ABOUT_MISSING_PROTOTYPES = YES;
GCC_WARN_NON_VIRTUAL_DESTRUCTOR = YES;
LINKER_DISPLAYS_MANGLED_NAMES = YES;
+OTHER_MIGFLAGS = -F$(BUILT_PRODUCTS_DIR);
PREBINDING = NO;
VALID_ARCHS = i386 ppc x86_64 ppc64;
// FIXME: <rdar://problem/5070292> WebKit should build with -Wshorten-64-to-32
-WARNING_CFLAGS = -Wall -W -Wcast-align -Wchar-subscripts -Wformat-security -Wmissing-format-attribute -Wpointer-arith -Wwrite-strings -Wno-format-y2k -Wno-unused-parameter -Wundef;
+WARNING_CFLAGS = -Wall -Wextra -Wcast-align -Wchar-subscripts -Wextra-tokens -Wformat-security -Winit-self -Wmissing-format-attribute -Wmissing-noreturn -Wno-unused-parameter -Wpacked -Wpointer-arith -Wredundant-decls -Wundef -Wwrite-strings;
-// DEBUG_DEFINES, GCC_OPTIMIZATION_LEVEL and STRIP_INSTALLED_PRODUCT vary between the debug and normal variants.
+// DEBUG_DEFINES, GCC_OPTIMIZATION_LEVEL, STRIP_INSTALLED_PRODUCT and DEAD_CODE_STRIPPING vary between the debug and normal variants.
// We set up the values for each variant here, and have the Debug configuration in the Xcode project use the _debug variant.
DEBUG_DEFINES_debug = DISABLE_THREAD_CHECK;
DEBUG_DEFINES_normal = NDEBUG;
@@ -39,6 +39,14 @@ STRIP_INSTALLED_PRODUCT = $(STRIP_INSTALLED_PRODUCT_$(CURRENT_VARIANT));
STRIP_INSTALLED_PRODUCT_normal = YES;
STRIP_INSTALLED_PRODUCT_debug = NO;
+// Dead code stripping needs to be on in the debug variant to avoid link errors. This is due to unconditionally
+// building the MiG bindings for WebKitPluginClient even when the functions that the bindings wrap are not built.
+DEAD_CODE_STRIPPING = YES;
+
+
+GCC_VERSION = $(GCC_VERSION_$(XCODE_VERSION_ACTUAL));
+GCC_VERSION_0310 = 4.2;
+
// <rdar://problem/5488678>: Production builds on 10.4 PowerPC need to have debugging symbols disabled to prevent a huge STABS section being generated.
// Xcode on 10.4 does not define MAC_OS_X_VERSION_MAJOR, so the default Mac OS X version is treated as 10.4.
@@ -53,3 +61,4 @@ GCC_GENERATE_DEBUGGING_SYMBOLS_ppc_Production = $(GCC_GENERATE_DEBUGGING_SYMBOLS
GCC_GENERATE_DEBUGGING_SYMBOLS_ppc_Production_ = NO;
GCC_GENERATE_DEBUGGING_SYMBOLS_ppc_Production_1040 = NO;
GCC_GENERATE_DEBUGGING_SYMBOLS_ppc_Production_1050 = YES;
+GCC_GENERATE_DEBUGGING_SYMBOLS_ppc_Production_1060 = YES;
diff --git a/WebKit/mac/Configurations/DebugRelease.xcconfig b/WebKit/mac/Configurations/DebugRelease.xcconfig
index 55b489f..10699fb 100644
--- a/WebKit/mac/Configurations/DebugRelease.xcconfig
+++ b/WebKit/mac/Configurations/DebugRelease.xcconfig
@@ -9,10 +9,6 @@ MACOSX_DEPLOYMENT_TARGET_1060 = 10.6;
GCC_WARN_ABOUT_DEPRECATED_FUNCTIONS = YES;
-GCC_VERSION = $(GCC_VERSION_$(XCODE_VERSION_ACTUAL));
-GCC_VERSION_0310 = 4.2;
-GCC_VERSION_0311 = 4.2;
-
WEBKIT_SYSTEM_INTERFACE_LIBRARY = $(WEBKIT_SYSTEM_INTERFACE_LIBRARY_$(MAC_OS_X_VERSION_MAJOR));
WEBKIT_SYSTEM_INTERFACE_LIBRARY_ = WebKitSystemInterfaceTiger;
WEBKIT_SYSTEM_INTERFACE_LIBRARY_1040 = WebKitSystemInterfaceTiger;
diff --git a/WebKit/mac/Configurations/Version.xcconfig b/WebKit/mac/Configurations/Version.xcconfig
index 16698b9..bf339bf 100644
--- a/WebKit/mac/Configurations/Version.xcconfig
+++ b/WebKit/mac/Configurations/Version.xcconfig
@@ -1,5 +1,5 @@
MAJOR_VERSION = 528;
-MINOR_VERSION = 5;
+MINOR_VERSION = 16;
TINY_VERSION = 0;
FULL_VERSION = $(MAJOR_VERSION).$(MINOR_VERSION);
diff --git a/WebKit/mac/Configurations/WebKit.xcconfig b/WebKit/mac/Configurations/WebKit.xcconfig
index 8deb186..0937fdb 100644
--- a/WebKit/mac/Configurations/WebKit.xcconfig
+++ b/WebKit/mac/Configurations/WebKit.xcconfig
@@ -18,4 +18,4 @@ WEBCORE_PRIVATE_HEADERS_DIR = $(UMBRELLA_FRAMEWORKS_DIR)/WebCore.framework/Priva
OTHER_LDFLAGS = -sub_umbrella WebCore $(OTHER_LDFLAGS);
// This needs to be kept sorted, and in sync with FEATURE_DEFINES in JavaScriptCore.xcconfig, WebCore.xcconfig and the default settings of build-webkit.
-FEATURE_DEFINES = ENABLE_DATABASE ENABLE_DOM_STORAGE ENABLE_ICONDATABASE ENABLE_OFFLINE_WEB_APPLICATIONS ENABLE_SVG ENABLE_SVG_ANIMATION ENABLE_SVG_AS_IMAGE ENABLE_SVG_FONTS ENABLE_SVG_FOREIGN_OBJECT ENABLE_SVG_USE ENABLE_VIDEO ENABLE_WORKER_THREADS ENABLE_XPATH ENABLE_XSLT;
+FEATURE_DEFINES = ENABLE_DATABASE ENABLE_DOM_STORAGE ENABLE_ICONDATABASE ENABLE_OFFLINE_WEB_APPLICATIONS ENABLE_SVG ENABLE_SVG_ANIMATION ENABLE_SVG_AS_IMAGE ENABLE_SVG_FONTS ENABLE_SVG_FOREIGN_OBJECT ENABLE_SVG_USE ENABLE_VIDEO ENABLE_WORKERS ENABLE_XPATH ENABLE_XSLT;
diff --git a/WebKit/mac/DOM/WebDOMOperations.mm b/WebKit/mac/DOM/WebDOMOperations.mm
index 5ef92f1..8f5fc03 100644
--- a/WebKit/mac/DOM/WebDOMOperations.mm
+++ b/WebKit/mac/DOM/WebDOMOperations.mm
@@ -67,15 +67,16 @@ using namespace WebCore;
- (NSArray *)_subresourceURLs
{
- Vector<KURL> urls;
+ ListHashSet<KURL> urls;
[self _node]->getSubresourceURLs(urls);
if (!urls.size())
return nil;
NSMutableArray *array = [NSMutableArray arrayWithCapacity:urls.size()];
- for (unsigned i = 0; i < urls.size(); ++i)
- [array addObject:(NSURL *)urls[i]];
-
+ ListHashSet<KURL>::iterator end = urls.end();
+ for (ListHashSet<KURL>::iterator it = urls.begin(); it != end; ++it)
+ [array addObject:(NSURL *)*it];
+
return array;
}
diff --git a/WebKit/mac/DefaultDelegates/WebDefaultScriptDebugDelegate.m b/WebKit/mac/DefaultDelegates/WebDefaultScriptDebugDelegate.m
index 2ba9291..85cef90 100644
--- a/WebKit/mac/DefaultDelegates/WebDefaultScriptDebugDelegate.m
+++ b/WebKit/mac/DefaultDelegates/WebDefaultScriptDebugDelegate.m
@@ -28,7 +28,6 @@
#import <WebKit/WebScriptDebugDelegate.h>
#import "WebDefaultScriptDebugDelegate.h"
-
#import "WebTypesInternal.h"
@implementation WebDefaultScriptDebugDelegate
@@ -45,7 +44,7 @@ static WebDefaultScriptDebugDelegate *sharedDelegate = nil;
- (void)webView:(WebView *)webView didParseSource:(NSString *)source
fromURL:(NSString *)url
- sourceId:(int)sid
+ sourceId:(WebSourceId)sid
forWebFrame:(WebFrame *)webFrame
{
}
@@ -53,7 +52,7 @@ static WebDefaultScriptDebugDelegate *sharedDelegate = nil;
- (void)webView:(WebView *)webView didParseSource:(NSString *)source
baseLineNumber:(NSUInteger)lineNumber
fromURL:(NSURL *)url
- sourceId:(int)sid
+ sourceId:(WebSourceId)sid
forWebFrame:(WebFrame *)webFrame
{
}
@@ -67,28 +66,28 @@ static WebDefaultScriptDebugDelegate *sharedDelegate = nil;
}
- (void)webView:(WebView *)webView didEnterCallFrame:(WebScriptCallFrame *)frame
- sourceId:(int)sid
+ sourceId:(WebSourceId)sid
line:(int)lineno
forWebFrame:(WebFrame *)webFrame
{
}
- (void)webView:(WebView *)webView willExecuteStatement:(WebScriptCallFrame *)frame
- sourceId:(int)sid
+ sourceId:(WebSourceId)sid
line:(int)lineno
forWebFrame:(WebFrame *)webFrame
{
}
- (void)webView:(WebView *)webView willLeaveCallFrame:(WebScriptCallFrame *)frame
- sourceId:(int)sid
+ sourceId:(WebSourceId)sid
line:(int)lineno
forWebFrame:(WebFrame *)webFrame
{
}
- (void)webView:(WebView *)webView exceptionWasRaised:(WebScriptCallFrame *)frame
- sourceId:(int)sid
+ sourceId:(WebSourceId)sid
line:(int)lineno
forWebFrame:(WebFrame *)webFrame
{
diff --git a/WebKit/mac/ForwardingHeaders/runtime/Completion.h b/WebKit/mac/ForwardingHeaders/runtime/Completion.h
new file mode 100644
index 0000000..25f9cec
--- /dev/null
+++ b/WebKit/mac/ForwardingHeaders/runtime/Completion.h
@@ -0,0 +1 @@
+#import <JavaScriptCore/Completion.h>
diff --git a/WebKit/mac/ForwardingHeaders/runtime/Protect.h b/WebKit/mac/ForwardingHeaders/runtime/Protect.h
new file mode 100644
index 0000000..f1186aa
--- /dev/null
+++ b/WebKit/mac/ForwardingHeaders/runtime/Protect.h
@@ -0,0 +1 @@
+#import <JavaScriptCore/Protect.h>
diff --git a/WebKit/mac/ForwardingHeaders/wtf/StdLibExtras.h b/WebKit/mac/ForwardingHeaders/wtf/StdLibExtras.h
new file mode 100644
index 0000000..d48b324
--- /dev/null
+++ b/WebKit/mac/ForwardingHeaders/wtf/StdLibExtras.h
@@ -0,0 +1 @@
+#import <JavaScriptCore/StdLibExtras.h>
diff --git a/WebKit/mac/History/WebBackForwardList.h b/WebKit/mac/History/WebBackForwardList.h
index c2750d2..9806a64 100644
--- a/WebKit/mac/History/WebBackForwardList.h
+++ b/WebKit/mac/History/WebBackForwardList.h
@@ -126,7 +126,7 @@
- (int)capacity;
/*!
- @method setCacpacity
+ @method setCapacity
@abstract Sets the list's maximum size.
@param size The new maximum size for the list.
*/
diff --git a/WebKit/mac/History/WebBackForwardList.mm b/WebKit/mac/History/WebBackForwardList.mm
index 30767c3..20988b8 100644
--- a/WebKit/mac/History/WebBackForwardList.mm
+++ b/WebKit/mac/History/WebBackForwardList.mm
@@ -44,14 +44,18 @@
#import <WebCore/Settings.h>
#import <WebCore/ThreadCheck.h>
#import <WebCore/WebCoreObjCExtras.h>
+#import <runtime/InitializeThreading.h>
#import <wtf/Assertions.h>
#import <wtf/RetainPtr.h>
+#import <wtf/StdLibExtras.h>
using namespace WebCore;
-static HashMap<BackForwardList*, WebBackForwardList*>& backForwardLists()
+typedef HashMap<BackForwardList*, WebBackForwardList*> BackForwardListMap;
+
+static BackForwardListMap& backForwardLists()
{
- static HashMap<BackForwardList*, WebBackForwardList*> staticBackForwardLists;
+ DEFINE_STATIC_LOCAL(BackForwardListMap, staticBackForwardLists, ());
return staticBackForwardLists;
}
@@ -92,12 +96,13 @@ WebBackForwardList *kit(BackForwardList* backForwardList)
@implementation WebBackForwardList
-#ifndef BUILDING_ON_TIGER
+ (void)initialize
{
+ JSC::initializeThreading();
+#ifndef BUILDING_ON_TIGER
WebCoreObjCFinalizeOnMainThread(self);
-}
#endif
+}
- (id)init
{
diff --git a/WebKit/mac/History/WebHistory.mm b/WebKit/mac/History/WebHistory.mm
index 1eedd8e..417aadb 100644
--- a/WebKit/mac/History/WebHistory.mm
+++ b/WebKit/mac/History/WebHistory.mm
@@ -32,13 +32,8 @@
#import "WebKitLogging.h"
#import "WebNSURLExtras.h"
#import "WebTypesInternal.h"
-#import <Foundation/NSError.h>
-#import <WebCore/Page.h>
+#import <WebCore/HistoryItem.h>
#import <WebCore/PageGroup.h>
-#import <wtf/Assertions.h>
-#import <wtf/HashMap.h>
-#import <wtf/RetainPtr.h>
-#import <wtf/Vector.h>
using namespace WebCore;
@@ -65,13 +60,16 @@ NSString *DatesArrayKey = @"WebHistoryDates";
NSMutableDictionary *_entriesByURL;
DateToEntriesMap* _entriesByDate;
NSMutableArray *_orderedLastVisitedDays;
+ WebHistoryItem *_lastVisitedEntry;
BOOL itemLimitSet;
int itemLimit;
BOOL ageInDaysLimitSet;
int ageInDaysLimit;
}
-- (void)addItem:(WebHistoryItem *)entry;
+- (WebHistoryItem *)visitedURL:(NSURL *)url withTitle:(NSString *)title;
+
+- (BOOL)addItem:(WebHistoryItem *)entry discardDuplicate:(BOOL)discardDuplicate;
- (void)addItems:(NSArray *)newEntries;
- (BOOL)removeItem:(WebHistoryItem *)entry;
- (BOOL)removeItems:(NSArray *)entries;
@@ -82,6 +80,7 @@ NSString *DatesArrayKey = @"WebHistoryDates";
- (BOOL)containsURL:(NSURL *)URL;
- (WebHistoryItem *)itemForURL:(NSURL *)URL;
- (WebHistoryItem *)itemForURLString:(NSString *)URLString;
+- (NSArray *)allItems;
- (BOOL)loadFromURL:(NSURL *)URL collectDiscardedItemsInto:(NSMutableArray *)discardedItems error:(NSError **)error;
- (BOOL)saveToURL:(NSURL *)URL error:(NSError **)error;
@@ -95,6 +94,9 @@ NSString *DatesArrayKey = @"WebHistoryDates";
- (void)addVisitedLinksToPageGroup:(PageGroup&)group;
+- (WebHistoryItem *)lastVisitedEntry;
+- (void)setLastVisitedEntry:(WebHistoryItem *)lastVisitedEntry;
+
@end
@implementation WebHistoryPrivate
@@ -125,6 +127,7 @@ NSString *DatesArrayKey = @"WebHistoryDates";
{
[_entriesByURL release];
[_orderedLastVisitedDays release];
+ [_lastVisitedEntry release];
delete _entriesByDate;
[super dealloc];
}
@@ -137,7 +140,7 @@ NSString *DatesArrayKey = @"WebHistoryDates";
#pragma mark MODIFYING CONTENTS
-WebHistoryDateKey timeIntervalForBeginningOfDay(NSTimeInterval interval)
+static WebHistoryDateKey timeIntervalForBeginningOfDay(NSTimeInterval interval)
{
CFTimeZoneRef timeZone = CFTimeZoneCopyDefault();
CFGregorianDate date = CFAbsoluteTimeGetGregorianDate(interval, timeZone);
@@ -258,7 +261,36 @@ WebHistoryDateKey timeIntervalForBeginningOfDay(NSTimeInterval interval)
}
}
-- (void)addItem:(WebHistoryItem *)entry
+- (WebHistoryItem *)visitedURL:(NSURL *)url withTitle:(NSString *)title
+{
+ ASSERT(url);
+ ASSERT(title);
+
+ NSString *URLString = [url _web_originalDataAsString];
+ WebHistoryItem *entry = [_entriesByURL objectForKey:URLString];
+
+ if (entry) {
+ LOG(History, "Updating global history entry %@", entry);
+ // Remove the item from date caches before changing its last visited date. Otherwise we might get duplicate entries
+ // as seen in <rdar://problem/6570573>.
+ BOOL itemWasInDateCaches = [self removeItemFromDateCaches:entry];
+ ASSERT_UNUSED(itemWasInDateCaches, itemWasInDateCaches);
+
+ [entry _visitedWithTitle:title];
+ } else {
+ LOG(History, "Adding new global history entry for %@", url);
+ entry = [[WebHistoryItem alloc] initWithURLString:URLString title:title lastVisitedTimeInterval:[NSDate timeIntervalSinceReferenceDate]];
+ [entry _recordInitialVisit];
+ [_entriesByURL setObject:entry forKey:URLString];
+ [entry release];
+ }
+
+ [self addItemToDateCaches:entry];
+
+ return entry;
+}
+
+- (BOOL)addItem:(WebHistoryItem *)entry discardDuplicate:(BOOL)discardDuplicate
{
ASSERT_ARG(entry, entry);
ASSERT_ARG(entry, [entry lastVisitedTimeInterval] != 0);
@@ -267,6 +299,9 @@ WebHistoryDateKey timeIntervalForBeginningOfDay(NSTimeInterval interval)
WebHistoryItem *oldEntry = [_entriesByURL objectForKey:URLString];
if (oldEntry) {
+ if (discardDuplicate)
+ return NO;
+
// The last reference to oldEntry might be this dictionary, so we hold onto a reference
// until we're done with oldEntry.
[oldEntry retain];
@@ -280,6 +315,8 @@ WebHistoryDateKey timeIntervalForBeginningOfDay(NSTimeInterval interval)
[self addItemToDateCaches:entry];
[_entriesByURL setObject:entry forKey:URLString];
+
+ return YES;
}
- (BOOL)removeItem:(WebHistoryItem *)entry
@@ -336,7 +373,7 @@ WebHistoryDateKey timeIntervalForBeginningOfDay(NSTimeInterval interval)
// faster (fewer compares) by inserting them from oldest to newest.
NSEnumerator *enumerator = [newEntries reverseObjectEnumerator];
while (WebHistoryItem *entry = [enumerator nextObject])
- [self addItem:entry];
+ [self addItem:entry discardDuplicate:NO];
}
#pragma mark DATE-BASED RETRIEVAL
@@ -388,6 +425,11 @@ WebHistoryDateKey timeIntervalForBeginningOfDay(NSTimeInterval interval)
return [self itemForURLString:[URL _web_originalDataAsString]];
}
+- (NSArray *)allItems
+{
+ return [_entriesByURL allValues];
+}
+
#pragma mark ARCHIVING/UNARCHIVING
- (void)setHistoryAgeInDaysLimit:(int)limit
@@ -516,8 +558,8 @@ WebHistoryDateKey timeIntervalForBeginningOfDay(NSTimeInterval interval)
if (ageLimitPassed || itemLimitPassed)
[discardedItems addObject:item];
else {
- [self addItem:item];
- ++(*numberOfItemsLoaded);
+ if ([self addItem:item discardDuplicate:YES])
+ ++(*numberOfItemsLoaded);
if (*numberOfItemsLoaded == itemCountLimit)
itemLimitPassed = YES;
@@ -606,6 +648,19 @@ WebHistoryDateKey timeIntervalForBeginningOfDay(NSTimeInterval interval)
}
}
+- (WebHistoryItem *)lastVisitedEntry
+{
+ return _lastVisitedEntry;
+}
+
+- (void)setLastVisitedEntry:(WebHistoryItem *)lastVisitedEntry
+{
+ if (_lastVisitedEntry == lastVisitedEntry)
+ return;
+ [_lastVisitedEntry release];
+ _lastVisitedEntry = [lastVisitedEntry retain];
+}
+
@end
@implementation WebHistory
@@ -661,11 +716,9 @@ WebHistoryDateKey timeIntervalForBeginningOfDay(NSTimeInterval interval)
- (void)removeAllItems
{
- if ([_historyPrivate removeAllItems]) {
- [[NSNotificationCenter defaultCenter]
- postNotificationName:WebHistoryAllItemsRemovedNotification
- object:self];
- }
+ NSArray *entries = [_historyPrivate allItems];
+ if ([_historyPrivate removeAllItems])
+ [self _sendNotification:WebHistoryAllItemsRemovedNotification entries:entries];
}
- (void)addItems:(NSArray *)newEntries
@@ -759,21 +812,46 @@ WebHistoryDateKey timeIntervalForBeginningOfDay(NSTimeInterval interval)
return [_historyPrivate itemForURLString:URLString];
}
+- (NSArray *)allItems
+{
+ return [_historyPrivate allItems];
+}
+
@end
@implementation WebHistory (WebInternal)
-- (void)_addItemForURL:(NSURL *)URL title:(NSString *)title
+- (void)_visitedURL:(NSURL *)url withTitle:(NSString *)title method:(NSString *)method wasFailure:(BOOL)wasFailure serverRedirectURL:(NSString *)serverRedirectURL isClientRedirect:(BOOL)isClientRedirect
{
- WebHistoryItem *entry = [[WebHistoryItem alloc] initWithURL:URL title:title];
- [entry _setLastVisitedTimeInterval:[NSDate timeIntervalSinceReferenceDate]];
+ if (isClientRedirect) {
+ ASSERT(!serverRedirectURL);
+ if (WebHistoryItem *lastVisitedEntry = [_historyPrivate lastVisitedEntry])
+ core(lastVisitedEntry)->addRedirectURL([url _web_originalDataAsString]);
+ }
- LOG(History, "adding %@", entry);
- [_historyPrivate addItem:entry];
- [self _sendNotification:WebHistoryItemsAddedNotification
- entries:[NSArray arrayWithObject:entry]];
-
- [entry release];
+ WebHistoryItem *entry = [_historyPrivate visitedURL:url withTitle:title];
+ [_historyPrivate setLastVisitedEntry:entry];
+
+ HistoryItem* item = core(entry);
+ item->setLastVisitWasFailure(wasFailure);
+
+ if ([method length])
+ item->setLastVisitWasHTTPNonGet([method caseInsensitiveCompare:@"GET"]);
+
+ if (serverRedirectURL) {
+ ASSERT(!isClientRedirect);
+ item->addRedirectURL(serverRedirectURL);
+ }
+
+ NSArray *entries = [[NSArray alloc] initWithObjects:entry, nil];
+ [self _sendNotification:WebHistoryItemsAddedNotification entries:entries];
+ [entries release];
+}
+
+- (void)_visitedURLForRedirectWithoutHistoryItem:(NSURL *)url
+{
+ if (WebHistoryItem *lastVisitedEntry = [_historyPrivate lastVisitedEntry])
+ core(lastVisitedEntry)->addRedirectURL([url _web_originalDataAsString]);
}
- (void)_addVisitedLinksToPageGroup:(WebCore::PageGroup&)group
diff --git a/WebKit/mac/History/WebHistoryInternal.h b/WebKit/mac/History/WebHistoryInternal.h
index fa8fc7c..9e69734 100644
--- a/WebKit/mac/History/WebHistoryInternal.h
+++ b/WebKit/mac/History/WebHistoryInternal.h
@@ -33,6 +33,7 @@ namespace WebCore {
}
@interface WebHistory (WebInternal)
-- (void)_addItemForURL:(NSURL *)URL title:(NSString *)title;
+- (void)_visitedURL:(NSURL *)URL withTitle:(NSString *)title method:(NSString *)method wasFailure:(BOOL)wasFailure serverRedirectURL:(NSString *)serverRedirectURL isClientRedirect:(BOOL)isClientRedirect;
+- (void)_visitedURLForRedirectWithoutHistoryItem:(NSURL *)url;
- (void)_addVisitedLinksToPageGroup:(WebCore::PageGroup&)group;
@end
diff --git a/WebKit/mac/History/WebHistoryItem.mm b/WebKit/mac/History/WebHistoryItem.mm
index 4d4f924..1d2de1d 100644
--- a/WebKit/mac/History/WebHistoryItem.mm
+++ b/WebKit/mac/History/WebHistoryItem.mm
@@ -35,6 +35,7 @@
#import "WebIconDatabase.h"
#import "WebKitLogging.h"
#import "WebKitNSStringExtras.h"
+#import "WebNSArrayExtras.h"
#import "WebNSDictionaryExtras.h"
#import "WebNSObjectExtras.h"
#import "WebNSURLExtras.h"
@@ -42,7 +43,6 @@
#import "WebNSViewExtras.h"
#import "WebPluginController.h"
#import "WebTypesInternal.h"
-#import <WebCore/CachedPage.h>
#import <WebCore/HistoryItem.h>
#import <WebCore/Image.h>
#import <WebCore/KURL.h>
@@ -50,27 +50,37 @@
#import <WebCore/PlatformString.h>
#import <WebCore/ThreadCheck.h>
#import <WebCore/WebCoreObjCExtras.h>
+#import <runtime/InitializeThreading.h>
#import <wtf/Assertions.h>
+#import <wtf/StdLibExtras.h>
// Private keys used in the WebHistoryItem's dictionary representation.
// see 3245793 for explanation of "lastVisitedDate"
-static NSString *WebLastVisitedTimeIntervalKey = @"lastVisitedDate";
-static NSString *WebVisitCountKey = @"visitCount";
-static NSString *WebTitleKey = @"title";
-static NSString *WebChildrenKey = @"children";
-static NSString *WebDisplayTitleKey = @"displayTitle";
+static NSString *lastVisitedTimeIntervalKey = @"lastVisitedDate";
+static NSString *visitCountKey = @"visitCount";
+static NSString *titleKey = @"title";
+static NSString *childrenKey = @"children";
+static NSString *displayTitleKey = @"displayTitle";
+static NSString *lastVisitWasFailureKey = @"lastVisitWasFailure";
+static NSString *lastVisitWasHTTPNonGetKey = @"lastVisitWasHTTPNonGet";
+static NSString *redirectURLsKey = @"redirectURLs";
+static NSString *dailyVisitCountKey = @"D"; // short key to save space
+static NSString *weeklyVisitCountKey = @"W"; // short key to save space
// Notification strings.
NSString *WebHistoryItemChangedNotification = @"WebHistoryItemChangedNotification";
using namespace WebCore;
+using namespace std;
+
+typedef HashMap<HistoryItem*, WebHistoryItem*> HistoryItemMap;
static inline WebHistoryItemPrivate* kitPrivate(WebCoreHistoryItem* list) { return (WebHistoryItemPrivate*)list; }
static inline WebCoreHistoryItem* core(WebHistoryItemPrivate* list) { return (WebCoreHistoryItem*)list; }
-HashMap<HistoryItem*, WebHistoryItem*>& historyItemWrappers()
+static HistoryItemMap& historyItemWrappers()
{
- static HashMap<HistoryItem*, WebHistoryItem*> historyItemWrappers;
+ DEFINE_STATIC_LOCAL(HistoryItemMap, historyItemWrappers, ());
return historyItemWrappers;
}
@@ -82,12 +92,13 @@ void WKNotifyHistoryItemChanged()
@implementation WebHistoryItem
-#ifndef BUILDING_ON_TIGER
+ (void)initialize
{
+ JSC::initializeThreading();
+#ifndef BUILDING_ON_TIGER
WebCoreObjCFinalizeOnMainThread(self);
-}
#endif
+}
- (id)init
{
@@ -329,14 +340,14 @@ static WebWindowWatcher *_windowWatcher = nil;
{
ASSERT_MAIN_THREAD();
NSString *URLString = [dict _webkit_stringForKey:@""];
- NSString *title = [dict _webkit_stringForKey:WebTitleKey];
+ NSString *title = [dict _webkit_stringForKey:titleKey];
// Do an existence check to avoid calling doubleValue on a nil string. Leave
// time interval at 0 if there's no value in dict.
- NSString *timeIntervalString = [dict _webkit_stringForKey:WebLastVisitedTimeIntervalKey];
+ NSString *timeIntervalString = [dict _webkit_stringForKey:lastVisitedTimeIntervalKey];
NSTimeInterval lastVisited = timeIntervalString == nil ? 0 : [timeIntervalString doubleValue];
- self = [self initWithURLString:URLString title:title displayTitle:[dict _webkit_stringForKey:WebDisplayTitleKey] lastVisitedTimeInterval:lastVisited];
+ self = [self initWithURLString:URLString title:title displayTitle:[dict _webkit_stringForKey:displayTitleKey] lastVisitedTimeInterval:lastVisited];
// Check if we've read a broken URL from the file that has non-Latin1 chars. If so, try to convert
// as if it was from user typing.
@@ -348,12 +359,50 @@ static WebWindowWatcher *_windowWatcher = nil;
core(_private)->setOriginalURLString(newURLString);
}
- core(_private)->setVisitCount([dict _webkit_intForKey:WebVisitCountKey]);
+ int visitCount = [dict _webkit_intForKey:visitCountKey];
+
+ // Can't trust data on disk, and we've had at least one report of this (<rdar://6572300>).
+ if (visitCount < 0) {
+ LOG_ERROR("visit count for history item \"%@\" is negative (%d), will be reset to 1", URLString, visitCount);
+ visitCount = 1;
+ }
+ core(_private)->setVisitCount(visitCount);
+
+ if ([dict _webkit_boolForKey:lastVisitWasFailureKey])
+ core(_private)->setLastVisitWasFailure(true);
+
+ BOOL lastVisitWasHTTPNonGet = [dict _webkit_boolForKey:lastVisitWasHTTPNonGetKey];
+ NSString *tempURLString = [URLString lowercaseString];
+ if (lastVisitWasHTTPNonGet && ([tempURLString hasPrefix:@"http:"] || [tempURLString hasPrefix:@"https:"]))
+ core(_private)->setLastVisitWasHTTPNonGet(lastVisitWasHTTPNonGet);
+
+ if (NSArray *redirectURLs = [dict _webkit_arrayForKey:redirectURLsKey]) {
+ NSUInteger size = [redirectURLs count];
+ std::auto_ptr<Vector<String> > redirectURLsVector(new Vector<String>(size));
+ for (NSUInteger i = 0; i < size; ++i)
+ (*redirectURLsVector)[i] = String([redirectURLs _webkit_stringAtIndex:i]);
+ core(_private)->setRedirectURLs(redirectURLsVector);
+ }
- NSArray *childDicts = [dict objectForKey:WebChildrenKey];
+ NSArray *dailyCounts = [dict _webkit_arrayForKey:dailyVisitCountKey];
+ NSArray *weeklyCounts = [dict _webkit_arrayForKey:weeklyVisitCountKey];
+ if (dailyCounts || weeklyCounts) {
+ Vector<int> coreDailyCounts([dailyCounts count]);
+ Vector<int> coreWeeklyCounts([weeklyCounts count]);
+
+ // Daily and weekly counts < 0 are errors in the data read from disk, so reset to 0.
+ for (size_t i = 0; i < coreDailyCounts.size(); ++i)
+ coreDailyCounts[i] = max([[dailyCounts _webkit_numberAtIndex:i] intValue], 0);
+ for (size_t i = 0; i < coreWeeklyCounts.size(); ++i)
+ coreWeeklyCounts[i] = max([[weeklyCounts _webkit_numberAtIndex:i] intValue], 0);
+
+ core(_private)->adoptVisitCounts(coreDailyCounts, coreWeeklyCounts);
+ }
+
+ NSArray *childDicts = [dict objectForKey:childrenKey];
if (childDicts) {
- for (int i = [childDicts count]; i >= 0; i--) {
- WebHistoryItem *child = [[WebHistoryItem alloc] initFromDictionaryRepresentation: [childDicts objectAtIndex:i]];
+ for (int i = [childDicts count] - 1; i >= 0; i--) {
+ WebHistoryItem *child = [[WebHistoryItem alloc] initFromDictionaryRepresentation:[childDicts objectAtIndex:i]];
core(_private)->addChildItem(core(child->_private));
[child release];
}
@@ -368,6 +417,21 @@ static WebWindowWatcher *_windowWatcher = nil;
return core(_private)->scrollPoint();
}
+- (void)_visitedWithTitle:(NSString *)title
+{
+ core(_private)->visited(title, [NSDate timeIntervalSinceReferenceDate]);
+}
+
+- (void)_setVisitCount:(int)count
+{
+ core(_private)->setVisitCount(count);
+}
+
+- (void)_recordInitialVisit
+{
+ core(_private)->recordInitialVisit();
+}
+
@end
@implementation WebHistoryItem (WebPrivate)
@@ -380,34 +444,64 @@ static WebWindowWatcher *_windowWatcher = nil;
- (NSDictionary *)dictionaryRepresentation
{
ASSERT_MAIN_THREAD();
- NSMutableDictionary *dict = [NSMutableDictionary dictionaryWithCapacity:6];
+ NSMutableDictionary *dict = [NSMutableDictionary dictionaryWithCapacity:8];
HistoryItem* coreItem = core(_private);
- if (!coreItem->urlString().isEmpty()) {
+ if (!coreItem->urlString().isEmpty())
[dict setObject:(NSString*)coreItem->urlString() forKey:@""];
- }
- if (!coreItem->title().isEmpty()) {
- [dict setObject:(NSString*)coreItem->title() forKey:WebTitleKey];
- }
- if (!coreItem->alternateTitle().isEmpty()) {
- [dict setObject:(NSString*)coreItem->alternateTitle() forKey:WebDisplayTitleKey];
- }
+ if (!coreItem->title().isEmpty())
+ [dict setObject:(NSString*)coreItem->title() forKey:titleKey];
+ if (!coreItem->alternateTitle().isEmpty())
+ [dict setObject:(NSString*)coreItem->alternateTitle() forKey:displayTitleKey];
if (coreItem->lastVisitedTime() != 0.0) {
- // store as a string to maintain backward compatibility (see 3245793)
+ // Store as a string to maintain backward compatibility. (See 3245793)
[dict setObject:[NSString stringWithFormat:@"%.1lf", coreItem->lastVisitedTime()]
- forKey:WebLastVisitedTimeIntervalKey];
+ forKey:lastVisitedTimeIntervalKey];
+ }
+ if (coreItem->visitCount())
+ [dict setObject:[NSNumber numberWithInt:coreItem->visitCount()] forKey:visitCountKey];
+ if (coreItem->lastVisitWasFailure())
+ [dict setObject:[NSNumber numberWithBool:YES] forKey:lastVisitWasFailureKey];
+ if (coreItem->lastVisitWasHTTPNonGet()) {
+ ASSERT(coreItem->urlString().startsWith("http:", false) || coreItem->urlString().startsWith("https:", false));
+ [dict setObject:[NSNumber numberWithBool:YES] forKey:lastVisitWasHTTPNonGetKey];
}
- if (coreItem->visitCount()) {
- [dict setObject:[NSNumber numberWithInt:coreItem->visitCount()] forKey:WebVisitCountKey];
+ if (Vector<String>* redirectURLs = coreItem->redirectURLs()) {
+ size_t size = redirectURLs->size();
+ ASSERT(size);
+ NSMutableArray *result = [[NSMutableArray alloc] initWithCapacity:size];
+ for (size_t i = 0; i < size; ++i)
+ [result addObject:(NSString*)redirectURLs->at(i)];
+ [dict setObject:result forKey:redirectURLsKey];
+ [result release];
}
+
+ const Vector<int>& dailyVisitCounts = coreItem->dailyVisitCounts();
+ if (dailyVisitCounts.size()) {
+ NSMutableArray *array = [[NSMutableArray alloc] initWithCapacity:13];
+ for (size_t i = 0; i < dailyVisitCounts.size(); ++i)
+ [array addObject:[NSNumber numberWithInt:dailyVisitCounts[i]]];
+ [dict setObject:array forKey:dailyVisitCountKey];
+ [array release];
+ }
+
+ const Vector<int>& weeklyVisitCounts = coreItem->weeklyVisitCounts();
+ if (weeklyVisitCounts.size()) {
+ NSMutableArray *array = [[NSMutableArray alloc] initWithCapacity:5];
+ for (size_t i = 0; i < weeklyVisitCounts.size(); ++i)
+ [array addObject:[NSNumber numberWithInt:weeklyVisitCounts[i]]];
+ [dict setObject:array forKey:weeklyVisitCountKey];
+ [array release];
+ }
+
if (coreItem->children().size()) {
const HistoryItemVector& children = coreItem->children();
NSMutableArray *childDicts = [NSMutableArray arrayWithCapacity:children.size()];
- for (int i = children.size(); i >= 0; i--)
+ for (int i = children.size() - 1; i >= 0; i--)
[childDicts addObject:[kit(children[i].get()) dictionaryRepresentation]];
- [dict setObject: childDicts forKey:WebChildrenKey];
+ [dict setObject: childDicts forKey:childrenKey];
}
return dict;
@@ -432,12 +526,12 @@ static WebWindowWatcher *_windowWatcher = nil;
- (NSString *)RSSFeedReferrer
{
- return nsStringNilIfEmpty(core(_private)->rssFeedReferrer());
+ return nsStringNilIfEmpty(core(_private)->referrer());
}
- (void)setRSSFeedReferrer:(NSString *)referrer
{
- core(_private)->setRSSFeedReferrer(referrer);
+ core(_private)->setReferrer(referrer);
}
- (NSArray *)children
@@ -509,6 +603,49 @@ static WebWindowWatcher *_windowWatcher = nil;
core(_private)->setTransientProperty(key, property);
}
+- (BOOL)lastVisitWasFailure
+{
+ return core(_private)->lastVisitWasFailure();
+}
+
+- (void)_setLastVisitWasFailure:(BOOL)failure
+{
+ core(_private)->setLastVisitWasFailure(failure);
+}
+
+- (BOOL)_lastVisitWasHTTPNonGet
+{
+ return core(_private)->lastVisitWasHTTPNonGet();
+}
+
+- (NSArray *)_redirectURLs
+{
+ Vector<String>* redirectURLs = core(_private)->redirectURLs();
+ if (!redirectURLs)
+ return nil;
+
+ size_t size = redirectURLs->size();
+ ASSERT(size);
+ NSMutableArray *result = [[NSMutableArray alloc] initWithCapacity:size];
+ for (size_t i = 0; i < size; ++i)
+ [result addObject:(NSString*)redirectURLs->at(i)];
+ return [result autorelease];
+}
+
+- (size_t)_getDailyVisitCounts:(const int**)counts
+{
+ HistoryItem* coreItem = core(_private);
+ *counts = coreItem->dailyVisitCounts().data();
+ return coreItem->dailyVisitCounts().size();
+}
+
+- (size_t)_getWeeklyVisitCounts:(const int**)counts
+{
+ HistoryItem* coreItem = core(_private);
+ *counts = coreItem->weeklyVisitCounts().data();
+ return coreItem->weeklyVisitCounts().size();
+}
+
@end
diff --git a/WebKit/mac/History/WebHistoryItemInternal.h b/WebKit/mac/History/WebHistoryItemInternal.h
index 2592ff8..74a8074 100644
--- a/WebKit/mac/History/WebHistoryItemInternal.h
+++ b/WebKit/mac/History/WebHistoryItemInternal.h
@@ -26,9 +26,9 @@
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
+#import "WebBackForwardList.h"
#import "WebHistoryItemPrivate.h"
-
-#import <wtf/PassRefPtr.h>
+#import <wtf/Forward.h>
namespace WebCore {
class HistoryItem;
@@ -51,6 +51,9 @@ extern void WKNotifyHistoryItemChanged();
- (void)_mergeAutoCompleteHints:(WebHistoryItem *)otherItem;
- (void)setTitle:(NSString *)title;
+- (void)_visitedWithTitle:(NSString *)title;
+- (void)_setVisitCount:(int)count;
+- (void)_recordInitialVisit;
@end
diff --git a/WebKit/mac/History/WebHistoryItemPrivate.h b/WebKit/mac/History/WebHistoryItemPrivate.h
index bc75d1b..0c079a7 100644
--- a/WebKit/mac/History/WebHistoryItemPrivate.h
+++ b/WebKit/mac/History/WebHistoryItemPrivate.h
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2005, 2006 Apple Computer, Inc. All rights reserved.
+ * Copyright (C) 2005, 2006, 2008 Apple Inc. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
@@ -26,23 +26,27 @@
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
-#import <Cocoa/Cocoa.h>
-
-#import <WebKit/WebBackForwardList.h>
#import <WebKit/WebHistoryItem.h>
@interface WebHistoryItem (WebPrivate)
+
+ (void)_releaseAllPendingPageCaches;
- (id)initWithURL:(NSURL *)URL title:(NSString *)title;
- (NSURL *)URL;
- (int)visitCount;
+- (BOOL)lastVisitWasFailure;
+- (void)_setLastVisitWasFailure:(BOOL)failure;
+
+- (BOOL)_lastVisitWasHTTPNonGet;
- (NSString *)RSSFeedReferrer;
- (void)setRSSFeedReferrer:(NSString *)referrer;
- (NSCalendarDate *)_lastVisitedDate;
+- (NSArray *)_redirectURLs;
+
- (WebHistoryItem *)targetItem;
- (NSString *)target;
- (BOOL)isTargetItem;
@@ -57,4 +61,7 @@
- (id)_transientPropertyForKey:(NSString *)key;
- (void)_setTransientProperty:(id)property forKey:(NSString *)key;
+- (size_t)_getDailyVisitCounts:(const int**)counts;
+- (size_t)_getWeeklyVisitCounts:(const int**)counts;
+
@end
diff --git a/WebKit/mac/History/WebHistoryPrivate.h b/WebKit/mac/History/WebHistoryPrivate.h
index 587783c..c7d6a1b 100644
--- a/WebKit/mac/History/WebHistoryPrivate.h
+++ b/WebKit/mac/History/WebHistoryPrivate.h
@@ -41,4 +41,10 @@ extern NSString *WebHistoryItemsDiscardedWhileLoadingNotification;
// FIXME: The following SPI is used by Safari. Should it be made into public API?
- (WebHistoryItem *)_itemForURLString:(NSString *)URLString;
+/*!
+ @method allItems
+ @result Returns an array of all WebHistoryItems in WebHistory, in an undefined order.
+*/
+- (NSArray *)allItems;
+
@end
diff --git a/WebKit/mac/Info.plist b/WebKit/mac/Info.plist
index e72ea0d..849742c 100644
--- a/WebKit/mac/Info.plist
+++ b/WebKit/mac/Info.plist
@@ -7,7 +7,7 @@
<key>CFBundleExecutable</key>
<string>${PRODUCT_NAME}</string>
<key>CFBundleGetInfoString</key>
- <string>${BUNDLE_VERSION}, Copyright 2003-2007 Apple Inc.</string>
+ <string>${BUNDLE_VERSION}, Copyright 2003-2009 Apple Inc.</string>
<key>CFBundleIdentifier</key>
<string>com.apple.${PRODUCT_NAME}</string>
<key>CFBundleInfoDictionaryVersion</key>
diff --git a/WebKit/mac/Misc/WebCache.mm b/WebKit/mac/Misc/WebCache.mm
index d3dfbdb..a60159f 100644
--- a/WebKit/mac/Misc/WebCache.mm
+++ b/WebKit/mac/Misc/WebCache.mm
@@ -78,6 +78,26 @@
#endif
[NSNumber numberWithInt:s.scripts.decodedSize], @"JavaScript",
nil],
+ [NSDictionary dictionaryWithObjectsAndKeys:
+ [NSNumber numberWithInt:s.images.purgeableSize], @"Images",
+ [NSNumber numberWithInt:s.cssStyleSheets.purgeableSize] ,@"CSS",
+#if ENABLE(XSLT)
+ [NSNumber numberWithInt:s.xslStyleSheets.purgeableSize], @"XSL",
+#else
+ [NSNumber numberWithInt:0], @"XSL",
+#endif
+ [NSNumber numberWithInt:s.scripts.purgeableSize], @"JavaScript",
+ nil],
+ [NSDictionary dictionaryWithObjectsAndKeys:
+ [NSNumber numberWithInt:s.images.purgedSize], @"Images",
+ [NSNumber numberWithInt:s.cssStyleSheets.purgedSize] ,@"CSS",
+#if ENABLE(XSLT)
+ [NSNumber numberWithInt:s.xslStyleSheets.purgedSize], @"XSL",
+#else
+ [NSNumber numberWithInt:0], @"XSL",
+#endif
+ [NSNumber numberWithInt:s.scripts.purgedSize], @"JavaScript",
+ nil],
nil];
}
diff --git a/WebKit/mac/Misc/WebCoreStatistics.h b/WebKit/mac/Misc/WebCoreStatistics.h
index 392f31b..a7f3fa5 100644
--- a/WebKit/mac/Misc/WebCoreStatistics.h
+++ b/WebKit/mac/Misc/WebCoreStatistics.h
@@ -61,6 +61,9 @@
+ (void)startIgnoringWebCoreNodeLeaks;
+ (void)stopIgnoringWebCoreNodeLeaks;
++ (NSDictionary *)memoryStatistics;
++ (void)returnFreeMemoryToSystem;
+
// Deprecated, but used by older versions of Safari.
+ (void)emptyCache;
+ (void)setCacheDisabled:(BOOL)disabled;
diff --git a/WebKit/mac/Misc/WebCoreStatistics.mm b/WebKit/mac/Misc/WebCoreStatistics.mm
index ecbfe9d..05c2659 100644
--- a/WebKit/mac/Misc/WebCoreStatistics.mm
+++ b/WebKit/mac/Misc/WebCoreStatistics.mm
@@ -54,7 +54,7 @@ using namespace WebCore;
+ (size_t)javaScriptObjectsCount
{
JSLock lock(false);
- return JSDOMWindow::commonJSGlobalData()->heap.size();
+ return JSDOMWindow::commonJSGlobalData()->heap.objectCount();
}
+ (size_t)javaScriptGlobalObjectsCount
@@ -122,17 +122,17 @@ using namespace WebCore;
+ (size_t)cachedFontDataCount
{
- return FontCache::fontDataCount();
+ return fontCache()->fontDataCount();
}
+ (size_t)cachedFontDataInactiveCount
{
- return FontCache::inactiveFontDataCount();
+ return fontCache()->inactiveFontDataCount();
}
+ (void)purgeInactiveFontData
{
- FontCache::purgeInactiveFontData();
+ fontCache()->purgeInactiveFontData();
}
+ (size_t)glyphPageCount
@@ -167,11 +167,31 @@ using namespace WebCore;
WebCore::Node::startIgnoringLeaks();
}
-+ (void)stopIgnoringWebCoreNodeLeaks;
++ (void)stopIgnoringWebCoreNodeLeaks
{
WebCore::Node::stopIgnoringLeaks();
}
++ (NSDictionary *)memoryStatistics
+{
+ WTF::FastMallocStatistics fastMallocStatistics = WTF::fastMallocStatistics();
+ JSLock lock(false);
+ Heap::Statistics jsHeapStatistics = JSDOMWindow::commonJSGlobalData()->heap.statistics();
+ return [NSDictionary dictionaryWithObjectsAndKeys:
+ [NSNumber numberWithInt:fastMallocStatistics.heapSize], @"FastMallocHeapSize",
+ [NSNumber numberWithInt:fastMallocStatistics.freeSizeInHeap], @"FastMallocFreeSizeInHeap",
+ [NSNumber numberWithInt:fastMallocStatistics.freeSizeInCaches], @"FastMallocFreeSizeInCaches",
+ [NSNumber numberWithInt:fastMallocStatistics.returnedSize], @"FastMallocReturnedSize",
+ [NSNumber numberWithInt:jsHeapStatistics.size], @"JavaScriptHeapSize",
+ [NSNumber numberWithInt:jsHeapStatistics.free], @"JavaScriptFreeSize",
+ nil];
+}
+
++ (void)returnFreeMemoryToSystem
+{
+ WTF::releaseFastMallocFreeMemory();
+}
+
// Deprecated
+ (size_t)javaScriptNoGCAllowedObjectsCount
{
diff --git a/WebKit/mac/Misc/WebElementDictionary.mm b/WebKit/mac/Misc/WebElementDictionary.mm
index b987525..db7b5f4 100644
--- a/WebKit/mac/Misc/WebElementDictionary.mm
+++ b/WebKit/mac/Misc/WebElementDictionary.mm
@@ -41,6 +41,7 @@
#import <WebCore/WebCoreObjCExtras.h>
#import <WebKit/DOMCore.h>
#import <WebKit/DOMExtensions.h>
+#import <runtime/InitializeThreading.h>
using namespace WebCore;
@@ -59,12 +60,13 @@ static void cacheValueForKey(const void *key, const void *value, void *self)
@implementation WebElementDictionary
-#ifndef BUILDING_ON_TIGER
+ (void)initialize
{
+ JSC::initializeThreading();
+#ifndef BUILDING_ON_TIGER
WebCoreObjCFinalizeOnMainThread(self);
-}
#endif
+}
+ (void)initializeLookupTable
{
diff --git a/WebKit/mac/Misc/WebIconDatabase.mm b/WebKit/mac/Misc/WebIconDatabase.mm
index d911f0c..3b42406 100644
--- a/WebKit/mac/Misc/WebIconDatabase.mm
+++ b/WebKit/mac/Misc/WebIconDatabase.mm
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2005, 2006 Apple Computer, Inc. All rights reserved.
+ * Copyright (C) 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
@@ -37,7 +37,6 @@
#import "WebNSURLExtras.h"
#import "WebPreferences.h"
#import "WebTypesInternal.h"
-#import <WebCore/FoundationExtras.h>
#import <WebCore/IconDatabase.h>
#import <WebCore/Image.h>
#import <WebCore/IntSize.h>
@@ -71,7 +70,6 @@ static WebIconDatabaseClient* defaultClient()
}
@interface WebIconDatabase (WebReallyInternal)
-- (BOOL)_isEnabled;
- (void)_sendNotificationForURL:(NSString *)URL;
- (void)_sendDidRemoveAllIconsNotification;
- (NSImage *)_iconForFileURL:(NSString *)fileURL withSize:(NSSize)size;
@@ -109,37 +107,8 @@ static WebIconDatabaseClient* defaultClient()
[initialDefaults release];
BOOL enabled = [defaults boolForKey:WebIconDatabaseEnabledDefaultsKey];
iconDatabase()->setEnabled(enabled);
- if (!enabled)
- return self;
- iconDatabase()->setClient(defaultClient());
-
- // Figure out the directory we should be using for the icon.db
- NSString *databaseDirectory = [self _databaseDirectory];
-
- // Rename legacy icon database files to the new icon database name
- BOOL isDirectory = NO;
- NSString *legacyDB = [databaseDirectory stringByAppendingPathComponent:@"icon.db"];
- NSFileManager *defaultManager = [NSFileManager defaultManager];
- if ([defaultManager fileExistsAtPath:legacyDB isDirectory:&isDirectory] && !isDirectory) {
- NSString *newDB = [databaseDirectory stringByAppendingPathComponent:iconDatabase()->defaultDatabaseFilename()];
- if (![defaultManager fileExistsAtPath:newDB])
- rename([legacyDB fileSystemRepresentation], [newDB fileSystemRepresentation]);
- }
-
- // Set the private browsing pref then open the WebCore icon database
- iconDatabase()->setPrivateBrowsingEnabled([[WebPreferences standardPreferences] privateBrowsingEnabled]);
- if (!iconDatabase()->open(databaseDirectory))
- LOG_ERROR("Unable to open icon database");
-
- // Register for important notifications
- [[NSNotificationCenter defaultCenter] addObserver:self
- selector:@selector(_applicationWillTerminate:)
- name:NSApplicationWillTerminateNotification
- object:NSApp];
- [[NSNotificationCenter defaultCenter]
- addObserver:self selector:@selector(_resetCachedWebPreferences:)
- name:WebPreferencesChangedNotification object:nil];
-
+ if (enabled)
+ [self _startUpIconDatabase];
return self;
}
@@ -149,7 +118,7 @@ static WebIconDatabaseClient* defaultClient()
ASSERT(size.width);
ASSERT(size.height);
- if (!URL || ![self _isEnabled])
+ if (!URL || ![self isEnabled])
return [self defaultIconForURL:URL withSize:size];
// FIXME - <rdar://problem/4697934> - Move the handling of FileURLs to WebCore and implement in ObjC++
@@ -169,7 +138,7 @@ static WebIconDatabaseClient* defaultClient()
- (NSString *)iconURLForURL:(NSString *)URL
{
- if (![self _isEnabled])
+ if (![self isEnabled])
return nil;
ASSERT_MAIN_THREAD();
@@ -197,7 +166,7 @@ static WebIconDatabaseClient* defaultClient()
{
ASSERT_MAIN_THREAD();
ASSERT(URL);
- if (![self _isEnabled])
+ if (![self isEnabled])
return;
iconDatabase()->retainIconForPageURL(URL);
@@ -207,7 +176,7 @@ static WebIconDatabaseClient* defaultClient()
{
ASSERT_MAIN_THREAD();
ASSERT(pageURL);
- if (![self _isEnabled])
+ if (![self isEnabled])
return;
iconDatabase()->releaseIconForPageURL(pageURL);
@@ -243,10 +212,27 @@ static WebIconDatabaseClient* defaultClient()
@implementation WebIconDatabase (WebPendingPublic)
+- (BOOL)isEnabled
+{
+ return iconDatabase()->isEnabled();
+}
+
+- (void)setEnabled:(BOOL)flag
+{
+ BOOL currentlyEnabled = [self isEnabled];
+ if (currentlyEnabled && !flag) {
+ iconDatabase()->setEnabled(false);
+ [self _shutDownIconDatabase];
+ } else if (!currentlyEnabled && flag) {
+ iconDatabase()->setEnabled(true);
+ [self _startUpIconDatabase];
+ }
+}
+
- (void)removeAllIcons
{
ASSERT_MAIN_THREAD();
- if (![self _isEnabled])
+ if (![self isEnabled])
return;
// Via the IconDatabaseClient interface, removeAllIcons() will send the WebIconDatabaseDidRemoveAllIconsNotification
@@ -266,11 +252,6 @@ static WebIconDatabaseClient* defaultClient()
@implementation WebIconDatabase (WebInternal)
-- (BOOL)_isEnabled
-{
- return iconDatabase()->isEnabled();
-}
-
- (void)_sendNotificationForURL:(NSString *)URL
{
ASSERT(URL);
@@ -290,6 +271,50 @@ static WebIconDatabaseClient* defaultClient()
userInfo:nil];
}
+- (void)_startUpIconDatabase
+{
+ iconDatabase()->setClient(defaultClient());
+
+ // Figure out the directory we should be using for the icon.db
+ NSString *databaseDirectory = [self _databaseDirectory];
+
+ // Rename legacy icon database files to the new icon database name
+ BOOL isDirectory = NO;
+ NSString *legacyDB = [databaseDirectory stringByAppendingPathComponent:@"icon.db"];
+ NSFileManager *defaultManager = [NSFileManager defaultManager];
+ if ([defaultManager fileExistsAtPath:legacyDB isDirectory:&isDirectory] && !isDirectory) {
+ NSString *newDB = [databaseDirectory stringByAppendingPathComponent:iconDatabase()->defaultDatabaseFilename()];
+ if (![defaultManager fileExistsAtPath:newDB])
+ rename([legacyDB fileSystemRepresentation], [newDB fileSystemRepresentation]);
+ }
+
+ // Set the private browsing pref then open the WebCore icon database
+ iconDatabase()->setPrivateBrowsingEnabled([[WebPreferences standardPreferences] privateBrowsingEnabled]);
+ if (!iconDatabase()->open(databaseDirectory))
+ LOG_ERROR("Unable to open icon database");
+
+ // Register for important notifications
+ [[NSNotificationCenter defaultCenter] addObserver:self
+ selector:@selector(_applicationWillTerminate:)
+ name:NSApplicationWillTerminateNotification
+ object:NSApp];
+ [[NSNotificationCenter defaultCenter] addObserver:self
+ selector:@selector(_resetCachedWebPreferences:)
+ name:WebPreferencesChangedNotification
+ object:nil];
+}
+
+- (void)_shutDownIconDatabase
+{
+ // Unregister for important notifications
+ [[NSNotificationCenter defaultCenter] removeObserver:self
+ name:NSApplicationWillTerminateNotification
+ object:NSApp];
+ [[NSNotificationCenter defaultCenter] removeObserver:self
+ name:WebPreferencesChangedNotification
+ object:nil];
+}
+
- (void)_applicationWillTerminate:(NSNotification *)notification
{
iconDatabase()->close();
diff --git a/WebKit/mac/Misc/WebIconDatabaseInternal.h b/WebKit/mac/Misc/WebIconDatabaseInternal.h
index b7b01ec..6c0ae50 100644
--- a/WebKit/mac/Misc/WebIconDatabaseInternal.h
+++ b/WebKit/mac/Misc/WebIconDatabaseInternal.h
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2006 Apple Computer, Inc. All rights reserved.
+ * Copyright (C) 2006, 2007, 2009 Apple Inc. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
@@ -43,6 +43,8 @@ namespace WebCore {
@interface WebIconDatabase (WebInternal)
- (void)_sendNotificationForURL:(NSString *)URL;
- (void)_sendDidRemoveAllIconsNotification;
+- (void)_shutDownIconDatabase;
+- (void)_startUpIconDatabase;
@end
extern bool importToWebCoreFormat();
diff --git a/WebKit/mac/Misc/WebIconDatabasePrivate.h b/WebKit/mac/Misc/WebIconDatabasePrivate.h
index aff923e..8fba88b 100644
--- a/WebKit/mac/Misc/WebIconDatabasePrivate.h
+++ b/WebKit/mac/Misc/WebIconDatabasePrivate.h
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2005, 2006 Apple Computer, Inc. All rights reserved.
+ * Copyright (C) 2002, 2003, 2004, 2005, 2006, 2007, 2009 Apple Inc. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
@@ -43,7 +43,21 @@ extern NSString *WebIconDatabaseImportDirectoryDefaultsKey;
@interface WebIconDatabase (WebPendingPublic)
/*!
- @method removeAllIcons:
+ @method isEnabled
+ @discussion Returns true if the icon database is currently enabled, or false if it
+ is disabled.
+*/
+- (BOOL)isEnabled;
+
+/*!
+ @method setEnabled:
+ @discussion Enables or disables the icon database based on the flag passed in.
+ @param flag Pass true to enable the icon database, or false to disable it.
+*/
+- (void)setEnabled:(BOOL)flag;
+
+/*!
+ @method removeAllIcons
@discussion Causes the icon database to delete all of the images that it has stored,
and to send out the notification WebIconDatabaseDidRemoveAllIconsNotification.
*/
diff --git a/WebKit/mac/Misc/WebKitErrors.m b/WebKit/mac/Misc/WebKitErrors.m
index fc739ba..5985d9a 100644
--- a/WebKit/mac/Misc/WebKitErrors.m
+++ b/WebKit/mac/Misc/WebKitErrors.m
@@ -41,14 +41,14 @@ NSString * const WebKitErrorPlugInNameKey = @"WebKitErrorPlugInNameK
NSString * const WebKitErrorPlugInPageURLStringKey = @"WebKitErrorPlugInPageURLStringKey";
// Policy errors
-#define WebKitErrorDescriptionCannotShowMIMEType UI_STRING("Cannot show content with specified mime type", "WebKitErrorCannotShowMIMEType description")
-#define WebKitErrorDescriptionCannotShowURL UI_STRING("Cannot show URL", "WebKitErrorCannotShowURL description")
+#define WebKitErrorDescriptionCannotShowMIMEType UI_STRING("Content with specified MIME type can’t be shown", "WebKitErrorCannotShowMIMEType description")
+#define WebKitErrorDescriptionCannotShowURL UI_STRING("The URL can’t be shown", "WebKitErrorCannotShowURL description")
#define WebKitErrorDescriptionFrameLoadInterruptedByPolicyChange UI_STRING("Frame load interrupted", "WebKitErrorFrameLoadInterruptedByPolicyChange description")
#define WebKitErrorDescriptionCannotUseRestrictedPort UI_STRING("Not allowed to use restricted network port", "WebKitErrorCannotUseRestrictedPort description")
// Plug-in and java errors
-#define WebKitErrorDescriptionCannotFindPlugin UI_STRING("Cannot find plug-in", "WebKitErrorCannotFindPlugin description")
-#define WebKitErrorDescriptionCannotLoadPlugin UI_STRING("Cannot load plug-in", "WebKitErrorCannotLoadPlugin description")
+#define WebKitErrorDescriptionCannotFindPlugin UI_STRING("The plug-in can’t be found", "WebKitErrorCannotFindPlugin description")
+#define WebKitErrorDescriptionCannotLoadPlugin UI_STRING("The plug-in can’t be loaded", "WebKitErrorCannotLoadPlugin description")
#define WebKitErrorDescriptionJavaUnavailable UI_STRING("Java is unavailable", "WebKitErrorJavaUnavailable description")
#define WebKitErrorDescriptionPlugInCancelledConnection UI_STRING("Plug-in cancelled", "WebKitErrorPlugInCancelledConnection description")
#define WebKitErrorDescriptionPlugInWillHandleLoad UI_STRING("Plug-in handled load", "WebKitErrorPlugInWillHandleLoad description")
diff --git a/WebKit/mac/Misc/WebKitLogging.h b/WebKit/mac/Misc/WebKitLogging.h
index dc37dbf..f71f730 100644
--- a/WebKit/mac/Misc/WebKitLogging.h
+++ b/WebKit/mac/Misc/WebKitLogging.h
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2005, 2007 Apple Inc. All rights reserved.
+ * Copyright (C) 2005, 2007, 2008 Apple Inc. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
@@ -63,13 +63,11 @@ extern WTFLogChannel WebKitLogTextInput;
void WebKitInitializeLoggingChannelsIfNecessary(void);
-BOOL WebKitRunningOnMainThread(void);
-
-// The ASSERT_MAIN_THREAD() check should be on by default in DEBUG builds
-// To disable it, even in a debug build, define DISABLE_THREAD_CHECK in your project file (or elsewhere globally)
+// FIXME: Why is this in the "logging" header file?
+// Use WebCoreThreadViolationCheck instead for checks that throw an exception even in production builds.
#if !defined(NDEBUG) && !defined(DISABLE_THREAD_CHECK)
#define ASSERT_MAIN_THREAD() do \
- if (!WebKitRunningOnMainThread()) { \
+ if (!pthread_main_np()) { \
WTFReportAssertionFailure(__FILE__, __LINE__, WTF_PRETTY_FUNCTION, "<not running on main thread>"); \
CRASH(); \
} \
diff --git a/WebKit/mac/Misc/WebKitLogging.m b/WebKit/mac/Misc/WebKitLogging.m
index 4e4294f..72a822f 100644
--- a/WebKit/mac/Misc/WebKitLogging.m
+++ b/WebKit/mac/Misc/WebKitLogging.m
@@ -99,11 +99,6 @@ void WebKitInitializeLoggingChannelsIfNecessary()
initializeLogChannel(&WebKitLogTextInput);
}
-BOOL WebKitRunningOnMainThread()
-{
- return pthread_main_np() != 0;
-}
-
void ReportDiscardedDelegateException(SEL delegateSelector, id exception)
{
if ([exception isKindOfClass:[NSException class]])
diff --git a/WebKit/mac/Misc/WebKitNSStringExtras.m b/WebKit/mac/Misc/WebKitNSStringExtras.m
index 157069a..2e75e9e 100644
--- a/WebKit/mac/Misc/WebKitNSStringExtras.m
+++ b/WebKit/mac/Misc/WebKitNSStringExtras.m
@@ -140,58 +140,12 @@ static BOOL canUseFastRenderer(const UniChar *buffer, unsigned length)
+ (NSStringEncoding)_web_encodingForResource:(Handle)resource
{
- short resRef = HomeResFile(resource);
- if (ResError() != noErr) {
- return NSMacOSRomanStringEncoding;
- }
-
- // Get the FSRef for the current resource file
- FSRef fref;
- OSStatus error = FSGetForkCBInfo(resRef, 0, NULL, NULL, NULL, &fref, NULL);
- if (error != noErr) {
- return NSMacOSRomanStringEncoding;
- }
-
- CFURLRef URL = CFURLCreateFromFSRef(NULL, &fref);
- if (URL == NULL) {
- return NSMacOSRomanStringEncoding;
- }
-
- NSString *path = [(NSURL *)URL path];
- CFRelease(URL);
-
- // Get the lproj directory name
- path = [path stringByDeletingLastPathComponent];
- if (![[path pathExtension] _webkit_isCaseInsensitiveEqualToString:@"lproj"]) {
- return NSMacOSRomanStringEncoding;
- }
-
- NSString *directoryName = [[path stringByDeletingPathExtension] lastPathComponent];
- CFStringRef locale = CFLocaleCreateCanonicalLocaleIdentifierFromString(NULL, (CFStringRef)directoryName);
- if (locale == NULL) {
- return NSMacOSRomanStringEncoding;
- }
-
- LangCode lang;
- RegionCode region;
- error = LocaleStringToLangAndRegionCodes([(NSString *)locale UTF8String], &lang, &region);
- CFRelease(locale);
- if (error != noErr) {
- return NSMacOSRomanStringEncoding;
- }
-
- TextEncoding encoding;
- error = UpgradeScriptInfoToTextEncoding(kTextScriptDontCare, lang, region, NULL, &encoding);
- if (error != noErr) {
- return NSMacOSRomanStringEncoding;
- }
-
- return CFStringConvertEncodingToNSStringEncoding(encoding);
+ return CFStringConvertEncodingToNSStringEncoding(stringEncodingForResource(resource));
}
- (BOOL)_webkit_isCaseInsensitiveEqualToString:(NSString *)string
{
- return [self compare:string options:(NSCaseInsensitiveSearch|NSLiteralSearch)] == NSOrderedSame;
+ return stringIsCaseInsensitiveEqualToString(self, string);
}
-(BOOL)_webkit_hasCaseInsensitivePrefix:(NSString *)prefix
diff --git a/WebKit/mac/Misc/WebKitVersionChecks.h b/WebKit/mac/Misc/WebKitVersionChecks.h
index 33dc38b..6c60d6a 100644
--- a/WebKit/mac/Misc/WebKitVersionChecks.h
+++ b/WebKit/mac/Misc/WebKitVersionChecks.h
@@ -48,6 +48,9 @@
#define WEBKIT_FIRST_VERSION_WITH_IE_COMPATIBLE_KEYBOARD_EVENT_DISPATCH 0x020D0100 // 525.1.0
#define WEBKIT_FIRST_VERSION_WITH_LOADING_DURING_COMMON_RUNLOOP_MODES 0x020E0000 // 526.0.0
#define WEBKIT_FIRST_VERSION_WITH_MORE_STRICT_LOCAL_RESOURCE_SECURITY_RESTRICTION 0x02100200 // 528.2.0
+#define WEBKIT_FIRST_VERSION_WITH_RELOAD_FROM_ORIGIN 0x02100700 // 528.7.0
+#define WEBKIT_FIRST_VERSION_WITHOUT_MAIL_THREAD_WORKAROUND 0x02100700 // 528.7.0
+#define WEBKIT_FIRST_VERSION_WITHOUT_WEBVIEW_INIT_THREAD_WORKAROUND 0x02100700 // 528.7.0
#ifdef __cplusplus
extern "C" {
diff --git a/WebKit/mac/Misc/WebNSArrayExtras.h b/WebKit/mac/Misc/WebNSArrayExtras.h
index 5e3294d..a69a694 100644
--- a/WebKit/mac/Misc/WebNSArrayExtras.h
+++ b/WebKit/mac/Misc/WebNSArrayExtras.h
@@ -26,8 +26,15 @@
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
+#import "WebTypesInternal.h"
#import <Cocoa/Cocoa.h>
+@interface NSArray (WebNSArrayExtras)
+
+-(NSNumber *)_webkit_numberAtIndex:(NSUInteger)index;
+-(NSString *)_webkit_stringAtIndex:(NSUInteger)index;
+
+@end
@interface NSMutableArray (WebNSArrayExtras)
diff --git a/WebKit/mac/Misc/WebNSArrayExtras.m b/WebKit/mac/Misc/WebNSArrayExtras.m
index b8b9af3..6377010 100644
--- a/WebKit/mac/Misc/WebNSArrayExtras.m
+++ b/WebKit/mac/Misc/WebNSArrayExtras.m
@@ -30,7 +30,23 @@
#import <wtf/Assertions.h>
-@implementation NSMutableArray (WebExtras)
+@implementation NSArray (WebNSArrayExtras)
+
+-(NSNumber *)_webkit_numberAtIndex:(NSUInteger)index
+{
+ id object = [self objectAtIndex:index];
+ return [object isKindOfClass:[NSNumber class]] ? object : nil;
+}
+
+-(NSString *)_webkit_stringAtIndex:(NSUInteger)index
+{
+ id object = [self objectAtIndex:index];
+ return [object isKindOfClass:[NSString class]] ? object : nil;
+}
+
+@end
+
+@implementation NSMutableArray (WebNSArrayExtras)
- (void)_webkit_removeUselessMenuItemSeparators
{
diff --git a/WebKit/mac/Misc/WebNSDataExtras.h b/WebKit/mac/Misc/WebNSDataExtras.h
index d6ce829..689077c 100644
--- a/WebKit/mac/Misc/WebNSDataExtras.h
+++ b/WebKit/mac/Misc/WebNSDataExtras.h
@@ -28,11 +28,15 @@
#import <Foundation/Foundation.h>
+#import "WebTypesInternal.h"
+
#define WEB_GUESS_MIME_TYPE_PEEK_LENGTH 1024
@interface NSData (WebNSDataExtras)
-(BOOL)_web_isCaseInsensitiveEqualToCString:(const char *)string;
-(NSMutableDictionary *)_webkit_parseRFC822HeaderFields;
+- (BOOL)_web_startsWithBlankLine;
+- (NSInteger)_web_locationAfterFirstBlankLine;
@end
diff --git a/WebKit/mac/Misc/WebNSDataExtras.m b/WebKit/mac/Misc/WebNSDataExtras.m
index 0bd4555..e446661 100644
--- a/WebKit/mac/Misc/WebNSDataExtras.m
+++ b/WebKit/mac/Misc/WebNSDataExtras.m
@@ -392,4 +392,39 @@ static const UInt8 *_findEOL(const UInt8 *bytes, CFIndex len) {
return headerFields;
}
+- (BOOL)_web_startsWithBlankLine
+{
+ return [self length] > 0 && ((const char *)[self bytes])[0] == '\n';
+}
+
+- (NSInteger)_web_locationAfterFirstBlankLine
+{
+ const char *bytes = (const char *)[self bytes];
+ unsigned length = [self length];
+
+ unsigned i;
+ for (i = 0; i < length - 4; i++) {
+
+ // Support for Acrobat. It sends "\n\n".
+ if (bytes[i] == '\n' && bytes[i+1] == '\n') {
+ return i+2;
+ }
+
+ // Returns the position after 2 CRLF's or 1 CRLF if it is the first line.
+ if (bytes[i] == '\r' && bytes[i+1] == '\n') {
+ i += 2;
+ if (i == 2) {
+ return i;
+ } else if (bytes[i] == '\n') {
+ // Support for Director. It sends "\r\n\n" (3880387).
+ return i+1;
+ } else if (bytes[i] == '\r' && bytes[i+1] == '\n') {
+ // Support for Flash. It sends "\r\n\r\n" (3758113).
+ return i+2;
+ }
+ }
+ }
+ return NSNotFound;
+}
+
@end
diff --git a/WebKit/mac/Misc/WebNSDictionaryExtras.h b/WebKit/mac/Misc/WebNSDictionaryExtras.h
index 57d868a..95445f8 100644
--- a/WebKit/mac/Misc/WebNSDictionaryExtras.h
+++ b/WebKit/mac/Misc/WebNSDictionaryExtras.h
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2005 Apple Computer, Inc. All rights reserved.
+ * Copyright (C) 2005, 2008 Apple Inc. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
@@ -29,8 +29,10 @@
#import <Foundation/Foundation.h>
@interface NSDictionary (WebNSDictionaryExtras)
+- (BOOL)_webkit_boolForKey:(id)key;
- (int)_webkit_intForKey:(id)key;
- (NSString *)_webkit_stringForKey:(id)key; // Returns nil if the value is not an NSString.
+- (NSArray *)_webkit_arrayForKey:(id)key; // Returns nil if the value is not an NSArray.
// Searches for the full MIME type, then the prefix (e.g., "text/" for "text/html")
- (id)_webkit_objectForMIMEType:(NSString *)MIMEType;
@@ -43,4 +45,3 @@
- (void)_webkit_setBool:(BOOL)value forKey:(id)key;
- (void)_webkit_setUnsignedLongLong:(unsigned long long)value forKey:(id)key;
@end
-
diff --git a/WebKit/mac/Misc/WebNSDictionaryExtras.m b/WebKit/mac/Misc/WebNSDictionaryExtras.m
index 665db22..a47fd0b 100644
--- a/WebKit/mac/Misc/WebNSDictionaryExtras.m
+++ b/WebKit/mac/Misc/WebNSDictionaryExtras.m
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2005 Apple Computer, Inc. All rights reserved.
+ * Copyright (C) 2005, 2008 Apple Inc. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
@@ -49,6 +49,12 @@
return [object isKindOfClass:[NSString class]] ? object : nil;
}
+-(NSArray *)_webkit_arrayForKey:(id)key
+{
+ id object = [self objectForKey:key];
+ return [object isKindOfClass:[NSArray class]] ? object : nil;
+}
+
-(id)_webkit_objectForMIMEType:(NSString *)MIMEType
{
id result;
@@ -67,6 +73,12 @@
return [self objectForKey:[MIMEType substringToIndex:slashRange.location + 1]];
}
+- (BOOL)_webkit_boolForKey:(id)key
+{
+ NSNumber *number = [self _webkit_numberForKey:key];
+ return number && [number boolValue];
+}
+
@end
@implementation NSMutableDictionary (WebNSDictionaryExtras)
diff --git a/WebKit/mac/Misc/WebNSObjectExtras.h b/WebKit/mac/Misc/WebNSObjectExtras.h
index 8029825..f327966 100644
--- a/WebKit/mac/Misc/WebNSObjectExtras.h
+++ b/WebKit/mac/Misc/WebNSObjectExtras.h
@@ -52,3 +52,7 @@ static inline IMP method_setImplementation(Method m, IMP i)
}
#endif
+
+@interface NSObject (WebNSObjectExtras)
+- (id)_webkit_invokeOnMainThread;
+@end
diff --git a/WebKit/mac/Misc/WebNSObjectExtras.mm b/WebKit/mac/Misc/WebNSObjectExtras.mm
new file mode 100644
index 0000000..2d682b9
--- /dev/null
+++ b/WebKit/mac/Misc/WebNSObjectExtras.mm
@@ -0,0 +1,93 @@
+/*
+ * Copyright (C) 2008 Apple Inc. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ * 3. Neither the name of Apple Computer, Inc. ("Apple") nor the names of
+ * its contributors may be used to endorse or promote products derived
+ * from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY APPLE AND ITS CONTRIBUTORS "AS IS" AND ANY
+ * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+ * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+ * DISCLAIMED. IN NO EVENT SHALL APPLE OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+ * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+ * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+ * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+ * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#import "WebNSObjectExtras.h"
+
+
+@interface WebMainThreadInvoker : NSProxy
+{
+ id target;
+ id exception;
+}
+@end
+
+@implementation WebMainThreadInvoker
+
+- (id)initWithTarget:(id)theTarget
+{
+ target = theTarget;
+ return self;
+}
+
+- (void)forwardInvocation:(NSInvocation *)invocation
+{
+ [invocation setTarget:target];
+ [invocation retainArguments];
+ [invocation performSelectorOnMainThread:@selector(_webkit_invokeAndHandleException:) withObject:self waitUntilDone:YES];
+ if (exception) {
+ id exceptionToThrow = [exception autorelease];
+ exception = nil;
+ @throw exceptionToThrow;
+ }
+}
+
+- (NSMethodSignature *)methodSignatureForSelector:(SEL)selector
+{
+ return [target methodSignatureForSelector:selector];
+}
+
+- (void)handleException:(id)e
+{
+ exception = [e retain];
+}
+
+@end
+
+
+@implementation NSInvocation (WebMainThreadInvoker)
+
+- (void)_webkit_invokeAndHandleException:(WebMainThreadInvoker *)exceptionHandler
+{
+ @try {
+ [self invoke];
+ } @catch (id e) {
+ [exceptionHandler handleException:e];
+ }
+}
+
+@end
+
+
+@implementation NSObject (WebNSObjectExtras)
+
+- (id)_webkit_invokeOnMainThread
+{
+ return [[[WebMainThreadInvoker alloc] initWithTarget:self] autorelease];
+}
+
+@end
diff --git a/WebKit/mac/Misc/WebNSPasteboardExtras.mm b/WebKit/mac/Misc/WebNSPasteboardExtras.mm
index b84542a..34c39dd 100644
--- a/WebKit/mac/Misc/WebNSPasteboardExtras.mm
+++ b/WebKit/mac/Misc/WebNSPasteboardExtras.mm
@@ -41,6 +41,7 @@
#import <WebKit/DOMExtensions.h>
#import <WebKit/DOMPrivate.h>
#import <wtf/Assertions.h>
+#import <wtf/StdLibExtras.h>
#import <wtf/RetainPtr.h>
#import <WebKitSystemInterface.h>
@@ -58,37 +59,40 @@ NSString *WebURLNamePboardType = @"public.url-name";
+ (NSArray *)_web_writableTypesForURL
{
- static RetainPtr<NSArray> types;
- if (!types) {
- types = [[NSArray alloc] initWithObjects:
- WebURLsWithTitlesPboardType,
- NSURLPboardType,
- WebURLPboardType,
- WebURLNamePboardType,
- NSStringPboardType,
- nil];
- }
+ DEFINE_STATIC_LOCAL(RetainPtr<NSArray>, types, ([[NSArray alloc] initWithObjects:
+ WebURLsWithTitlesPboardType,
+ NSURLPboardType,
+ WebURLPboardType,
+ WebURLNamePboardType,
+ NSStringPboardType,
+ nil]));
return types.get();
}
+static inline NSArray *_createWritableTypesForImageWithoutArchive()
+{
+ NSMutableArray *types = [[NSMutableArray alloc] initWithObjects:NSTIFFPboardType, nil];
+ [types addObjectsFromArray:[NSPasteboard _web_writableTypesForURL]];
+ return types;
+}
+
static NSArray *_writableTypesForImageWithoutArchive (void)
{
- static RetainPtr<NSMutableArray> types;
- if (types == nil) {
- types = [[NSMutableArray alloc] initWithObjects:NSTIFFPboardType, nil];
- [types.get() addObjectsFromArray:[NSPasteboard _web_writableTypesForURL]];
- }
+ DEFINE_STATIC_LOCAL(RetainPtr<NSArray>, types, (_createWritableTypesForImageWithoutArchive()));
return types.get();
}
+static inline NSArray *_createWritableTypesForImageWithArchive()
+{
+ NSMutableArray *types = [_writableTypesForImageWithoutArchive() mutableCopy];
+ [types addObject:NSRTFDPboardType];
+ [types addObject:WebArchivePboardType];
+ return types;
+}
+
static NSArray *_writableTypesForImageWithArchive (void)
{
- static RetainPtr<NSMutableArray> types;
- if (types == nil) {
- types = [_writableTypesForImageWithoutArchive() mutableCopy];
- [types.get() addObject:NSRTFDPboardType];
- [types.get() addObject:WebArchivePboardType];
- }
+ DEFINE_STATIC_LOCAL(RetainPtr<NSArray>, types, (_createWritableTypesForImageWithArchive()));
return types.get();
}
@@ -207,7 +211,7 @@ static NSArray *_writableTypesForImageWithArchive (void)
}
-CachedImage* imageFromElement(DOMElement *domElement) {
+static CachedImage* imageFromElement(DOMElement *domElement) {
Element* element = core(domElement);
if (!element)
return 0;
@@ -259,18 +263,23 @@ CachedImage* imageFromElement(DOMElement *domElement) {
{
ASSERT(self == [NSPasteboard pasteboardWithName:NSDragPboard]);
+ NSString *extension = @"";
+ if (RenderObject* renderer = core(element)->renderer()) {
+ if (renderer->isImage()) {
+ if (CachedImage* image = static_cast<RenderImage*>(renderer)->cachedImage()) {
+ extension = image->image()->filenameExtension();
+ if (![extension length])
+ return 0;
+ }
+ }
+ }
+
NSMutableArray *types = [[NSMutableArray alloc] initWithObjects:NSFilesPromisePboardType, nil];
[types addObjectsFromArray:[NSPasteboard _web_writableTypesForImageIncludingArchive:(archive != nil)]];
[self declareTypes:types owner:source];
[self _web_writeImage:nil element:element URL:URL title:title archive:archive types:types source:source];
[types release];
- NSString *extension = @"";
- if (RenderObject* renderer = core(element)->renderer())
- if (renderer->isImage())
- if (CachedImage* image = static_cast<RenderImage*>(renderer)->cachedImage())
- extension = WKGetPreferredExtensionForMIMEType(image->response().mimeType());
-
NSArray *extensions = [[NSArray alloc] initWithObjects:extension, nil];
[self setPropertyList:extensions forType:NSFilesPromisePboardType];
[extensions release];
diff --git a/WebKit/mac/Misc/WebStringTruncator.m b/WebKit/mac/Misc/WebStringTruncator.m
index c395e7a..fb31bbb 100644
--- a/WebKit/mac/Misc/WebStringTruncator.m
+++ b/WebKit/mac/Misc/WebStringTruncator.m
@@ -33,6 +33,7 @@
#import <WebCore/FontPlatformData.h>
#import <WebCore/PlatformString.h>
#import <WebCore/StringTruncator.h>
+#import <wtf/StdLibExtras.h>
using namespace WebCore;
@@ -49,7 +50,7 @@ static NSFont *defaultMenuFont()
static Font& fontFromNSFont(NSFont *font)
{
static NSFont *currentFont;
- static Font currentRenderer;
+ DEFINE_STATIC_LOCAL(Font, currentRenderer, ());
if ([font isEqual:currentFont])
return currentRenderer;
diff --git a/WebKit/mac/Panels/English.lproj/WebAuthenticationPanel.nib/classes.nib b/WebKit/mac/Panels/English.lproj/WebAuthenticationPanel.nib/classes.nib
deleted file mode 100644
index 87a7210..0000000
--- a/WebKit/mac/Panels/English.lproj/WebAuthenticationPanel.nib/classes.nib
+++ /dev/null
@@ -1,38 +0,0 @@
-{
- IBClasses = (
- {CLASS = FirstResponder; LANGUAGE = ObjC; SUPERCLASS = NSObject; },
- {
- ACTIONS = {cancel = id; logIn = id; };
- CLASS = IFAuthenticationPanel;
- LANGUAGE = ObjC;
- OUTLETS = {
- imageView = id;
- mainLabel = id;
- panel = id;
- password = id;
- remember = id;
- smallLabel = id;
- username = id;
- };
- SUPERCLASS = NSObject;
- },
- {CLASS = NonBlockingPanel; LANGUAGE = ObjC; SUPERCLASS = NSPanel; },
- {
- ACTIONS = {cancel = id; logIn = id; };
- CLASS = WebAuthenticationPanel;
- LANGUAGE = ObjC;
- OUTLETS = {
- callback = id;
- imageView = id;
- mainLabel = id;
- panel = id;
- password = id;
- remember = id;
- smallLabel = id;
- username = id;
- };
- SUPERCLASS = NSObject;
- }
- );
- IBVersion = 1;
-} \ No newline at end of file
diff --git a/WebKit/mac/Panels/English.lproj/WebAuthenticationPanel.nib/designable.nib b/WebKit/mac/Panels/English.lproj/WebAuthenticationPanel.nib/designable.nib
new file mode 100644
index 0000000..31b269a
--- /dev/null
+++ b/WebKit/mac/Panels/English.lproj/WebAuthenticationPanel.nib/designable.nib
@@ -0,0 +1,1182 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<archive type="com.apple.InterfaceBuilder3.Cocoa.XIB" version="7.02">
+ <data>
+ <int key="IBDocument.SystemTarget">1050</int>
+ <string key="IBDocument.SystemVersion">9G55</string>
+ <string key="IBDocument.InterfaceBuilderVersion">672</string>
+ <string key="IBDocument.AppKitVersion">949.43</string>
+ <string key="IBDocument.HIToolboxVersion">353.00</string>
+ <object class="NSMutableArray" key="IBDocument.EditedObjectIDs">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <integer value="6"/>
+ </object>
+ <object class="NSArray" key="IBDocument.PluginDependencies">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+ </object>
+ <object class="NSMutableArray" key="IBDocument.RootObjects" id="563121920">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <object class="NSCustomObject" id="238662661">
+ <string key="NSClassName">IFAuthenticationPanel</string>
+ </object>
+ <object class="NSCustomObject" id="729335755">
+ <string key="NSClassName">FirstResponder</string>
+ </object>
+ <object class="NSCustomObject" id="239643893">
+ <string key="NSClassName">NSApplication</string>
+ </object>
+ <object class="NSWindowTemplate" id="118512579">
+ <int key="NSWindowStyleMask">1</int>
+ <int key="NSWindowBacking">2</int>
+ <string key="NSWindowRect">{{93, 112}, {424, 239}}</string>
+ <int key="NSWTFlags">1886912512</int>
+ <string key="NSWindowTitle">Log In</string>
+ <string key="NSWindowClass">NonBlockingPanel</string>
+ <object class="NSMutableString" key="NSViewClass">
+ <characters key="NS.bytes">View</characters>
+ </object>
+ <string key="NSWindowContentMaxSize">{500, 202}</string>
+ <string key="NSWindowContentMinSize">{300, 100}</string>
+ <object class="NSView" key="NSWindowView" id="327235052">
+ <reference key="NSNextResponder"/>
+ <int key="NSvFlags">256</int>
+ <object class="NSMutableArray" key="NSSubviews">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <object class="NSTextField" id="705333610">
+ <reference key="NSNextResponder" ref="327235052"/>
+ <int key="NSvFlags">266</int>
+ <string key="NSFrame">{{101, 185}, {306, 34}}</string>
+ <reference key="NSSuperview" ref="327235052"/>
+ <int key="NSTag">1</int>
+ <bool key="NSEnabled">YES</bool>
+ <object class="NSTextFieldCell" key="NSCell" id="240004773">
+ <int key="NSCellFlags">69336577</int>
+ <int key="NSCellFlags2">4194304</int>
+ <string type="base64-UTF8" key="NSContents">VG8gdmlldyB0aGlzIHBhZ2UsIHlvdSBuZWVkIHRvIGxvZyBpbiB0byBhcmVhIOKAnFNvbWUgUmVhbG3i
+gJ0gb24gd3d3LnNlcnZlci5jb20uCi4uA</string>
+ <object class="NSFont" key="NSSupport" id="897649771">
+ <string key="NSName">LucidaGrande</string>
+ <double key="NSSize">1.300000e+01</double>
+ <int key="NSfFlags">1044</int>
+ </object>
+ <int key="NSTag">1</int>
+ <reference key="NSControlView" ref="705333610"/>
+ <object class="NSColor" key="NSBackgroundColor" id="475108766">
+ <int key="NSColorSpace">6</int>
+ <string key="NSCatalogName">System</string>
+ <string key="NSColorName">controlColor</string>
+ <object class="NSColor" key="NSColor">
+ <int key="NSColorSpace">3</int>
+ <bytes key="NSWhite">MC42NjY2NjY2OQA</bytes>
+ </object>
+ </object>
+ <object class="NSColor" key="NSTextColor" id="644083014">
+ <int key="NSColorSpace">6</int>
+ <string key="NSCatalogName">System</string>
+ <string key="NSColorName">controlTextColor</string>
+ <object class="NSColor" key="NSColor" id="170747205">
+ <int key="NSColorSpace">3</int>
+ <bytes key="NSWhite">MAA</bytes>
+ </object>
+ </object>
+ </object>
+ </object>
+ <object class="NSTextField" id="199018347">
+ <reference key="NSNextResponder" ref="327235052"/>
+ <int key="NSvFlags">290</int>
+ <string key="NSFrame">{{101, 157}, {291, 20}}</string>
+ <reference key="NSSuperview" ref="327235052"/>
+ <int key="NSTag">2</int>
+ <bool key="NSEnabled">YES</bool>
+ <object class="NSTextFieldCell" key="NSCell" id="213641065">
+ <int key="NSCellFlags">69336577</int>
+ <int key="NSCellFlags2">4194304</int>
+ <string key="NSContents">Your password will be sent unencrypted.</string>
+ <object class="NSFont" key="NSSupport">
+ <string key="NSName">LucidaGrande</string>
+ <double key="NSSize">1.100000e+01</double>
+ <int key="NSfFlags">3100</int>
+ </object>
+ <int key="NSTag">2</int>
+ <reference key="NSControlView" ref="199018347"/>
+ <reference key="NSBackgroundColor" ref="475108766"/>
+ <reference key="NSTextColor" ref="644083014"/>
+ </object>
+ </object>
+ <object class="NSButton" id="305175176">
+ <reference key="NSNextResponder" ref="327235052"/>
+ <int key="NSvFlags">289</int>
+ <string key="NSFrame">{{326, 12}, {84, 32}}</string>
+ <reference key="NSSuperview" ref="327235052"/>
+ <bool key="NSEnabled">YES</bool>
+ <object class="NSButtonCell" key="NSCell" id="568224179">
+ <int key="NSCellFlags">67239424</int>
+ <int key="NSCellFlags2">137887744</int>
+ <string key="NSContents">Log In</string>
+ <reference key="NSSupport" ref="897649771"/>
+ <reference key="NSControlView" ref="305175176"/>
+ <int key="NSButtonFlags">-2038284033</int>
+ <int key="NSButtonFlags2">1</int>
+ <object class="NSFont" key="NSAlternateImage" id="784044296">
+ <string key="NSName">Helvetica</string>
+ <double key="NSSize">1.300000e+01</double>
+ <int key="NSfFlags">16</int>
+ </object>
+ <string key="NSAlternateContents"/>
+ <string type="base64-UTF8" key="NSKeyEquivalent">DQ</string>
+ <int key="NSPeriodicDelay">200</int>
+ <int key="NSPeriodicInterval">25</int>
+ </object>
+ </object>
+ <object class="NSButton" id="494193237">
+ <reference key="NSNextResponder" ref="327235052"/>
+ <int key="NSvFlags">289</int>
+ <string key="NSFrame">{{242, 12}, {84, 32}}</string>
+ <reference key="NSSuperview" ref="327235052"/>
+ <bool key="NSEnabled">YES</bool>
+ <object class="NSButtonCell" key="NSCell" id="55525334">
+ <int key="NSCellFlags">67239424</int>
+ <int key="NSCellFlags2">137887744</int>
+ <string key="NSContents">Cancel</string>
+ <reference key="NSSupport" ref="897649771"/>
+ <reference key="NSControlView" ref="494193237"/>
+ <int key="NSButtonFlags">-2038284033</int>
+ <int key="NSButtonFlags2">1</int>
+ <reference key="NSAlternateImage" ref="784044296"/>
+ <string key="NSAlternateContents"/>
+ <string type="base64-UTF8" key="NSKeyEquivalent">Gw</string>
+ <int key="NSPeriodicDelay">200</int>
+ <int key="NSPeriodicInterval">25</int>
+ </object>
+ </object>
+ <object class="NSTextField" id="71972597">
+ <reference key="NSNextResponder" ref="327235052"/>
+ <int key="NSvFlags">290</int>
+ <string key="NSFrame">{{174, 127}, {210, 22}}</string>
+ <reference key="NSSuperview" ref="327235052"/>
+ <int key="NSTag">3</int>
+ <bool key="NSEnabled">YES</bool>
+ <object class="NSTextFieldCell" key="NSCell" id="439646453">
+ <int key="NSCellFlags">-1804468671</int>
+ <int key="NSCellFlags2">4195328</int>
+ <string key="NSContents"/>
+ <reference key="NSSupport" ref="897649771"/>
+ <int key="NSTag">3</int>
+ <reference key="NSControlView" ref="71972597"/>
+ <bool key="NSDrawsBackground">YES</bool>
+ <object class="NSColor" key="NSBackgroundColor" id="301231121">
+ <int key="NSColorSpace">6</int>
+ <string key="NSCatalogName">System</string>
+ <string key="NSColorName">textBackgroundColor</string>
+ <object class="NSColor" key="NSColor">
+ <int key="NSColorSpace">3</int>
+ <bytes key="NSWhite">MQA</bytes>
+ </object>
+ </object>
+ <object class="NSColor" key="NSTextColor" id="577315227">
+ <int key="NSColorSpace">6</int>
+ <string key="NSCatalogName">System</string>
+ <string key="NSColorName">textColor</string>
+ <reference key="NSColor" ref="170747205"/>
+ </object>
+ </object>
+ </object>
+ <object class="NSTextField" id="368270689">
+ <reference key="NSNextResponder" ref="327235052"/>
+ <int key="NSvFlags">290</int>
+ <string key="NSFrame">{{174, 97}, {210, 22}}</string>
+ <reference key="NSSuperview" ref="327235052"/>
+ <int key="NSTag">4</int>
+ <bool key="NSEnabled">YES</bool>
+ <object class="NSTextFieldCell" key="NSCell" id="743913118">
+ <int key="NSCellFlags">-1804468671</int>
+ <int key="NSCellFlags2">4195328</int>
+ <string key="NSContents"/>
+ <reference key="NSSupport" ref="897649771"/>
+ <int key="NSTag">4</int>
+ <reference key="NSControlView" ref="368270689"/>
+ <bool key="NSDrawsBackground">YES</bool>
+ <reference key="NSBackgroundColor" ref="301231121"/>
+ <reference key="NSTextColor" ref="577315227"/>
+ </object>
+ </object>
+ <object class="NSTextField" id="477300420">
+ <reference key="NSNextResponder" ref="327235052"/>
+ <int key="NSvFlags">289</int>
+ <string key="NSFrame">{{101, 129}, {71, 17}}</string>
+ <reference key="NSSuperview" ref="327235052"/>
+ <bool key="NSEnabled">YES</bool>
+ <object class="NSTextFieldCell" key="NSCell" id="159596654">
+ <int key="NSCellFlags">67239424</int>
+ <int key="NSCellFlags2">4194304</int>
+ <string type="base64-UTF8" key="NSContents">TmFtZToKA</string>
+ <reference key="NSSupport" ref="897649771"/>
+ <reference key="NSControlView" ref="477300420"/>
+ <reference key="NSBackgroundColor" ref="475108766"/>
+ <reference key="NSTextColor" ref="644083014"/>
+ </object>
+ </object>
+ <object class="NSTextField" id="833115728">
+ <reference key="NSNextResponder" ref="327235052"/>
+ <int key="NSvFlags">289</int>
+ <string key="NSFrame">{{101, 94}, {68, 22}}</string>
+ <reference key="NSSuperview" ref="327235052"/>
+ <bool key="NSEnabled">YES</bool>
+ <object class="NSTextFieldCell" key="NSCell" id="766878508">
+ <int key="NSCellFlags">67239424</int>
+ <int key="NSCellFlags2">4194304</int>
+ <string type="base64-UTF8" key="NSContents">UGFzc3dvcmQ6Cg</string>
+ <reference key="NSSupport" ref="897649771"/>
+ <reference key="NSControlView" ref="833115728"/>
+ <reference key="NSBackgroundColor" ref="475108766"/>
+ <reference key="NSTextColor" ref="644083014"/>
+ </object>
+ </object>
+ <object class="NSImageView" id="285173040">
+ <reference key="NSNextResponder" ref="327235052"/>
+ <int key="NSvFlags">256</int>
+ <object class="NSMutableSet" key="NSDragTypes">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <object class="NSMutableArray" key="set.sortedObjects">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <string>Apple PDF pasteboard type</string>
+ <string>Apple PICT pasteboard type</string>
+ <string>Apple PNG pasteboard type</string>
+ <string>NSFilenamesPboardType</string>
+ <string>NeXT Encapsulated PostScript v1.2 pasteboard type</string>
+ <string>NeXT TIFF v4.0 pasteboard type</string>
+ </object>
+ </object>
+ <string key="NSFrame">{{20, 155}, {64, 64}}</string>
+ <reference key="NSSuperview" ref="327235052"/>
+ <bool key="NSEnabled">YES</bool>
+ <object class="NSImageCell" key="NSCell" id="375502905">
+ <int key="NSCellFlags">130560</int>
+ <int key="NSCellFlags2">33554432</int>
+ <int key="NSAlign">0</int>
+ <int key="NSScale">0</int>
+ <int key="NSStyle">0</int>
+ <bool key="NSAnimates">NO</bool>
+ </object>
+ <bool key="NSEditable">YES</bool>
+ </object>
+ <object class="NSButton" id="657854151">
+ <reference key="NSNextResponder" ref="327235052"/>
+ <int key="NSvFlags">289</int>
+ <string key="NSFrame">{{102, 58}, {280, 18}}</string>
+ <reference key="NSSuperview" ref="327235052"/>
+ <bool key="NSEnabled">YES</bool>
+ <object class="NSButtonCell" key="NSCell" id="358614001">
+ <int key="NSCellFlags">67239424</int>
+ <int key="NSCellFlags2">0</int>
+ <string key="NSContents">Remember this password in my keychain</string>
+ <reference key="NSSupport" ref="897649771"/>
+ <reference key="NSControlView" ref="657854151"/>
+ <int key="NSButtonFlags">1211912703</int>
+ <int key="NSButtonFlags2">2</int>
+ <object class="NSButtonImageSource" key="NSAlternateImage">
+ <string key="NSImageName">NSSwitch</string>
+ </object>
+ <string key="NSAlternateContents"/>
+ <string key="NSKeyEquivalent"/>
+ <int key="NSPeriodicDelay">200</int>
+ <int key="NSPeriodicInterval">25</int>
+ </object>
+ </object>
+ </object>
+ <string key="NSFrameSize">{424, 239}</string>
+ <reference key="NSSuperview"/>
+ </object>
+ <string key="NSScreenRect">{{0, 0}, {2560, 1578}}</string>
+ <string key="NSMinSize">{300, 122}</string>
+ <string key="NSMaxSize">{500, 224}</string>
+ <string key="NSFrameAutosaveName">Authentication Panel</string>
+ </object>
+ </object>
+ <object class="IBObjectContainer" key="IBDocument.Objects">
+ <object class="NSMutableArray" key="connectionRecords">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <object class="IBConnectionRecord">
+ <object class="IBOutletConnection" key="connection">
+ <string key="label">initialFirstResponder</string>
+ <reference key="source" ref="118512579"/>
+ <reference key="destination" ref="71972597"/>
+ </object>
+ <int key="connectionID">26</int>
+ </object>
+ <object class="IBConnectionRecord">
+ <object class="IBOutletConnection" key="connection">
+ <string key="label">panel</string>
+ <reference key="source" ref="238662661"/>
+ <reference key="destination" ref="118512579"/>
+ </object>
+ <int key="connectionID">27</int>
+ </object>
+ <object class="IBConnectionRecord">
+ <object class="IBOutletConnection" key="connection">
+ <string key="label">username</string>
+ <reference key="source" ref="238662661"/>
+ <reference key="destination" ref="71972597"/>
+ </object>
+ <int key="connectionID">28</int>
+ </object>
+ <object class="IBConnectionRecord">
+ <object class="IBOutletConnection" key="connection">
+ <string key="label">password</string>
+ <reference key="source" ref="238662661"/>
+ <reference key="destination" ref="368270689"/>
+ </object>
+ <int key="connectionID">29</int>
+ </object>
+ <object class="IBConnectionRecord">
+ <object class="IBActionConnection" key="connection">
+ <string key="label">logIn:</string>
+ <reference key="source" ref="238662661"/>
+ <reference key="destination" ref="305175176"/>
+ </object>
+ <int key="connectionID">30</int>
+ </object>
+ <object class="IBConnectionRecord">
+ <object class="IBActionConnection" key="connection">
+ <string key="label">cancel:</string>
+ <reference key="source" ref="238662661"/>
+ <reference key="destination" ref="494193237"/>
+ </object>
+ <int key="connectionID">31</int>
+ </object>
+ <object class="IBConnectionRecord">
+ <object class="IBOutletConnection" key="connection">
+ <string key="label">mainLabel</string>
+ <reference key="source" ref="238662661"/>
+ <reference key="destination" ref="705333610"/>
+ </object>
+ <int key="connectionID">34</int>
+ </object>
+ <object class="IBConnectionRecord">
+ <object class="IBOutletConnection" key="connection">
+ <string key="label">smallLabel</string>
+ <reference key="source" ref="238662661"/>
+ <reference key="destination" ref="199018347"/>
+ </object>
+ <int key="connectionID">35</int>
+ </object>
+ <object class="IBConnectionRecord">
+ <object class="IBOutletConnection" key="connection">
+ <string key="label">nextKeyView</string>
+ <reference key="source" ref="71972597"/>
+ <reference key="destination" ref="368270689"/>
+ </object>
+ <int key="connectionID">36</int>
+ </object>
+ <object class="IBConnectionRecord">
+ <object class="IBOutletConnection" key="connection">
+ <string key="label">imageView</string>
+ <reference key="source" ref="238662661"/>
+ <reference key="destination" ref="285173040"/>
+ </object>
+ <int key="connectionID">38</int>
+ </object>
+ <object class="IBConnectionRecord">
+ <object class="IBOutletConnection" key="connection">
+ <string key="label">remember</string>
+ <reference key="source" ref="238662661"/>
+ <reference key="destination" ref="657854151"/>
+ </object>
+ <int key="connectionID">40</int>
+ </object>
+ <object class="IBConnectionRecord">
+ <object class="IBOutletConnection" key="connection">
+ <string key="label">nextKeyView</string>
+ <reference key="source" ref="368270689"/>
+ <reference key="destination" ref="657854151"/>
+ </object>
+ <int key="connectionID">41</int>
+ </object>
+ <object class="IBConnectionRecord">
+ <object class="IBOutletConnection" key="connection">
+ <string key="label">nextKeyView</string>
+ <reference key="source" ref="657854151"/>
+ <reference key="destination" ref="494193237"/>
+ </object>
+ <int key="connectionID">42</int>
+ </object>
+ <object class="IBConnectionRecord">
+ <object class="IBOutletConnection" key="connection">
+ <string key="label">nextKeyView</string>
+ <reference key="source" ref="494193237"/>
+ <reference key="destination" ref="305175176"/>
+ </object>
+ <int key="connectionID">43</int>
+ </object>
+ <object class="IBConnectionRecord">
+ <object class="IBOutletConnection" key="connection">
+ <string key="label">nextKeyView</string>
+ <reference key="source" ref="305175176"/>
+ <reference key="destination" ref="705333610"/>
+ </object>
+ <int key="connectionID">100042</int>
+ </object>
+ <object class="IBConnectionRecord">
+ <object class="IBOutletConnection" key="connection">
+ <string key="label">nextKeyView</string>
+ <reference key="source" ref="705333610"/>
+ <reference key="destination" ref="199018347"/>
+ </object>
+ <int key="connectionID">100045</int>
+ </object>
+ <object class="IBConnectionRecord">
+ <object class="IBOutletConnection" key="connection">
+ <string key="label">nextKeyView</string>
+ <reference key="source" ref="199018347"/>
+ <reference key="destination" ref="71972597"/>
+ </object>
+ <int key="connectionID">100046</int>
+ </object>
+ </object>
+ <object class="IBMutableOrderedSet" key="objectRecords">
+ <object class="NSArray" key="orderedObjects">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <object class="IBObjectRecord">
+ <int key="objectID">0</int>
+ <object class="NSArray" key="object" id="0">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ </object>
+ <reference key="children" ref="563121920"/>
+ <nil key="parent"/>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">-2</int>
+ <reference key="object" ref="238662661"/>
+ <reference key="parent" ref="0"/>
+ <string type="base64-UTF8" key="objectName">RmlsZSdzIE93bmVyA</string>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">-1</int>
+ <reference key="object" ref="729335755"/>
+ <reference key="parent" ref="0"/>
+ <string key="objectName">First Responder</string>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">-3</int>
+ <reference key="object" ref="239643893"/>
+ <reference key="parent" ref="0"/>
+ <string key="objectName">Application</string>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">5</int>
+ <reference key="object" ref="118512579"/>
+ <object class="NSMutableArray" key="children">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <reference ref="327235052"/>
+ </object>
+ <reference key="parent" ref="0"/>
+ <string key="objectName">Panel</string>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">6</int>
+ <reference key="object" ref="327235052"/>
+ <object class="NSMutableArray" key="children">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <reference ref="705333610"/>
+ <reference ref="199018347"/>
+ <reference ref="305175176"/>
+ <reference ref="494193237"/>
+ <reference ref="71972597"/>
+ <reference ref="368270689"/>
+ <reference ref="477300420"/>
+ <reference ref="833115728"/>
+ <reference ref="285173040"/>
+ <reference ref="657854151"/>
+ </object>
+ <reference key="parent" ref="118512579"/>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">10</int>
+ <reference key="object" ref="705333610"/>
+ <object class="NSMutableArray" key="children">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <reference ref="240004773"/>
+ </object>
+ <reference key="parent" ref="327235052"/>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">11</int>
+ <reference key="object" ref="199018347"/>
+ <object class="NSMutableArray" key="children">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <reference ref="213641065"/>
+ </object>
+ <reference key="parent" ref="327235052"/>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">12</int>
+ <reference key="object" ref="305175176"/>
+ <object class="NSMutableArray" key="children">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <reference ref="568224179"/>
+ </object>
+ <reference key="parent" ref="327235052"/>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">13</int>
+ <reference key="object" ref="494193237"/>
+ <object class="NSMutableArray" key="children">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <reference ref="55525334"/>
+ </object>
+ <reference key="parent" ref="327235052"/>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">14</int>
+ <reference key="object" ref="71972597"/>
+ <object class="NSMutableArray" key="children">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <reference ref="439646453"/>
+ </object>
+ <reference key="parent" ref="327235052"/>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">15</int>
+ <reference key="object" ref="368270689"/>
+ <object class="NSMutableArray" key="children">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <reference ref="743913118"/>
+ </object>
+ <reference key="parent" ref="327235052"/>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">16</int>
+ <reference key="object" ref="477300420"/>
+ <object class="NSMutableArray" key="children">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <reference ref="159596654"/>
+ </object>
+ <reference key="parent" ref="327235052"/>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">17</int>
+ <reference key="object" ref="833115728"/>
+ <object class="NSMutableArray" key="children">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <reference ref="766878508"/>
+ </object>
+ <reference key="parent" ref="327235052"/>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">19</int>
+ <reference key="object" ref="285173040"/>
+ <object class="NSMutableArray" key="children">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <reference ref="375502905"/>
+ </object>
+ <reference key="parent" ref="327235052"/>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">39</int>
+ <reference key="object" ref="657854151"/>
+ <object class="NSMutableArray" key="children">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <reference ref="358614001"/>
+ </object>
+ <reference key="parent" ref="327235052"/>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">100010</int>
+ <reference key="object" ref="240004773"/>
+ <reference key="parent" ref="705333610"/>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">100011</int>
+ <reference key="object" ref="213641065"/>
+ <reference key="parent" ref="199018347"/>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">100012</int>
+ <reference key="object" ref="568224179"/>
+ <reference key="parent" ref="305175176"/>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">100013</int>
+ <reference key="object" ref="55525334"/>
+ <reference key="parent" ref="494193237"/>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">100014</int>
+ <reference key="object" ref="439646453"/>
+ <reference key="parent" ref="71972597"/>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">100015</int>
+ <reference key="object" ref="743913118"/>
+ <reference key="parent" ref="368270689"/>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">100016</int>
+ <reference key="object" ref="159596654"/>
+ <reference key="parent" ref="477300420"/>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">100017</int>
+ <reference key="object" ref="766878508"/>
+ <reference key="parent" ref="833115728"/>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">100019</int>
+ <reference key="object" ref="375502905"/>
+ <reference key="parent" ref="285173040"/>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">100039</int>
+ <reference key="object" ref="358614001"/>
+ <reference key="parent" ref="657854151"/>
+ </object>
+ </object>
+ </object>
+ <object class="NSMutableDictionary" key="flattenedProperties">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <object class="NSMutableArray" key="dict.sortedKeys">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <string>-1.IBPluginDependency</string>
+ <string>-2.IBPluginDependency</string>
+ <string>-3.IBPluginDependency</string>
+ <string>-3.ImportedFromIB2</string>
+ <string>10.IBPluginDependency</string>
+ <string>10.ImportedFromIB2</string>
+ <string>11.IBPluginDependency</string>
+ <string>11.ImportedFromIB2</string>
+ <string>12.IBPluginDependency</string>
+ <string>12.ImportedFromIB2</string>
+ <string>13.IBPluginDependency</string>
+ <string>13.ImportedFromIB2</string>
+ <string>14.IBPluginDependency</string>
+ <string>14.ImportedFromIB2</string>
+ <string>15.CustomClassName</string>
+ <string>15.IBPluginDependency</string>
+ <string>15.ImportedFromIB2</string>
+ <string>16.IBPluginDependency</string>
+ <string>16.ImportedFromIB2</string>
+ <string>17.IBPluginDependency</string>
+ <string>17.ImportedFromIB2</string>
+ <string>19.IBPluginDependency</string>
+ <string>19.ImportedFromIB2</string>
+ <string>39.IBPluginDependency</string>
+ <string>39.ImportedFromIB2</string>
+ <string>5.IBEditorWindowLastContentRect</string>
+ <string>5.IBPluginDependency</string>
+ <string>5.IBWindowTemplateEditedContentRect</string>
+ <string>5.ImportedFromIB2</string>
+ <string>5.windowTemplate.hasMaxSize</string>
+ <string>5.windowTemplate.hasMinSize</string>
+ <string>5.windowTemplate.maxSize</string>
+ <string>5.windowTemplate.minSize</string>
+ <string>6.IBPluginDependency</string>
+ <string>6.ImportedFromIB2</string>
+ </object>
+ <object class="NSMutableArray" key="dict.values">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+ <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+ <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+ <integer value="1" id="5"/>
+ <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+ <reference ref="5"/>
+ <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+ <reference ref="5"/>
+ <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+ <reference ref="5"/>
+ <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+ <reference ref="5"/>
+ <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+ <reference ref="5"/>
+ <string>NSSecureTextField</string>
+ <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+ <reference ref="5"/>
+ <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+ <reference ref="5"/>
+ <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+ <reference ref="5"/>
+ <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+ <reference ref="5"/>
+ <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+ <reference ref="5"/>
+ <string>{{0, 1306}, {424, 239}}</string>
+ <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+ <string>{{0, 1306}, {424, 239}}</string>
+ <reference ref="5"/>
+ <reference ref="5"/>
+ <reference ref="5"/>
+ <string>{500, 202}</string>
+ <string>{300, 100}</string>
+ <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+ <reference ref="5"/>
+ </object>
+ </object>
+ <object class="NSMutableDictionary" key="unlocalizedProperties">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <object class="NSArray" key="dict.sortedKeys">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ </object>
+ <object class="NSMutableArray" key="dict.values">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ </object>
+ </object>
+ <nil key="activeLocalization"/>
+ <object class="NSMutableDictionary" key="localizations">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <object class="NSArray" key="dict.sortedKeys">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ </object>
+ <object class="NSMutableArray" key="dict.values">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ </object>
+ </object>
+ <nil key="sourceID"/>
+ <int key="maxID">100046</int>
+ </object>
+ <object class="IBClassDescriber" key="IBDocument.Classes">
+ <object class="NSMutableArray" key="referencedPartialClassDescriptions">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <object class="IBPartialClassDescription">
+ <string key="className">FirstResponder</string>
+ <string key="superclassName">NSObject</string>
+ <object class="IBClassDescriptionSource" key="sourceIdentifier">
+ <string key="majorKey">IBUserSource</string>
+ <string key="minorKey"/>
+ </object>
+ </object>
+ <object class="IBPartialClassDescription">
+ <string key="className">IFAuthenticationPanel</string>
+ <string key="superclassName">NSObject</string>
+ <object class="NSMutableDictionary" key="actions">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <object class="NSMutableArray" key="dict.sortedKeys">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <string>cancel:</string>
+ <string>logIn:</string>
+ </object>
+ <object class="NSMutableArray" key="dict.values">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <string>id</string>
+ <string>id</string>
+ </object>
+ </object>
+ <object class="NSMutableDictionary" key="outlets">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <object class="NSMutableArray" key="dict.sortedKeys">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <string>imageView</string>
+ <string>mainLabel</string>
+ <string>panel</string>
+ <string>password</string>
+ <string>remember</string>
+ <string>smallLabel</string>
+ <string>username</string>
+ </object>
+ <object class="NSMutableArray" key="dict.values">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <string>id</string>
+ <string>id</string>
+ <string>id</string>
+ <string>id</string>
+ <string>id</string>
+ <string>id</string>
+ <string>id</string>
+ </object>
+ </object>
+ <object class="IBClassDescriptionSource" key="sourceIdentifier">
+ <string key="majorKey">IBUserSource</string>
+ <string key="minorKey"/>
+ </object>
+ </object>
+ <object class="IBPartialClassDescription">
+ <string key="className">NSControl</string>
+ <object class="IBClassDescriptionSource" key="sourceIdentifier">
+ <string key="majorKey">IBProjectSource</string>
+ <string key="minorKey">mac/Misc/WebNSControlExtras.h</string>
+ </object>
+ </object>
+ <object class="IBPartialClassDescription">
+ <string key="className">NSControl</string>
+ <string key="superclassName">NSView</string>
+ <object class="IBClassDescriptionSource" key="sourceIdentifier">
+ <string key="majorKey">IBUserSource</string>
+ <string key="minorKey"/>
+ </object>
+ </object>
+ <object class="IBPartialClassDescription">
+ <string key="className">NSObject</string>
+ <object class="IBClassDescriptionSource" key="sourceIdentifier">
+ <string key="majorKey">IBProjectSource</string>
+ <string key="minorKey">mac/Misc/WebDownload.h</string>
+ </object>
+ </object>
+ <object class="IBPartialClassDescription">
+ <string key="className">NSObject</string>
+ <object class="IBClassDescriptionSource" key="sourceIdentifier">
+ <string key="majorKey">IBProjectSource</string>
+ <string key="minorKey">mac/Misc/WebIconDatabaseDelegate.h</string>
+ </object>
+ </object>
+ <object class="IBPartialClassDescription">
+ <string key="className">NSObject</string>
+ <object class="IBClassDescriptionSource" key="sourceIdentifier">
+ <string key="majorKey">IBProjectSource</string>
+ <string key="minorKey">mac/Misc/WebNSObjectExtras.h</string>
+ </object>
+ </object>
+ <object class="IBPartialClassDescription">
+ <string key="className">NSObject</string>
+ <object class="IBClassDescriptionSource" key="sourceIdentifier">
+ <string key="majorKey">IBProjectSource</string>
+ <string key="minorKey">mac/Plugins/WebJavaPlugIn.h</string>
+ </object>
+ </object>
+ <object class="IBPartialClassDescription">
+ <string key="className">NSObject</string>
+ <object class="IBClassDescriptionSource" key="sourceIdentifier">
+ <string key="majorKey">IBProjectSource</string>
+ <string key="minorKey">mac/Plugins/WebPlugin.h</string>
+ </object>
+ </object>
+ <object class="IBPartialClassDescription">
+ <string key="className">NSObject</string>
+ <object class="IBClassDescriptionSource" key="sourceIdentifier">
+ <string key="majorKey">IBProjectSource</string>
+ <string key="minorKey">mac/Plugins/WebPluginContainer.h</string>
+ </object>
+ </object>
+ <object class="IBPartialClassDescription">
+ <string key="className">NSObject</string>
+ <object class="IBClassDescriptionSource" key="sourceIdentifier">
+ <string key="majorKey">IBProjectSource</string>
+ <string key="minorKey">mac/Plugins/WebPluginContainerPrivate.h</string>
+ </object>
+ </object>
+ <object class="IBPartialClassDescription">
+ <string key="className">NSObject</string>
+ <object class="IBClassDescriptionSource" key="sourceIdentifier">
+ <string key="majorKey">IBProjectSource</string>
+ <string key="minorKey">mac/Plugins/WebPluginDatabase.h</string>
+ </object>
+ </object>
+ <object class="IBPartialClassDescription">
+ <string key="className">NSObject</string>
+ <object class="IBClassDescriptionSource" key="sourceIdentifier">
+ <string key="majorKey">IBProjectSource</string>
+ <string key="minorKey">mac/Plugins/WebPluginPrivate.h</string>
+ </object>
+ </object>
+ <object class="IBPartialClassDescription">
+ <string key="className">NSObject</string>
+ <object class="IBClassDescriptionSource" key="sourceIdentifier">
+ <string key="majorKey">IBProjectSource</string>
+ <string key="minorKey">mac/WebInspector/WebNodeHighlight.h</string>
+ </object>
+ </object>
+ <object class="IBPartialClassDescription">
+ <string key="className">NSObject</string>
+ <object class="IBClassDescriptionSource" key="sourceIdentifier">
+ <string key="majorKey">IBProjectSource</string>
+ <string key="minorKey">mac/WebView/WebEditingDelegate.h</string>
+ </object>
+ </object>
+ <object class="IBPartialClassDescription">
+ <string key="className">NSObject</string>
+ <object class="IBClassDescriptionSource" key="sourceIdentifier">
+ <string key="majorKey">IBProjectSource</string>
+ <string key="minorKey">mac/WebView/WebEditingDelegatePrivate.h</string>
+ </object>
+ </object>
+ <object class="IBPartialClassDescription">
+ <string key="className">NSObject</string>
+ <object class="IBClassDescriptionSource" key="sourceIdentifier">
+ <string key="majorKey">IBProjectSource</string>
+ <string key="minorKey">mac/WebView/WebFrameInternal.h</string>
+ </object>
+ </object>
+ <object class="IBPartialClassDescription">
+ <string key="className">NSObject</string>
+ <object class="IBClassDescriptionSource" key="sourceIdentifier">
+ <string key="majorKey">IBProjectSource</string>
+ <string key="minorKey">mac/WebView/WebFrameLoadDelegate.h</string>
+ </object>
+ </object>
+ <object class="IBPartialClassDescription">
+ <string key="className">NSObject</string>
+ <object class="IBClassDescriptionSource" key="sourceIdentifier">
+ <string key="majorKey">IBProjectSource</string>
+ <string key="minorKey">mac/WebView/WebPolicyDelegate.h</string>
+ </object>
+ </object>
+ <object class="IBPartialClassDescription">
+ <string key="className">NSObject</string>
+ <object class="IBClassDescriptionSource" key="sourceIdentifier">
+ <string key="majorKey">IBProjectSource</string>
+ <string key="minorKey">mac/WebView/WebPolicyDelegatePrivate.h</string>
+ </object>
+ </object>
+ <object class="IBPartialClassDescription">
+ <string key="className">NSObject</string>
+ <object class="IBClassDescriptionSource" key="sourceIdentifier">
+ <string key="majorKey">IBProjectSource</string>
+ <string key="minorKey">mac/WebView/WebResourceLoadDelegate.h</string>
+ </object>
+ </object>
+ <object class="IBPartialClassDescription">
+ <string key="className">NSObject</string>
+ <object class="IBClassDescriptionSource" key="sourceIdentifier">
+ <string key="majorKey">IBProjectSource</string>
+ <string key="minorKey">mac/WebView/WebResourceLoadDelegatePrivate.h</string>
+ </object>
+ </object>
+ <object class="IBPartialClassDescription">
+ <string key="className">NSObject</string>
+ <object class="IBClassDescriptionSource" key="sourceIdentifier">
+ <string key="majorKey">IBProjectSource</string>
+ <string key="minorKey">mac/WebView/WebScriptDebugDelegate.h</string>
+ </object>
+ </object>
+ <object class="IBPartialClassDescription">
+ <string key="className">NSObject</string>
+ <object class="NSMutableDictionary" key="actions">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <object class="NSMutableArray" key="dict.sortedKeys">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <string>webViewClose:</string>
+ <string>webViewFocus:</string>
+ <string>webViewRunModal:</string>
+ <string>webViewShow:</string>
+ <string>webViewUnfocus:</string>
+ </object>
+ <object class="NSMutableArray" key="dict.values">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <string>WebView</string>
+ <string>WebView</string>
+ <string>WebView</string>
+ <string>WebView</string>
+ <string>WebView</string>
+ </object>
+ </object>
+ <object class="IBClassDescriptionSource" key="sourceIdentifier">
+ <string key="majorKey">IBProjectSource</string>
+ <string key="minorKey">mac/WebView/WebUIDelegate.h</string>
+ </object>
+ </object>
+ <object class="IBPartialClassDescription">
+ <string key="className">NSObject</string>
+ <object class="IBClassDescriptionSource" key="sourceIdentifier">
+ <string key="majorKey">IBProjectSource</string>
+ <string key="minorKey">mac/WebView/WebUIDelegatePrivate.h</string>
+ </object>
+ </object>
+ <object class="IBPartialClassDescription">
+ <string key="className">NSObject</string>
+ <object class="IBClassDescriptionSource" key="sourceIdentifier" id="153972132">
+ <string key="majorKey">IBProjectSource</string>
+ <string key="minorKey">mac/WebView/WebViewPrivate.h</string>
+ </object>
+ </object>
+ <object class="IBPartialClassDescription">
+ <string key="className">NSObject</string>
+ <object class="IBClassDescriptionSource" key="sourceIdentifier">
+ <string key="majorKey">IBUserSource</string>
+ <string key="minorKey"/>
+ </object>
+ </object>
+ <object class="IBPartialClassDescription">
+ <string key="className">NSView</string>
+ <object class="IBClassDescriptionSource" key="sourceIdentifier">
+ <string key="majorKey">IBProjectSource</string>
+ <string key="minorKey">mac/Misc/WebNSViewExtras.h</string>
+ </object>
+ </object>
+ <object class="IBPartialClassDescription">
+ <string key="className">NSView</string>
+ <string key="superclassName">NSResponder</string>
+ <object class="IBClassDescriptionSource" key="sourceIdentifier">
+ <string key="majorKey">IBUserSource</string>
+ <string key="minorKey"/>
+ </object>
+ </object>
+ <object class="IBPartialClassDescription">
+ <string key="className">NSWindow</string>
+ <object class="IBClassDescriptionSource" key="sourceIdentifier">
+ <string key="majorKey">IBProjectSource</string>
+ <string key="minorKey">mac/Misc/WebNSWindowExtras.h</string>
+ </object>
+ </object>
+ <object class="IBPartialClassDescription">
+ <string key="className">NSWindow</string>
+ <string key="superclassName">NSResponder</string>
+ <object class="IBClassDescriptionSource" key="sourceIdentifier">
+ <string key="majorKey">IBUserSource</string>
+ <string key="minorKey"/>
+ </object>
+ </object>
+ <object class="IBPartialClassDescription">
+ <string key="className">NonBlockingPanel</string>
+ <string key="superclassName">NSPanel</string>
+ <object class="IBClassDescriptionSource" key="sourceIdentifier">
+ <string key="majorKey">IBProjectSource</string>
+ <string key="minorKey">mac/Panels/WebAuthenticationPanel.h</string>
+ </object>
+ </object>
+ <object class="IBPartialClassDescription">
+ <string key="className">NonBlockingPanel</string>
+ <string key="superclassName">NSPanel</string>
+ <object class="IBClassDescriptionSource" key="sourceIdentifier">
+ <string key="majorKey">IBUserSource</string>
+ <string key="minorKey"/>
+ </object>
+ </object>
+ <object class="IBPartialClassDescription">
+ <string key="className">WebView</string>
+ <string key="superclassName">NSView</string>
+ <object class="NSMutableDictionary" key="actions">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <object class="NSMutableArray" key="dict.sortedKeys">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <string>alignCenter:</string>
+ <string>alignJustified:</string>
+ <string>alignLeft:</string>
+ <string>alignRight:</string>
+ <string>changeAttributes:</string>
+ <string>changeColor:</string>
+ <string>changeDocumentBackgroundColor:</string>
+ <string>changeFont:</string>
+ <string>checkSpelling:</string>
+ <string>copy:</string>
+ <string>copyFont:</string>
+ <string>cut:</string>
+ <string>delete:</string>
+ <string>goBack:</string>
+ <string>goForward:</string>
+ <string>makeTextLarger:</string>
+ <string>makeTextSmaller:</string>
+ <string>makeTextStandardSize:</string>
+ <string>moveToBeginningOfSentence:</string>
+ <string>moveToBeginningOfSentenceAndModifySelection:</string>
+ <string>moveToEndOfSentence:</string>
+ <string>moveToEndOfSentenceAndModifySelection:</string>
+ <string>paste:</string>
+ <string>pasteAsPlainText:</string>
+ <string>pasteAsRichText:</string>
+ <string>pasteFont:</string>
+ <string>performFindPanelAction:</string>
+ <string>reload:</string>
+ <string>reloadFromOrigin:</string>
+ <string>selectSentence:</string>
+ <string>showGuessPanel:</string>
+ <string>startSpeaking:</string>
+ <string>stopLoading:</string>
+ <string>stopSpeaking:</string>
+ <string>takeStringURLFrom:</string>
+ <string>toggleContinuousSpellChecking:</string>
+ <string>toggleSmartInsertDelete:</string>
+ </object>
+ <object class="NSMutableArray" key="dict.values">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <string>id</string>
+ <string>id</string>
+ <string>id</string>
+ <string>id</string>
+ <string>id</string>
+ <string>id</string>
+ <string>id</string>
+ <string>id</string>
+ <string>id</string>
+ <string>id</string>
+ <string>id</string>
+ <string>id</string>
+ <string>id</string>
+ <string>id</string>
+ <string>id</string>
+ <string>id</string>
+ <string>id</string>
+ <string>id</string>
+ <string>id</string>
+ <string>id</string>
+ <string>id</string>
+ <string>id</string>
+ <string>id</string>
+ <string>id</string>
+ <string>id</string>
+ <string>id</string>
+ <string>id</string>
+ <string>id</string>
+ <string>id</string>
+ <string>id</string>
+ <string>id</string>
+ <string>id</string>
+ <string>id</string>
+ <string>id</string>
+ <string>id</string>
+ <string>id</string>
+ <string>id</string>
+ </object>
+ </object>
+ <object class="IBClassDescriptionSource" key="sourceIdentifier">
+ <string key="majorKey">IBProjectSource</string>
+ <string key="minorKey">mac/WebView/WebView.h</string>
+ </object>
+ </object>
+ <object class="IBPartialClassDescription">
+ <string key="className">WebView</string>
+ <object class="NSMutableDictionary" key="actions">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <object class="NSMutableArray" key="dict.sortedKeys">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <string>_openFrameInNewWindowFromMenu:</string>
+ <string>_searchWithGoogleFromMenu:</string>
+ <string>_searchWithSpotlightFromMenu:</string>
+ </object>
+ <object class="NSMutableArray" key="dict.values">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <string>NSMenuItem</string>
+ <string>id</string>
+ <string>id</string>
+ </object>
+ </object>
+ <object class="IBClassDescriptionSource" key="sourceIdentifier">
+ <string key="majorKey">IBProjectSource</string>
+ <string key="minorKey">mac/WebView/WebViewInternal.h</string>
+ </object>
+ </object>
+ <object class="IBPartialClassDescription">
+ <string key="className">WebView</string>
+ <object class="NSMutableDictionary" key="actions">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <object class="NSMutableArray" key="dict.sortedKeys">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <string>outdent:</string>
+ <string>resetPageZoom:</string>
+ <string>toggleGrammarChecking:</string>
+ <string>zoomPageIn:</string>
+ <string>zoomPageOut:</string>
+ </object>
+ <object class="NSMutableArray" key="dict.values">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <string>id</string>
+ <string>id</string>
+ <string>id</string>
+ <string>id</string>
+ <string>id</string>
+ </object>
+ </object>
+ <reference key="sourceIdentifier" ref="153972132"/>
+ </object>
+ <object class="IBPartialClassDescription">
+ <string key="className">WebView</string>
+ <string key="superclassName">NSView</string>
+ <object class="IBClassDescriptionSource" key="sourceIdentifier">
+ <string key="majorKey">IBUserSource</string>
+ <string key="minorKey"/>
+ </object>
+ </object>
+ </object>
+ </object>
+ <int key="IBDocument.localizationMode">0</int>
+ <string key="IBDocument.LastKnownRelativeProjectPath">../../../WebKit.xcodeproj</string>
+ <int key="IBDocument.defaultPropertyAccessControl">3</int>
+ </data>
+</archive>
diff --git a/WebKit/mac/Panels/English.lproj/WebAuthenticationPanel.nib/info.nib b/WebKit/mac/Panels/English.lproj/WebAuthenticationPanel.nib/info.nib
deleted file mode 100644
index eb229b0..0000000
--- a/WebKit/mac/Panels/English.lproj/WebAuthenticationPanel.nib/info.nib
+++ /dev/null
@@ -1,16 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
-<plist version="1.0">
-<dict>
- <key>IBDocumentLocation</key>
- <string>773 144 356 240 0 0 1280 778 </string>
- <key>IBFramework Version</key>
- <string>446.1</string>
- <key>IBOpenObjects</key>
- <array>
- <integer>5</integer>
- </array>
- <key>IBSystem Version</key>
- <string>8N1106</string>
-</dict>
-</plist>
diff --git a/WebKit/mac/Panels/English.lproj/WebAuthenticationPanel.nib/keyedobjects.nib b/WebKit/mac/Panels/English.lproj/WebAuthenticationPanel.nib/keyedobjects.nib
new file mode 100644
index 0000000..207cdb3
--- /dev/null
+++ b/WebKit/mac/Panels/English.lproj/WebAuthenticationPanel.nib/keyedobjects.nib
Binary files differ
diff --git a/WebKit/mac/Panels/English.lproj/WebAuthenticationPanel.nib/objects.nib b/WebKit/mac/Panels/English.lproj/WebAuthenticationPanel.nib/objects.nib
deleted file mode 100644
index 59196ff..0000000
--- a/WebKit/mac/Panels/English.lproj/WebAuthenticationPanel.nib/objects.nib
+++ /dev/null
Binary files differ
diff --git a/WebKit/mac/Panels/WebAuthenticationPanel.m b/WebKit/mac/Panels/WebAuthenticationPanel.m
index 4e17536..e0efef7 100644
--- a/WebKit/mac/Panels/WebAuthenticationPanel.m
+++ b/WebKit/mac/Panels/WebAuthenticationPanel.m
@@ -31,6 +31,7 @@
#import <Foundation/NSURLAuthenticationChallenge.h>
#import <Foundation/NSURLProtectionSpace.h>
#import <Foundation/NSURLCredential.h>
+#import <WebKit/WebKitNSStringExtras.h>
#import <WebKit/WebLocalizableStrings.h>
#import <WebKit/WebNSURLExtras.h>
#import <wtf/Assertions.h>
@@ -132,21 +133,21 @@
if ([chall previousFailureCount] == 0) {
if ([space isProxy]) {
- message = [NSString stringWithFormat:UI_STRING("To view this page, you need to log in to the %@ proxy server %@.",
+ message = [NSString stringWithFormat:UI_STRING("To view this page, you must log in to the %@ proxy server %@.",
"prompt string in authentication panel"),
[space proxyType], host];
} else {
- message = [NSString stringWithFormat:UI_STRING("To view this page, you need to log in to area “%@” on %@.",
+ message = [NSString stringWithFormat:UI_STRING("To view this page, you must log in to area “%@” on %@.",
"prompt string in authentication panel"),
realm, host];
}
} else {
if ([space isProxy]) {
- message = [NSString stringWithFormat:UI_STRING("The name or password entered for the %@ proxy server %@ was incorrect. Please try again.",
+ message = [NSString stringWithFormat:UI_STRING("The user name or password you entered for the %@ proxy server %@ was incorrect. Make sure you’re entering them correctly, and then try again.",
"prompt string in authentication panel"),
[space proxyType], host];
} else {
- message = [NSString stringWithFormat:UI_STRING("The name or password entered for area “%@” on %@ was incorrect. Please try again.",
+ message = [NSString stringWithFormat:UI_STRING("The user name or password you entered for area “%@” on %@ was incorrect. Make sure you’re entering them correctly, and then try again.",
"prompt string in authentication panel"),
realm, host];
}
@@ -155,13 +156,15 @@
[mainLabel setStringValue:message];
[mainLabel sizeToFitAndAdjustWindowHeight];
- if ([space receivesCredentialSecurely]) {
+ if ([space receivesCredentialSecurely] || [[space protocol] _webkit_isCaseInsensitiveEqualToString:@"https"]) {
[smallLabel setStringValue:
- UI_STRING("Your log-in information will be sent securely.",
+ UI_STRING("Your login information will be sent securely.",
"message in authentication panel")];
} else {
+ // Use this scary-sounding phrase only when using basic auth with non-https servers. In this case the password
+ // could be sniffed by intercepting the network traffic.
[smallLabel setStringValue:
- UI_STRING("Your password will be sent in the clear.",
+ UI_STRING("Your password will be sent unencrypted.",
"message in authentication panel")];
}
diff --git a/WebKit/mac/Plugins/WebBaseNetscapePluginStream.h b/WebKit/mac/Plugins/WebBaseNetscapePluginStream.h
index c2e8a21..a28793a 100644
--- a/WebKit/mac/Plugins/WebBaseNetscapePluginStream.h
+++ b/WebKit/mac/Plugins/WebBaseNetscapePluginStream.h
@@ -32,20 +32,19 @@
#import <WebCore/Timer.h>
#import <WebCore/NetscapePlugInStreamLoader.h>
#import <WebKit/npfunctions.h>
-#import <WebKit/WebPlugInStreamLoaderDelegate.h>
#import <wtf/PassRefPtr.h>
#import <wtf/RefCounted.h>
#import <wtf/RefPtr.h>
#import <wtf/RetainPtr.h>
-#import "WebBaseNetscapePluginView.h"
+#import "WebNetscapePluginView.h"
namespace WebCore {
class FrameLoader;
class NetscapePlugInStreamLoader;
}
-@class WebBaseNetscapePluginView;
+@class WebNetscapePluginView;
@class NSURLResponse;
class WebNetscapePluginStream : public RefCounted<WebNetscapePluginStream>
@@ -113,7 +112,7 @@ private:
BOOL m_sendNotification;
void *m_notifyData;
char *m_headers;
- RetainPtr<WebBaseNetscapePluginView> m_pluginView;
+ RetainPtr<WebNetscapePluginView> m_pluginView;
NPReason m_reason;
bool m_isTerminated;
bool m_newStreamSuccessful;
diff --git a/WebKit/mac/Plugins/WebBaseNetscapePluginStream.mm b/WebKit/mac/Plugins/WebBaseNetscapePluginStream.mm
index 246a3ca..a29be2d 100644
--- a/WebKit/mac/Plugins/WebBaseNetscapePluginStream.mm
+++ b/WebKit/mac/Plugins/WebBaseNetscapePluginStream.mm
@@ -29,7 +29,7 @@
#if ENABLE(NETSCAPE_PLUGIN_API)
#import "WebBaseNetscapePluginStream.h"
-#import "WebBaseNetscapePluginView.h"
+#import "WebNetscapePluginView.h"
#import "WebFrameInternal.h"
#import "WebKitErrorsPrivate.h"
#import "WebKitLogging.h"
@@ -45,6 +45,7 @@
#import <WebCore/WebCoreObjCExtras.h>
#import <WebKitSystemInterface.h>
#import <wtf/HashMap.h>
+#import <wtf/StdLibExtras.h>
using namespace WebCore;
@@ -55,7 +56,7 @@ static NSString *CarbonPathFromPOSIXPath(NSString *posixPath);
typedef HashMap<NPStream*, NPP> StreamMap;
static StreamMap& streams()
{
- static StreamMap staticStreams;
+ DEFINE_STATIC_LOCAL(StreamMap, staticStreams, ());
return staticStreams;
}
@@ -134,7 +135,7 @@ WebNetscapePluginStream::WebNetscapePluginStream(NSURLRequest *request, NPP plug
{
memset(&m_stream, 0, sizeof(NPStream));
- WebBaseNetscapePluginView *view = (WebBaseNetscapePluginView *)plugin->ndata;
+ WebNetscapePluginView *view = (WebNetscapePluginView *)plugin->ndata;
// This check has already been done by the plug-in view.
ASSERT(FrameLoader::canLoad([request URL], String(), core([view webFrame])->document()));
@@ -148,9 +149,6 @@ WebNetscapePluginStream::WebNetscapePluginStream(NSURLRequest *request, NPP plug
if (core([view webFrame])->loader()->shouldHideReferrer([request URL], core([view webFrame])->loader()->outgoingReferrer()))
[m_request.get() _web_setHTTPReferrer:nil];
-
- m_loader = NetscapePlugInStreamLoader::create(core([view webFrame]), this);
- m_loader->setShouldBufferData(false);
}
WebNetscapePluginStream::~WebNetscapePluginStream()
@@ -173,13 +171,13 @@ void WebNetscapePluginStream::setPlugin(NPP plugin)
{
if (plugin) {
m_plugin = plugin;
- m_pluginView = static_cast<WebBaseNetscapePluginView *>(m_plugin->ndata);
+ m_pluginView = static_cast<WebNetscapePluginView *>(m_plugin->ndata);
WebNetscapePluginPackage *pluginPackage = [m_pluginView.get() pluginPackage];
m_pluginFuncs = [pluginPackage pluginFuncs];
} else {
- WebBaseNetscapePluginView *view = m_pluginView.get();
+ WebNetscapePluginView *view = m_pluginView.get();
m_plugin = 0;
m_pluginFuncs = 0;
@@ -256,6 +254,10 @@ void WebNetscapePluginStream::start()
{
ASSERT(m_request);
ASSERT(!m_frameLoader);
+ ASSERT(!m_loader);
+
+ m_loader = NetscapePlugInStreamLoader::create(core([m_pluginView.get() webFrame]), this);
+ m_loader->setShouldBufferData(false);
m_loader->documentLoader()->addPlugInStreamLoader(m_loader.get());
m_loader->load(m_request.get());
@@ -434,6 +436,8 @@ void WebNetscapePluginStream::destroyStreamWithReason(NPReason reason)
// There is more data to be streamed, don't destroy the stream now.
return;
}
+
+ RefPtr<WebNetscapePluginStream> protect(this);
destroyStream();
ASSERT(!m_stream.ndata);
}
diff --git a/WebKit/mac/Plugins/WebBaseNetscapePluginView.h b/WebKit/mac/Plugins/WebBaseNetscapePluginView.h
index 909196b..b2ea2b1 100644
--- a/WebKit/mac/Plugins/WebBaseNetscapePluginView.h
+++ b/WebKit/mac/Plugins/WebBaseNetscapePluginView.h
@@ -29,118 +29,37 @@
#if ENABLE(NETSCAPE_PLUGIN_API)
#import <Cocoa/Cocoa.h>
-#import <WebKit/npfunctions.h>
-#import <WebKit/npapi.h>
-#import <WebKit/WebBasePluginPackage.h>
-#import <wtf/HashMap.h>
-#import <wtf/HashSet.h>
+#import "WebNetscapePluginPackage.h"
+
+#import <wtf/RetainPtr.h>
@class DOMElement;
@class WebDataSource;
@class WebFrame;
-@class WebNetscapePluginPackage;
@class WebView;
-class PluginTimer;
-class WebNetscapePluginStream;
-class WebNetscapePluginEventHandler;
-
-typedef union PluginPort {
-#ifndef NP_NO_QUICKDRAW
- NP_Port qdPort;
-#endif
- NP_CGContext cgPort;
-} PluginPort;
-
-typedef struct _NPPluginTextInputFuncs NPPluginTextInputFuncs;
-
-// Because the Adobe 7.x Acrobat plug-in has a hard coded check for a view named
-// "WebNetscapePluginDocumentView", this class must retain the old name in order
-// for the plug-in to function correctly. (rdar://problem/4699455)
-#define WebBaseNetscapePluginView WebNetscapePluginDocumentView
-
-@interface WebBaseNetscapePluginView : NSView <WebPluginManualLoader, NSTextInput>
+@interface WebBaseNetscapePluginView : NSView
{
- WebNetscapePluginPackage *pluginPackage;
+ RetainPtr<WebNetscapePluginPackage> _pluginPackage;
- NSURL *sourceURL;
WebFrame *_webFrame;
- BOOL _loadManually;
- RefPtr<WebNetscapePluginStream> _manualStream;
-#ifndef BUILDING_ON_TIGER
- CALayer *_layer;
-#endif
- unsigned _dataLengthReceived;
- NSError *_error;
-
- int mode;
-
- unsigned argsCount;
- char **cAttributes;
- char **cValues;
-
- NPP plugin;
- NPWindow window;
- NPWindow lastSetWindow;
- PluginPort nPort;
- PluginPort lastSetPort;
- NPDrawingModel drawingModel;
- NPEventModel eventModel;
+ int _mode;
-
-#ifndef NP_NO_QUICKDRAW
- // This is only valid when drawingModel is NPDrawingModelQuickDraw
- GWorldPtr offscreenGWorld;
-#endif
-
- WebNetscapePluginEventHandler *eventHandler;
-
- BOOL isStarted;
- BOOL inSetWindow;
- BOOL hasFocus;
- BOOL isTransparent;
- BOOL isCompletelyObscured;
- BOOL shouldStopSoon;
-
- BOOL shouldFireTimers;
- uint32 currentTimerID;
- HashMap<uint32, PluginTimer*>* timers;
-
- unsigned pluginFunctionCallDepth;
-
- DOMElement *element;
-
- int32 specifiedHeight;
- int32 specifiedWidth;
-
- NSString *MIMEType;
- NSURL *baseURL;
- NSTrackingRectTag trackingTag;
-
- HashSet<RefPtr<WebNetscapePluginStream> > streams;
- NSMutableDictionary *pendingFrameLoads;
+ BOOL _loadManually;
+ BOOL _shouldFireTimers;
+ BOOL _isStarted;
+ BOOL _hasFocus;
+ BOOL _isCompletelyObscured;
- NPPluginTextInputFuncs *textInputFuncs;
+ RetainPtr<DOMElement> _element;
+ RetainPtr<NSString> _MIMEType;
+ RetainPtr<NSURL> _baseURL;
+ RetainPtr<NSURL> _sourceURL;
- NPP_NewProcPtr NPP_New;
- NPP_DestroyProcPtr NPP_Destroy;
- NPP_SetWindowProcPtr NPP_SetWindow;
- NPP_NewStreamProcPtr NPP_NewStream;
- NPP_DestroyStreamProcPtr NPP_DestroyStream;
- NPP_StreamAsFileProcPtr NPP_StreamAsFile;
- NPP_WriteReadyProcPtr NPP_WriteReady;
- NPP_WriteProcPtr NPP_Write;
- NPP_PrintProcPtr NPP_Print;
- NPP_HandleEventProcPtr NPP_HandleEvent;
- NPP_URLNotifyProcPtr NPP_URLNotify;
- NPP_GetValueProcPtr NPP_GetValue;
- NPP_SetValueProcPtr NPP_SetValue;
+ NSTrackingRectTag _trackingTag;
}
-+ (WebBaseNetscapePluginView *)currentPluginView;
-
-
- (id)initWithFrame:(NSRect)r
pluginPackage:(WebNetscapePluginPackage *)thePluginPackage
URL:(NSURL *)URL
@@ -151,74 +70,31 @@ typedef struct _NPPluginTextInputFuncs NPPluginTextInputFuncs;
loadManually:(BOOL)loadManually
DOMElement:(DOMElement *)anElement;
+- (WebNetscapePluginPackage *)pluginPackage;
-- (BOOL)start;
-- (BOOL)isStarted;
-- (void)stop;
-- (void)stopTimers;
-- (void)restartTimers;
+- (NSMutableURLRequest *)requestWithURLCString:(const char *)URLCString;
+
+// Subclasses must override these.
+- (void)handleMouseMoved:(NSEvent *)event;
+- (void)setAttributeKeys:(NSArray *)keys andValues:(NSArray *)values;
+- (void)focusChanged;
- (WebFrame *)webFrame;
- (WebDataSource *)dataSource;
- (WebView *)webView;
- (NSWindow *)currentWindow;
-- (NPP)plugin;
+- (void)removeTrackingRect;
+- (void)resetTrackingRect;
-- (WebNetscapePluginPackage *)pluginPackage;
-- (void)setPluginPackage:(WebNetscapePluginPackage *)thePluginPackage;
-- (void)setMIMEType:(NSString *)theMIMEType;
-- (void)setBaseURL:(NSURL *)theBaseURL;
-- (void)setAttributeKeys:(NSArray *)keys andValues:(NSArray *)values;
-- (void)setMode:(int)theMode;
-- (void)viewWillMoveToHostWindow:(NSWindow *)hostWindow;
-- (void)viewDidMoveToHostWindow;
-- (void)disconnectStream:(WebNetscapePluginStream*)stream;
-
-// Returns the NPObject that represents the plugin interface.
-// The return value is expected to be retained.
-- (NPObject *)createPluginScriptableObject;
-
-// -willCallPlugInFunction must be called before calling any of the NPP_* functions for this view's plugin.
-// This is necessary to ensure that plug-ins are not destroyed while WebKit calls into them. Some plug-ins (Flash
-// at least) are written with the assumption that nothing they do in their plug-in functions can cause NPP_Destroy()
-// to be called. Unfortunately, this is not true, especially if the plug-in uses NPN_Invoke() to execute a
-// document.write(), which clears the document and destroys the plug-in.
-// See <rdar://problem/4480737>.
-- (void)willCallPlugInFunction;
-
-// -didCallPlugInFunction should be called after returning from a plug-in function. It should be called exactly
-// once for every call to -willCallPlugInFunction.
-// See <rdar://problem/4480737>.
-- (void)didCallPlugInFunction;
-
-- (void)handleMouseMoved:(NSEvent *)event;
-
-@end
+- (void)stopTimers;
+- (void)startTimers;
+- (void)restartTimers;
-@interface WebBaseNetscapePluginView (WebInternal)
-- (BOOL)sendEvent:(void*)event isDrawRect:(BOOL)eventIsDrawRect;
-- (NPEventModel)eventModel;
-
-- (NPError)loadRequest:(NSURLRequest *)request inTarget:(NSString *)target withNotifyData:(void *)notifyData sendNotification:(BOOL)sendNotification;
-- (NPError)getURLNotify:(const char *)URL target:(const char *)target notifyData:(void *)notifyData;
-- (NPError)getURL:(const char *)URL target:(const char *)target;
-- (NPError)postURLNotify:(const char *)URL target:(const char *)target len:(UInt32)len buf:(const char *)buf file:(NPBool)file notifyData:(void *)notifyData;
-- (NPError)postURL:(const char *)URL target:(const char *)target len:(UInt32)len buf:(const char *)buf file:(NPBool)file;
-- (NPError)newStream:(NPMIMEType)type target:(const char *)target stream:(NPStream**)stream;
-- (NPError)write:(NPStream*)stream len:(SInt32)len buffer:(void *)buffer;
-- (NPError)destroyStream:(NPStream*)stream reason:(NPReason)reason;
-- (void)status:(const char *)message;
-- (const char *)userAgent;
-- (void)invalidateRect:(NPRect *)invalidRect;
-- (void)invalidateRegion:(NPRegion)invalidateRegion;
-- (void)forceRedraw;
-- (NPError)getVariable:(NPNVariable)variable value:(void *)value;
-- (NPError)setVariable:(NPPVariable)variable value:(void *)value;
-- (uint32)scheduleTimerWithInterval:(uint32)interval repeat:(NPBool)repeat timerFunc:(void (*)(NPP npp, uint32 timerID))timerFunc;
-- (void)unscheduleTimer:(uint32)timerID;
-- (NPError)popUpContextMenu:(NPMenu *)menu;
+- (void)stop;
+- (void)addWindowObservers;
+- (void)removeWindowObservers;
@end
#endif
diff --git a/WebKit/mac/Plugins/WebBaseNetscapePluginView.mm b/WebKit/mac/Plugins/WebBaseNetscapePluginView.mm
index 2097673..a2a8b50 100644
--- a/WebKit/mac/Plugins/WebBaseNetscapePluginView.mm
+++ b/WebKit/mac/Plugins/WebBaseNetscapePluginView.mm
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2005, 2006, 2007 Apple Inc. All rights reserved.
+ * Copyright (C) 2005, 2006, 2007, 2008 Apple Inc. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
@@ -30,1100 +30,250 @@
#import "WebBaseNetscapePluginView.h"
-#import "WebDataSourceInternal.h"
-#import "WebDefaultUIDelegate.h"
-#import "WebFrameInternal.h"
-#import "WebFrameView.h"
-#import "WebGraphicsExtras.h"
+#import "WebFrameInternal.h"
#import "WebKitLogging.h"
#import "WebKitNSStringExtras.h"
#import "WebKitSystemInterface.h"
-#import "WebNSDataExtras.h"
-#import "WebNSDictionaryExtras.h"
-#import "WebNSObjectExtras.h"
#import "WebNSURLExtras.h"
#import "WebNSURLRequestExtras.h"
-#import "WebNSViewExtras.h"
-#import "WebNetscapePluginPackage.h"
-#import "WebBaseNetscapePluginStream.h"
-#import "WebNetscapePluginEventHandler.h"
-#import "WebNullPluginView.h"
-#import "WebPreferences.h"
+#import "WebView.h"
#import "WebViewInternal.h"
-#import "WebUIDelegatePrivate.h"
-#import <Carbon/Carbon.h>
-#import <runtime/JSLock.h>
-#import <WebCore/npruntime_impl.h>
+
+#import <WebCore/WebCoreObjCExtras.h>
#import <WebCore/Document.h>
-#import <WebCore/DocumentLoader.h>
#import <WebCore/Element.h>
-#import <WebCore/Frame.h>
-#import <WebCore/FrameLoader.h>
-#import <WebCore/FrameTree.h>
-#import <WebCore/Page.h>
-#import <WebCore/PluginMainThreadScheduler.h>
-#import <WebCore/ScriptController.h>
-#import <WebCore/SoftLinking.h>
-#import <WebCore/WebCoreObjCExtras.h>
-#import <WebKit/nptextinput.h>
+#import <WebCore/Frame.h>
+#import <WebCore/FrameLoader.h>
+#import <WebCore/Page.h>
#import <WebKit/DOMPrivate.h>
-#import <WebKit/WebUIDelegate.h>
+#import <runtime/InitializeThreading.h>
#import <wtf/Assertions.h>
-#import <objc/objc-runtime.h>
-
-using namespace WebCore;
#define LoginWindowDidSwitchFromUserNotification @"WebLoginWindowDidSwitchFromUserNotification"
#define LoginWindowDidSwitchToUserNotification @"WebLoginWindowDidSwitchToUserNotification"
-static inline bool isDrawingModelQuickDraw(NPDrawingModel drawingModel)
-{
-#ifndef NP_NO_QUICKDRAW
- return drawingModel == NPDrawingModelQuickDraw;
-#else
- return false;
-#endif
-};
-
-@interface WebBaseNetscapePluginView (Internal)
-- (void)_viewHasMoved;
-- (NPError)_createPlugin;
-- (void)_destroyPlugin;
-- (NSBitmapImageRep *)_printedPluginBitmap;
-- (void)_redeliverStream;
-@end
-
-static WebBaseNetscapePluginView *currentPluginView = nil;
-
-typedef struct OpaquePortState* PortState;
-
-static const double ThrottledTimerInterval = 0.25;
-
-class PluginTimer : public TimerBase {
-public:
- typedef void (*TimerFunc)(NPP npp, uint32 timerID);
-
- PluginTimer(NPP npp, uint32 timerID, uint32 interval, NPBool repeat, TimerFunc timerFunc)
- : m_npp(npp)
- , m_timerID(timerID)
- , m_interval(interval)
- , m_repeat(repeat)
- , m_timerFunc(timerFunc)
- {
- }
-
- void start(bool throttle)
- {
- ASSERT(!isActive());
-
- double timeInterval = throttle ? ThrottledTimerInterval : m_interval / 1000.0;
- if (m_repeat)
- startRepeating(timeInterval);
- else
- startOneShot(timeInterval);
- }
-
-private:
- virtual void fired()
- {
- m_timerFunc(m_npp, m_timerID);
- if (!m_repeat)
- delete this;
- }
-
- NPP m_npp;
- uint32 m_timerID;
- uint32 m_interval;
- NPBool m_repeat;
- TimerFunc m_timerFunc;
-};
-
-#ifndef NP_NO_QUICKDRAW
-
-// QuickDraw is not available in 64-bit
-
-typedef struct {
- GrafPtr oldPort;
- GDHandle oldDevice;
- Point oldOrigin;
- RgnHandle oldClipRegion;
- RgnHandle oldVisibleRegion;
- RgnHandle clipRegion;
- BOOL forUpdate;
-} PortState_QD;
-
-#endif /* NP_NO_QUICKDRAW */
-
-typedef struct {
- CGContextRef context;
-} PortState_CG;
-
-@class NSTextInputContext;
-@interface NSResponder (AppKitDetails)
-- (NSTextInputContext *)inputContext;
-@end
-
-@interface WebPluginRequest : NSObject
-{
- NSURLRequest *_request;
- NSString *_frameName;
- void *_notifyData;
- BOOL _didStartFromUserGesture;
- BOOL _sendNotification;
-}
-
-- (id)initWithRequest:(NSURLRequest *)request frameName:(NSString *)frameName notifyData:(void *)notifyData sendNotification:(BOOL)sendNotification didStartFromUserGesture:(BOOL)currentEventIsUserGesture;
-
-- (NSURLRequest *)request;
-- (NSString *)frameName;
-- (void *)notifyData;
-- (BOOL)isCurrentEventUserGesture;
-- (BOOL)sendNotification;
-
-@end
-
-@interface NSData (WebPluginDataExtras)
-- (BOOL)_web_startsWithBlankLine;
-- (NSInteger)_web_locationAfterFirstBlankLine;
-@end
-
-@interface WebBaseNetscapePluginView (ForwardDeclarations)
-- (void)setWindowIfNecessary;
-- (NPError)loadRequest:(NSMutableURLRequest *)request inTarget:(const char *)cTarget withNotifyData:(void *)notifyData sendNotification:(BOOL)sendNotification;
-@end
+using namespace WebCore;
@implementation WebBaseNetscapePluginView
+ (void)initialize
{
+ JSC::initializeThreading();
#ifndef BUILDING_ON_TIGER
WebCoreObjCFinalizeOnMainThread(self);
#endif
WKSendUserChangeNotifications();
}
-#pragma mark EVENTS
-
-- (BOOL)superviewsHaveSuperviews
-{
- NSView *contentView = [[self window] contentView];
- NSView *view;
- for (view = self; view != nil; view = [view superview]) {
- if (view == contentView) {
- return YES;
- }
- }
- return NO;
-}
-
-
-// The WindowRef created by -[NSWindow windowRef] has a QuickDraw GrafPort that covers
-// the entire window frame (or structure region to use the Carbon term) rather then just the window content.
-// We can remove this when <rdar://problem/4201099> is fixed.
-- (void)fixWindowPort
+- (id)initWithFrame:(NSRect)frame
+ pluginPackage:(WebNetscapePluginPackage *)pluginPackage
+ URL:(NSURL *)URL
+ baseURL:(NSURL *)baseURL
+ MIMEType:(NSString *)MIME
+ attributeKeys:(NSArray *)keys
+ attributeValues:(NSArray *)values
+ loadManually:(BOOL)loadManually
+ DOMElement:(DOMElement *)anElement
{
-#ifndef NP_NO_QUICKDRAW
- ASSERT(isDrawingModelQuickDraw(drawingModel));
-
- NSWindow *currentWindow = [self currentWindow];
- if ([currentWindow isKindOfClass:objc_getClass("NSCarbonWindow")])
- return;
+ self = [super initWithFrame:frame];
+ if (!self)
+ return nil;
- float windowHeight = [currentWindow frame].size.height;
- NSView *contentView = [currentWindow contentView];
- NSRect contentRect = [contentView convertRect:[contentView frame] toView:nil]; // convert to window-relative coordinates
+ _pluginPackage = pluginPackage;
+ _element = anElement;
+ _sourceURL.adoptNS([URL copy]);
+ _baseURL.adoptNS([baseURL copy]);
+ _MIMEType.adoptNS([MIME copy]);
- CGrafPtr oldPort;
- GetPort(&oldPort);
- SetPort(GetWindowPort((WindowRef)[currentWindow windowRef]));
+ [self setAttributeKeys:keys andValues:values];
+ if (loadManually)
+ _mode = NP_FULL;
+ else
+ _mode = NP_EMBED;
- MovePortTo(static_cast<short>(contentRect.origin.x), /* Flip Y */ static_cast<short>(windowHeight - NSMaxY(contentRect)));
- PortSize(static_cast<short>(contentRect.size.width), static_cast<short>(contentRect.size.height));
+ _loadManually = loadManually;
- SetPort(oldPort);
-#endif
+ return self;
}
-#ifndef NP_NO_QUICKDRAW
-static UInt32 getQDPixelFormatForBitmapContext(CGContextRef context)
+- (void)dealloc
{
- UInt32 byteOrder = CGBitmapContextGetBitmapInfo(context) & kCGBitmapByteOrderMask;
- if (byteOrder == kCGBitmapByteOrderDefault)
- switch (CGBitmapContextGetBitsPerPixel(context)) {
- case 16:
- byteOrder = kCGBitmapByteOrder16Host;
- break;
- case 32:
- byteOrder = kCGBitmapByteOrder32Host;
- break;
- }
- switch (byteOrder) {
- case kCGBitmapByteOrder16Little:
- return k16LE555PixelFormat;
- case kCGBitmapByteOrder32Little:
- return k32BGRAPixelFormat;
- case kCGBitmapByteOrder16Big:
- return k16BE555PixelFormat;
- case kCGBitmapByteOrder32Big:
- return k32ARGBPixelFormat;
- }
- ASSERT_NOT_REACHED();
- return 0;
-}
+ ASSERT(!_isStarted);
-static inline void getNPRect(const CGRect& cgr, NPRect& npr)
-{
- npr.top = static_cast<uint16>(cgr.origin.y);
- npr.left = static_cast<uint16>(cgr.origin.x);
- npr.bottom = static_cast<uint16>(CGRectGetMaxY(cgr));
- npr.right = static_cast<uint16>(CGRectGetMaxX(cgr));
+ [super dealloc];
}
-#endif
-
-static inline void getNPRect(const NSRect& nr, NPRect& npr)
+- (void)finalize
{
- npr.top = static_cast<uint16>(nr.origin.y);
- npr.left = static_cast<uint16>(nr.origin.x);
- npr.bottom = static_cast<uint16>(NSMaxY(nr));
- npr.right = static_cast<uint16>(NSMaxX(nr));
-}
+ ASSERT_MAIN_THREAD();
+ ASSERT(!_isStarted);
-- (NSRect)visibleRect
-{
- // WebCore may impose an additional clip (via CSS overflow or clip properties). Fetch
- // that clip now.
- return NSIntersectionRect([self convertRect:[element _windowClipRect] fromView:nil], [super visibleRect]);
+ [super finalize];
}
-- (PortState)saveAndSetNewPortStateForUpdate:(BOOL)forUpdate
+- (WebNetscapePluginPackage *)pluginPackage
{
- ASSERT(drawingModel != NPDrawingModelCoreAnimation);
- ASSERT([self currentWindow] != nil);
-
- // If drawing with QuickDraw, fix the window port so that it has the same bounds as the NSWindow's
- // content view. This makes it easier to convert between AppKit view and QuickDraw port coordinates.
- if (isDrawingModelQuickDraw(drawingModel))
- [self fixWindowPort];
-
- // Use AppKit to convert view coordinates to NSWindow coordinates.
- NSRect boundsInWindow = [self convertRect:[self bounds] toView:nil];
- NSRect visibleRectInWindow = [self convertRect:[self visibleRect] toView:nil];
-
- // Flip Y to convert NSWindow coordinates to top-left-based window coordinates.
- float borderViewHeight = [[self currentWindow] frame].size.height;
- boundsInWindow.origin.y = borderViewHeight - NSMaxY(boundsInWindow);
- visibleRectInWindow.origin.y = borderViewHeight - NSMaxY(visibleRectInWindow);
-
-#ifndef NP_NO_QUICKDRAW
- WindowRef windowRef = (WindowRef)[[self currentWindow] windowRef];
- ASSERT(windowRef);
-
- // Look at the Carbon port to convert top-left-based window coordinates into top-left-based content coordinates.
- if (isDrawingModelQuickDraw(drawingModel)) {
- ::Rect portBounds;
- CGrafPtr port = GetWindowPort(windowRef);
- GetPortBounds(port, &portBounds);
-
- PixMap *pix = *GetPortPixMap(port);
- boundsInWindow.origin.x += pix->bounds.left - portBounds.left;
- boundsInWindow.origin.y += pix->bounds.top - portBounds.top;
- visibleRectInWindow.origin.x += pix->bounds.left - portBounds.left;
- visibleRectInWindow.origin.y += pix->bounds.top - portBounds.top;
- }
-#endif
-
- window.x = (int32)boundsInWindow.origin.x;
- window.y = (int32)boundsInWindow.origin.y;
- window.width = static_cast<uint32>(NSWidth(boundsInWindow));
- window.height = static_cast<uint32>(NSHeight(boundsInWindow));
-
- // "Clip-out" the plug-in when:
- // 1) it's not really in a window or off-screen or has no height or width.
- // 2) window.x is a "big negative number" which is how WebCore expresses off-screen widgets.
- // 3) the window is miniaturized or the app is hidden
- // 4) we're inside of viewWillMoveToWindow: with a nil window. In this case, superviews may already have nil
- // superviews and nil windows and results from convertRect:toView: are incorrect.
- NSWindow *realWindow = [self window];
- if (window.width <= 0 || window.height <= 0 || window.x < -100000
- || realWindow == nil || [realWindow isMiniaturized]
- || [NSApp isHidden]
- || ![self superviewsHaveSuperviews]
- || [self isHiddenOrHasHiddenAncestor]) {
-
- // The following code tries to give plug-ins the same size they will eventually have.
- // The specifiedWidth and specifiedHeight variables are used to predict the size that
- // WebCore will eventually resize us to.
-
- // The QuickTime plug-in has problems if you give it a width or height of 0.
- // Since other plug-ins also might have the same sort of trouble, we make sure
- // to always give plug-ins a size other than 0,0.
-
- if (window.width <= 0)
- window.width = specifiedWidth > 0 ? specifiedWidth : 100;
- if (window.height <= 0)
- window.height = specifiedHeight > 0 ? specifiedHeight : 100;
-
- window.clipRect.bottom = window.clipRect.top;
- window.clipRect.left = window.clipRect.right;
- } else {
- getNPRect(visibleRectInWindow, window.clipRect);
- }
-
- // Save the port state, set up the port for entry into the plugin
- PortState portState;
- switch (drawingModel) {
-#ifndef NP_NO_QUICKDRAW
- case NPDrawingModelQuickDraw: {
- // Set up NS_Port.
- ::Rect portBounds;
- CGrafPtr port = GetWindowPort(windowRef);
- GetPortBounds(port, &portBounds);
- nPort.qdPort.port = port;
- nPort.qdPort.portx = (int32)-boundsInWindow.origin.x;
- nPort.qdPort.porty = (int32)-boundsInWindow.origin.y;
- window.window = &nPort;
-
- PortState_QD *qdPortState = (PortState_QD*)malloc(sizeof(PortState_QD));
- portState = (PortState)qdPortState;
-
- GetGWorld(&qdPortState->oldPort, &qdPortState->oldDevice);
-
- qdPortState->oldOrigin.h = portBounds.left;
- qdPortState->oldOrigin.v = portBounds.top;
-
- qdPortState->oldClipRegion = NewRgn();
- GetPortClipRegion(port, qdPortState->oldClipRegion);
-
- qdPortState->oldVisibleRegion = NewRgn();
- GetPortVisibleRegion(port, qdPortState->oldVisibleRegion);
-
- RgnHandle clipRegion = NewRgn();
- qdPortState->clipRegion = clipRegion;
-
- CGContextRef currentContext = (CGContextRef)[[NSGraphicsContext currentContext] graphicsPort];
- if (currentContext && WKCGContextIsBitmapContext(currentContext)) {
- // We use WKCGContextIsBitmapContext here, because if we just called CGBitmapContextGetData
- // on any context, we'd log to the console every time. But even if WKCGContextIsBitmapContext
- // returns true, it still might not be a context we need to create a GWorld for; for example
- // transparency layers will return true, but return 0 for CGBitmapContextGetData.
- void* offscreenData = CGBitmapContextGetData(currentContext);
- if (offscreenData) {
- // If the current context is an offscreen bitmap, then create a GWorld for it.
- ::Rect offscreenBounds;
- offscreenBounds.top = 0;
- offscreenBounds.left = 0;
- offscreenBounds.right = CGBitmapContextGetWidth(currentContext);
- offscreenBounds.bottom = CGBitmapContextGetHeight(currentContext);
- GWorldPtr newOffscreenGWorld;
- QDErr err = NewGWorldFromPtr(&newOffscreenGWorld,
- getQDPixelFormatForBitmapContext(currentContext), &offscreenBounds, 0, 0, 0,
- static_cast<char*>(offscreenData), CGBitmapContextGetBytesPerRow(currentContext));
- ASSERT(newOffscreenGWorld && !err);
- if (!err) {
- if (offscreenGWorld)
- DisposeGWorld(offscreenGWorld);
- offscreenGWorld = newOffscreenGWorld;
-
- SetGWorld(offscreenGWorld, NULL);
-
- port = offscreenGWorld;
-
- nPort.qdPort.port = port;
- boundsInWindow = [self bounds];
-
- // Generate a QD origin based on the current affine transform for currentContext.
- CGAffineTransform offscreenMatrix = CGContextGetCTM(currentContext);
- CGPoint origin = {0,0};
- CGPoint axisFlip = {1,1};
- origin = CGPointApplyAffineTransform(origin, offscreenMatrix);
- axisFlip = CGPointApplyAffineTransform(axisFlip, offscreenMatrix);
-
- // Quartz bitmaps have origins at the bottom left, but the axes may be inverted, so handle that.
- origin.x = offscreenBounds.left - origin.x * (axisFlip.x - origin.x);
- origin.y = offscreenBounds.bottom + origin.y * (axisFlip.y - origin.y);
-
- nPort.qdPort.portx = static_cast<int32>(-boundsInWindow.origin.x + origin.x);
- nPort.qdPort.porty = static_cast<int32>(-boundsInWindow.origin.y - origin.y);
- window.x = 0;
- window.y = 0;
- window.window = &nPort;
-
- // Use the clip bounds from the context instead of the bounds we created
- // from the window above.
- getNPRect(CGRectOffset(CGContextGetClipBoundingBox(currentContext), -origin.x, origin.y), window.clipRect);
- }
- }
- }
-
- MacSetRectRgn(clipRegion,
- window.clipRect.left + nPort.qdPort.portx, window.clipRect.top + nPort.qdPort.porty,
- window.clipRect.right + nPort.qdPort.portx, window.clipRect.bottom + nPort.qdPort.porty);
-
- // Clip to the dirty region if drawing to a window. When drawing to another bitmap context, do not clip.
- if ([NSGraphicsContext currentContext] == [[self currentWindow] graphicsContext]) {
- // Clip to dirty region so plug-in does not draw over already-drawn regions of the window that are
- // not going to be redrawn this update. This forces plug-ins to play nice with z-index ordering.
- if (forUpdate) {
- RgnHandle viewClipRegion = NewRgn();
-
- // Get list of dirty rects from the opaque ancestor -- WebKit does some tricks with invalidation and
- // display to enable z-ordering for NSViews; a side-effect of this is that only the WebHTMLView
- // knows about the true set of dirty rects.
- NSView *opaqueAncestor = [self opaqueAncestor];
- const NSRect *dirtyRects;
- NSInteger dirtyRectCount, dirtyRectIndex;
- [opaqueAncestor getRectsBeingDrawn:&dirtyRects count:&dirtyRectCount];
-
- for (dirtyRectIndex = 0; dirtyRectIndex < dirtyRectCount; dirtyRectIndex++) {
- NSRect dirtyRect = [self convertRect:dirtyRects[dirtyRectIndex] fromView:opaqueAncestor];
- if (!NSEqualSizes(dirtyRect.size, NSZeroSize)) {
- // Create a region for this dirty rect
- RgnHandle dirtyRectRegion = NewRgn();
- SetRectRgn(dirtyRectRegion, static_cast<short>(NSMinX(dirtyRect)), static_cast<short>(NSMinY(dirtyRect)), static_cast<short>(NSMaxX(dirtyRect)), static_cast<short>(NSMaxY(dirtyRect)));
-
- // Union this dirty rect with the rest of the dirty rects
- UnionRgn(viewClipRegion, dirtyRectRegion, viewClipRegion);
- DisposeRgn(dirtyRectRegion);
- }
- }
-
- // Intersect the dirty region with the clip region, so that we only draw over dirty parts
- SectRgn(clipRegion, viewClipRegion, clipRegion);
- DisposeRgn(viewClipRegion);
- }
- }
-
- // Switch to the port and set it up.
- SetPort(port);
- PenNormal();
- ForeColor(blackColor);
- BackColor(whiteColor);
- SetOrigin(nPort.qdPort.portx, nPort.qdPort.porty);
- SetPortClipRegion(nPort.qdPort.port, clipRegion);
-
- if (forUpdate) {
- // AppKit may have tried to help us by doing a BeginUpdate.
- // But the invalid region at that level didn't include AppKit's notion of what was not valid.
- // We reset the port's visible region to counteract what BeginUpdate did.
- SetPortVisibleRegion(nPort.qdPort.port, clipRegion);
- InvalWindowRgn(windowRef, clipRegion);
- }
-
- qdPortState->forUpdate = forUpdate;
- break;
- }
-#endif /* NP_NO_QUICKDRAW */
-
- case NPDrawingModelCoreGraphics: {
- ASSERT([NSView focusView] == self);
-
- CGContextRef context = static_cast<CGContextRef>([[NSGraphicsContext currentContext] graphicsPort]);
-
- PortState_CG *cgPortState = (PortState_CG *)malloc(sizeof(PortState_CG));
- portState = (PortState)cgPortState;
- cgPortState->context = context;
-
- // Update the plugin's window/context
-#ifdef NP_NO_CARBON
- nPort.cgPort.window = (NPNSWindow *)[self currentWindow];
-#else
- nPort.cgPort.window = eventHandler->platformWindow([self currentWindow]);
-#endif /* NP_NO_CARBON */
- nPort.cgPort.context = context;
- window.window = &nPort.cgPort;
-
- // Save current graphics context's state; will be restored by -restorePortState:
- CGContextSaveGState(context);
-
- // Clip to the dirty region if drawing to a window. When drawing to another bitmap context, do not clip.
- if ([NSGraphicsContext currentContext] == [[self currentWindow] graphicsContext]) {
- // Get list of dirty rects from the opaque ancestor -- WebKit does some tricks with invalidation and
- // display to enable z-ordering for NSViews; a side-effect of this is that only the WebHTMLView
- // knows about the true set of dirty rects.
- NSView *opaqueAncestor = [self opaqueAncestor];
- const NSRect *dirtyRects;
- NSInteger count;
- [opaqueAncestor getRectsBeingDrawn:&dirtyRects count:&count];
- Vector<CGRect, 16> convertedDirtyRects;
- convertedDirtyRects.resize(count);
- for (int i = 0; i < count; ++i)
- reinterpret_cast<NSRect&>(convertedDirtyRects[i]) = [self convertRect:dirtyRects[i] fromView:opaqueAncestor];
- CGContextClipToRects(context, convertedDirtyRects.data(), count);
- }
-
- break;
- }
-
- default:
- ASSERT_NOT_REACHED();
- portState = NULL;
- break;
- }
-
- return portState;
+ return _pluginPackage.get();
}
-
-- (PortState)saveAndSetNewPortState
+
+- (BOOL)isFlipped
{
- return [self saveAndSetNewPortStateForUpdate:NO];
+ return YES;
}
-- (void)restorePortState:(PortState)portState
+- (NSMutableURLRequest *)requestWithURLCString:(const char *)URLCString
{
- if (drawingModel == NPDrawingModelCoreAnimation)
- return;
-
- ASSERT([self currentWindow]);
- ASSERT(portState);
+ if (!URLCString)
+ return nil;
- switch (drawingModel) {
-#ifndef NP_NO_QUICKDRAW
- case NPDrawingModelQuickDraw: {
- PortState_QD *qdPortState = (PortState_QD *)portState;
- WindowRef windowRef = (WindowRef)[[self currentWindow] windowRef];
- CGrafPtr port = GetWindowPort(windowRef);
-
- SetPort(port);
-
- if (qdPortState->forUpdate)
- ValidWindowRgn(windowRef, qdPortState->clipRegion);
-
- SetOrigin(qdPortState->oldOrigin.h, qdPortState->oldOrigin.v);
-
- SetPortClipRegion(port, qdPortState->oldClipRegion);
- if (qdPortState->forUpdate)
- SetPortVisibleRegion(port, qdPortState->oldVisibleRegion);
-
- DisposeRgn(qdPortState->oldClipRegion);
- DisposeRgn(qdPortState->oldVisibleRegion);
- DisposeRgn(qdPortState->clipRegion);
-
- SetGWorld(qdPortState->oldPort, qdPortState->oldDevice);
- break;
- }
-#endif /* NP_NO_QUICKDRAW */
-
- case NPDrawingModelCoreGraphics:
- ASSERT([NSView focusView] == self);
- ASSERT(((PortState_CG *)portState)->context == nPort.cgPort.context);
- CGContextRestoreGState(nPort.cgPort.context);
- break;
-
- default:
- ASSERT_NOT_REACHED();
- break;
- }
-}
-
-- (BOOL)sendEvent:(void*)event isDrawRect:(BOOL)eventIsDrawRect
-{
- if (![self window])
- return NO;
- ASSERT(event);
-
- if (!isStarted)
- return NO;
-
- ASSERT(NPP_HandleEvent);
+ CFStringRef string = CFStringCreateWithCString(kCFAllocatorDefault, URLCString, kCFStringEncodingISOLatin1);
+ ASSERT(string); // All strings should be representable in ISO Latin 1
- // Make sure we don't call NPP_HandleEvent while we're inside NPP_SetWindow.
- // We probably don't want more general reentrancy protection; we are really
- // protecting only against this one case, which actually comes up when
- // you first install the SVG viewer plug-in.
- if (inSetWindow)
- return NO;
-
+ NSString *URLString = [(NSString *)string _web_stringByStrippingReturnCharacters];
+ NSURL *URL = [NSURL _web_URLWithDataAsString:URLString relativeToURL:_baseURL.get()];
+ CFRelease(string);
+ if (!URL)
+ return nil;
+
+ NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:URL];
Frame* frame = core([self webFrame]);
if (!frame)
- return NO;
- Page* page = frame->page();
- if (!page)
- return NO;
-
- bool wasDeferring = page->defersLoading();
- if (!wasDeferring)
- page->setDefersLoading(true);
-
- // Can only send drawRect (updateEvt) to CoreGraphics plugins when actually drawing
- ASSERT((drawingModel != NPDrawingModelCoreGraphics) || !eventIsDrawRect || [NSView focusView] == self);
-
- PortState portState = NULL;
-
- if (isDrawingModelQuickDraw(drawingModel) || (drawingModel != NPDrawingModelCoreAnimation && eventIsDrawRect)) {
- // In CoreGraphics mode, the port state only needs to be saved/set when redrawing the plug-in view.
- // The plug-in is not allowed to draw at any other time.
- portState = [self saveAndSetNewPortStateForUpdate:eventIsDrawRect];
- // We may have changed the window, so inform the plug-in.
- [self setWindowIfNecessary];
- }
-
-#if !defined(NDEBUG) && !defined(NP_NO_QUICKDRAW)
- // Draw green to help debug.
- // If we see any green we know something's wrong.
- // Note that PaintRect() only works for QuickDraw plugins; otherwise the current QD port is undefined.
- if (isDrawingModelQuickDraw(drawingModel) && !isTransparent && eventIsDrawRect) {
- ForeColor(greenColor);
- const ::Rect bigRect = { -10000, -10000, 10000, 10000 };
- PaintRect(&bigRect);
- ForeColor(blackColor);
- }
-#endif
-
- // Temporarily retain self in case the plug-in view is released while sending an event.
- [[self retain] autorelease];
-
- BOOL acceptedEvent;
- [self willCallPlugInFunction];
- {
- JSC::JSLock::DropAllLocks dropAllLocks(false);
- acceptedEvent = NPP_HandleEvent(plugin, event);
- }
- [self didCallPlugInFunction];
-
- if (portState) {
- if ([self currentWindow])
- [self restorePortState:portState];
- free(portState);
- }
-
- if (!wasDeferring)
- page->setDefersLoading(false);
-
- return acceptedEvent;
+ return nil;
+ [request _web_setHTTPReferrer:frame->loader()->outgoingReferrer()];
+ return request;
}
-- (void)sendActivateEvent:(BOOL)activate
+// Methods that subclasses must override
+- (void)setAttributeKeys:(NSArray *)keys andValues:(NSArray *)values
{
- if (!isStarted)
- return;
-
- eventHandler->windowFocusChanged(activate);
+ ASSERT_NOT_REACHED();
}
-- (void)sendDrawRectEvent:(NSRect)rect
+- (void)handleMouseMoved:(NSEvent *)event
{
- ASSERT(eventHandler);
-
- eventHandler->drawRect(rect);
+ ASSERT_NOT_REACHED();
}
-- (void)stopTimers
+- (void)focusChanged
{
- if (eventHandler)
- eventHandler->stopTimers();
-
- shouldFireTimers = NO;
-
- if (!timers)
- return;
-
- HashMap<uint32, PluginTimer*>::const_iterator end = timers->end();
- for (HashMap<uint32, PluginTimer*>::const_iterator it = timers->begin(); it != end; ++it) {
- PluginTimer* timer = it->second;
- timer->stop();
- }
+ ASSERT_NOT_REACHED();
}
-- (void)restartTimers
+- (void)windowFocusChanged:(BOOL)hasFocus
{
- ASSERT([self window]);
-
- if (shouldFireTimers)
- [self stopTimers];
-
- if (!isStarted || [[self window] isMiniaturized])
- return;
-
- shouldFireTimers = YES;
-
- // If the plugin is completely obscured (scrolled out of view, for example), then we will
- // send null events at a reduced rate.
- eventHandler->startTimers(isCompletelyObscured);
-
- if (!timers)
- return;
-
- HashMap<uint32, PluginTimer*>::const_iterator end = timers->end();
- for (HashMap<uint32, PluginTimer*>::const_iterator it = timers->begin(); it != end; ++it) {
- PluginTimer* timer = it->second;
- ASSERT(!timer->isActive());
- timer->start(isCompletelyObscured);
- }
+ ASSERT_NOT_REACHED();
}
-- (BOOL)acceptsFirstResponder
+- (BOOL)createPlugin
{
- return YES;
+ ASSERT_NOT_REACHED();
+ return NO;
}
-- (void)setHasFocus:(BOOL)flag
+- (void)loadStream
{
- if (!isStarted)
- return;
-
- if (hasFocus == flag)
- return;
-
- hasFocus = flag;
-
- // We need to null check the event handler here because
- // the plug-in view can resign focus after it's been stopped
- // and the event handler has been deleted.
- if (eventHandler)
- eventHandler->focusChanged(hasFocus);
+ ASSERT_NOT_REACHED();
}
-- (BOOL)becomeFirstResponder
+- (BOOL)shouldStop
{
- [self setHasFocus:YES];
+ ASSERT_NOT_REACHED();
return YES;
}
-- (BOOL)resignFirstResponder
+- (void)destroyPlugin
{
- [self setHasFocus:NO];
- return YES;
+ ASSERT_NOT_REACHED();
}
-// AppKit doesn't call mouseDown or mouseUp on right-click. Simulate control-click
-// mouseDown and mouseUp so plug-ins get the right-click event as they do in Carbon (3125743).
-- (void)rightMouseDown:(NSEvent *)theEvent
+- (void)updateAndSetWindow
{
- [self mouseDown:theEvent];
+ ASSERT_NOT_REACHED();
}
-- (void)rightMouseUp:(NSEvent *)theEvent
+- (void)removeTrackingRect
{
- [self mouseUp:theEvent];
+ if (_trackingTag) {
+ [self removeTrackingRect:_trackingTag];
+ _trackingTag = 0;
+
+ // Do the following after setting trackingTag to 0 so we don't re-enter.
+
+ // Balance the retain in resetTrackingRect. Use autorelease in case we hold
+ // the last reference to the window during tear-down, to avoid crashing AppKit.
+ [[self window] autorelease];
+ }
}
-- (void)mouseDown:(NSEvent *)theEvent
+- (void)resetTrackingRect
{
- if (!isStarted)
- return;
-
- eventHandler->mouseDown(theEvent);
+ [self removeTrackingRect];
+ if (_isStarted) {
+ // Retain the window so that removeTrackingRect can work after the window is closed.
+ [[self window] retain];
+ _trackingTag = [self addTrackingRect:[self bounds] owner:self userData:nil assumeInside:NO];
+ }
}
-- (void)mouseUp:(NSEvent *)theEvent
+- (void)stopTimers
{
- if (!isStarted)
- return;
-
- eventHandler->mouseUp(theEvent);
+ _shouldFireTimers = NO;
}
-- (void)mouseEntered:(NSEvent *)theEvent
+- (void)startTimers
{
- if (!isStarted)
- return;
-
- eventHandler->mouseEntered(theEvent);
+ _shouldFireTimers = YES;
}
-- (void)mouseExited:(NSEvent *)theEvent
+- (void)restartTimers
{
- if (!isStarted)
- return;
-
- eventHandler->mouseExited(theEvent);
+ ASSERT([self window]);
- // Set cursor back to arrow cursor. Because NSCursor doesn't know about changes that the plugin made, we could get confused about what we think the
- // current cursor is otherwise. Therefore we have no choice but to unconditionally reset the cursor when the mouse exits the plugin.
- [[NSCursor arrowCursor] set];
-}
-
-// We can't name this method mouseMoved because we don't want to override
-// the NSView mouseMoved implementation.
-- (void)handleMouseMoved:(NSEvent *)theEvent
-{
- if (!isStarted)
- return;
-
- eventHandler->mouseMoved(theEvent);
-}
+ [self stopTimers];
-- (void)mouseDragged:(NSEvent *)theEvent
-{
- if (!isStarted)
+ if (!_isStarted || [[self window] isMiniaturized])
return;
-
- eventHandler->mouseDragged(theEvent);
-}
-
-- (void)scrollWheel:(NSEvent *)theEvent
-{
- if (!isStarted) {
- [super scrollWheel:theEvent];
- return;
- }
-
- if (!eventHandler->scrollWheel(theEvent))
- [super scrollWheel:theEvent];
-}
-
-- (void)keyUp:(NSEvent *)theEvent
-{
- if (!isStarted)
- return;
-
- eventHandler->keyUp(theEvent);
-}
-
-- (void)keyDown:(NSEvent *)theEvent
-{
- if (!isStarted)
- return;
-
- eventHandler->keyDown(theEvent);
-}
-
-- (void)flagsChanged:(NSEvent *)theEvent
-{
- if (!isStarted)
- return;
-
- eventHandler->flagsChanged(theEvent);
-}
-
-- (void)cut:(id)sender
-{
- if (!isStarted)
- return;
-
- eventHandler->keyDown([NSApp currentEvent]);
-}
-
-- (void)copy:(id)sender
-{
- if (!isStarted)
- return;
-
- eventHandler->keyDown([NSApp currentEvent]);
-}
-
-- (void)paste:(id)sender
-{
- if (!isStarted)
- return;
-
- eventHandler->keyDown([NSApp currentEvent]);
+
+ [self startTimers];
}
-- (void)selectAll:(id)sender
+- (NSRect)visibleRect
{
- if (!isStarted)
- return;
-
- eventHandler->keyDown([NSApp currentEvent]);
+ // WebCore may impose an additional clip (via CSS overflow or clip properties). Fetch
+ // that clip now.
+ return NSIntersectionRect([self convertRect:[_element.get() _windowClipRect] fromView:nil], [super visibleRect]);
}
-#pragma mark WEB_NETSCAPE_PLUGIN
-
-- (BOOL)isNewWindowEqualToOldWindow
+- (BOOL)acceptsFirstResponder
{
- ASSERT(drawingModel != NPDrawingModelCoreAnimation);
-
- if (window.x != lastSetWindow.x)
- return NO;
- if (window.y != lastSetWindow.y)
- return NO;
- if (window.width != lastSetWindow.width)
- return NO;
- if (window.height != lastSetWindow.height)
- return NO;
- if (window.clipRect.top != lastSetWindow.clipRect.top)
- return NO;
- if (window.clipRect.left != lastSetWindow.clipRect.left)
- return NO;
- if (window.clipRect.bottom != lastSetWindow.clipRect.bottom)
- return NO;
- if (window.clipRect.right != lastSetWindow.clipRect.right)
- return NO;
- if (window.type != lastSetWindow.type)
- return NO;
-
- switch (drawingModel) {
-#ifndef NP_NO_QUICKDRAW
- case NPDrawingModelQuickDraw:
- if (nPort.qdPort.portx != lastSetPort.qdPort.portx)
- return NO;
- if (nPort.qdPort.porty != lastSetPort.qdPort.porty)
- return NO;
- if (nPort.qdPort.port != lastSetPort.qdPort.port)
- return NO;
- break;
-#endif /* NP_NO_QUICKDRAW */
-
- case NPDrawingModelCoreGraphics:
- if (nPort.cgPort.window != lastSetPort.cgPort.window)
- return NO;
- if (nPort.cgPort.context != lastSetPort.cgPort.context)
- return NO;
- break;
-
- default:
- ASSERT_NOT_REACHED();
- break;
- }
-
return YES;
}
-- (void)updateAndSetWindow
+- (void)sendActivateEvent:(BOOL)activate
{
- ASSERT(drawingModel != NPDrawingModelCoreAnimation);
-
- // A plug-in can only update if it's (1) already been started (2) isn't stopped
- // and (3) is able to draw on-screen. To meet condition (3) the plug-in must not
- // be hidden and be attached to a window. QuickDraw plug-ins are an important
- // excpetion to rule (3) because they manually must be told when to stop writing
- // bits to the window backing store, thus to do so requires a new call to
- // NPP_SetWindow() with an empty NPWindow struct.
- if (!isStarted)
- return;
-#ifdef NP_NO_QUICKDRAW
- if (![self canDraw])
- return;
-#else
- if (drawingModel != NPDrawingModelQuickDraw && ![self canDraw])
+ if (!_isStarted)
return;
-#endif // NP_NO_QUICKDRAW
- BOOL didLockFocus = [NSView focusView] != self && [self lockFocusIfCanDraw];
-
- if (drawingModel == NPDrawingModelCoreGraphics || isDrawingModelQuickDraw(drawingModel)) {
- [self setWindowIfNecessary];
- if (didLockFocus)
- [self unlockFocus];
-
- return;
- }
-
- PortState portState = [self saveAndSetNewPortState];
- if (portState) {
- [self setWindowIfNecessary];
- [self restorePortState:portState];
- free(portState);
- }
- if (didLockFocus)
- [self unlockFocus];
+ [self windowFocusChanged:activate];
}
-- (void)setWindowIfNecessary
+- (void)setHasFocus:(BOOL)flag
{
- ASSERT(drawingModel != NPDrawingModelCoreAnimation);
-
- if (!isStarted) {
+ if (!_isStarted)
return;
- }
- if (![self isNewWindowEqualToOldWindow]) {
- // Make sure we don't call NPP_HandleEvent while we're inside NPP_SetWindow.
- // We probably don't want more general reentrancy protection; we are really
- // protecting only against this one case, which actually comes up when
- // you first install the SVG viewer plug-in.
- NPError npErr;
- ASSERT(!inSetWindow);
-
- inSetWindow = YES;
-
- // A CoreGraphics plugin's window may only be set while the plugin is being updated
- ASSERT((drawingModel != NPDrawingModelCoreGraphics) || [NSView focusView] == self);
-
- [self willCallPlugInFunction];
- {
- JSC::JSLock::DropAllLocks dropAllLocks(false);
- npErr = NPP_SetWindow(plugin, &window);
- }
- [self didCallPlugInFunction];
- inSetWindow = NO;
-
-#ifndef NDEBUG
- switch (drawingModel) {
-#ifndef NP_NO_QUICKDRAW
- case NPDrawingModelQuickDraw:
- LOG(Plugins, "NPP_SetWindow (QuickDraw): %d, port=0x%08x, window.x:%d window.y:%d window.width:%d window.height:%d",
- npErr, (int)nPort.qdPort.port, (int)window.x, (int)window.y, (int)window.width, (int)window.height);
- break;
-#endif /* NP_NO_QUICKDRAW */
-
- case NPDrawingModelCoreGraphics:
- LOG(Plugins, "NPP_SetWindow (CoreGraphics): %d, window=%p, context=%p, window.x:%d window.y:%d window.width:%d window.height:%d",
- npErr, nPort.cgPort.window, nPort.cgPort.context, (int)window.x, (int)window.y, (int)window.width, (int)window.height);
- break;
-
- default:
- ASSERT_NOT_REACHED();
- break;
- }
-#endif /* !defined(NDEBUG) */
-
- lastSetWindow = window;
- lastSetPort = nPort;
- }
-}
-
-- (void)removeTrackingRect
-{
- if (trackingTag) {
- [self removeTrackingRect:trackingTag];
- trackingTag = 0;
-
- // Do the following after setting trackingTag to 0 so we don't re-enter.
-
- // Balance the retain in resetTrackingRect. Use autorelease in case we hold
- // the last reference to the window during tear-down, to avoid crashing AppKit.
- [[self window] autorelease];
- }
-}
-
-- (void)resetTrackingRect
-{
- [self removeTrackingRect];
- if (isStarted) {
- // Retain the window so that removeTrackingRect can work after the window is closed.
- [[self window] retain];
- trackingTag = [self addTrackingRect:[self bounds] owner:self userData:nil assumeInside:NO];
- }
-}
-
-+ (void)setCurrentPluginView:(WebBaseNetscapePluginView *)view
-{
- currentPluginView = view;
-}
-
-+ (WebBaseNetscapePluginView *)currentPluginView
-{
- return currentPluginView;
-}
-
-- (BOOL)canStart
-{
- return YES;
-}
-
-- (void)didStart
-{
- if (_loadManually) {
- [self _redeliverStream];
+ if (_hasFocus == flag)
return;
- }
- // If the OBJECT/EMBED tag has no SRC, the URL is passed to us as "".
- // Check for this and don't start a load in this case.
- if (sourceURL != nil && ![sourceURL _web_isEmpty]) {
- NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:sourceURL];
- [request _web_setHTTPReferrer:core([self webFrame])->loader()->outgoingReferrer()];
- [self loadRequest:request inTarget:nil withNotifyData:nil sendNotification:NO];
- }
+ _hasFocus = flag;
+
+ [self focusChanged];
}
- (void)addWindowObservers
{
ASSERT([self window]);
-
+
NSWindow *theWindow = [self window];
NSNotificationCenter *notificationCenter = [NSNotificationCenter defaultCenter];
@@ -1156,106 +306,42 @@ static inline void getNPRect(const NSRect& nr, NPRect& npr)
[notificationCenter removeObserver:self name:LoginWindowDidSwitchToUserNotification object:nil];
}
-- (BOOL)start
+- (void)start
{
ASSERT([self currentWindow]);
- if (isStarted)
- return YES;
-
- if (![self canStart])
- return NO;
+ if (_isStarted)
+ return;
ASSERT([self webView]);
if (![[[self webView] preferences] arePlugInsEnabled])
- return NO;
-
- // Open the plug-in package so it remains loaded while our plugin uses it
- [pluginPackage open];
-
- // Initialize drawingModel to an invalid value so that we can detect when the plugin does not specify a drawingModel
- drawingModel = (NPDrawingModel)-1;
-
- // Initialize eventModel to an invalid value so that we can detect when the plugin does not specify an event model.
- eventModel = (NPEventModel)-1;
-
- // Plug-ins are "windowed" by default. On MacOS, windowed plug-ins share the same window and graphics port as the main
- // browser window. Windowless plug-ins are rendered off-screen, then copied into the main browser window.
- window.type = NPWindowTypeWindow;
-
- NPError npErr = [self _createPlugin];
- if (npErr != NPERR_NO_ERROR) {
- LOG_ERROR("NPP_New failed with error: %d", npErr);
- [self _destroyPlugin];
- [pluginPackage close];
- return NO;
- }
+ return;
+
+ Frame* frame = core([self webFrame]);
+ if (!frame)
+ return;
+ Page* page = frame->page();
+ if (!page)
+ return;
- if (drawingModel == (NPDrawingModel)-1) {
-#ifndef NP_NO_QUICKDRAW
- // Default to QuickDraw if the plugin did not specify a drawing model.
- drawingModel = NPDrawingModelQuickDraw;
-#else
- // QuickDraw is not available, so we can't default to it. Instead, default to CoreGraphics.
- drawingModel = NPDrawingModelCoreGraphics;
-#endif
- }
-
- if (eventModel == (NPEventModel)-1) {
- // If the plug-in did not specify a drawing model we default to Carbon when it is available.
-#ifndef NP_NO_CARBON
- eventModel = NPEventModelCarbon;
-#else
- eventModel = NPEventModelCocoa;
-#endif // NP_NO_CARBON
- }
+ bool wasDeferring = page->defersLoading();
+ if (!wasDeferring)
+ page->setDefersLoading(true);
-#ifndef NP_NO_CARBON
- if (eventModel == NPEventModelCocoa && isDrawingModelQuickDraw(drawingModel)) {
- LOG(Plugins, "Plugin can't use use Cocoa event model with QuickDraw drawing model: %@", pluginPackage);
- [self _destroyPlugin];
- [pluginPackage close];
-
- return NO;
- }
-#endif // NP_NO_CARBON
+ BOOL result = [self createPlugin];
-#ifndef BUILDING_ON_TIGER
- if (drawingModel == NPDrawingModelCoreAnimation) {
- void *value = 0;
- if (NPP_GetValue(plugin, NPPVpluginCoreAnimationLayer, &value) == NPERR_NO_ERROR && value) {
- _layer = (CALayer *)value;
- [self setWantsLayer:YES];
- [self setLayer:_layer];
- LOG(Plugins, "%@ is using Core Animation drawing model with layer %@", pluginPackage, _layer);
- }
+ if (!wasDeferring)
+ page->setDefersLoading(false);
- ASSERT(_layer);
- }
-#endif
+ if (!result)
+ return;
- // Create the event handler
- eventHandler = WebNetscapePluginEventHandler::create(self);
+ _isStarted = YES;
+ [[self webView] addPluginInstanceView:self];
- // Get the text input vtable
- if (eventModel == NPEventModelCocoa) {
- [self willCallPlugInFunction];
- {
- JSC::JSLock::DropAllLocks dropAllLocks(false);
- NPPluginTextInputFuncs *value;
- if (NPP_GetValue(plugin, NPPVpluginTextInputFuncs, &value) == NPERR_NO_ERROR && value)
- textInputFuncs = value;
- }
- [self didCallPlugInFunction];
- }
+ [self updateAndSetWindow];
- isStarted = YES;
- [[self webView] addPluginInstanceView:self];
-
- if (drawingModel == NPDrawingModelCoreGraphics || isDrawingModelQuickDraw(drawingModel))
- [self updateAndSetWindow];
-
if ([self window]) {
[self addWindowObservers];
if ([[self window] isKeyWindow]) {
@@ -1263,353 +349,37 @@ static inline void getNPRect(const NSRect& nr, NPRect& npr)
}
[self restartTimers];
}
-
- [self resetTrackingRect];
- [self didStart];
+ [self resetTrackingRect];
- return YES;
+ [self loadStream];
}
- (void)stop
{
- // If we're already calling a plug-in function, do not call NPP_Destroy(). The plug-in function we are calling
- // may assume that its instance->pdata, or other memory freed by NPP_Destroy(), is valid and unchanged until said
- // plugin-function returns.
- // See <rdar://problem/4480737>.
- if (pluginFunctionCallDepth > 0) {
- shouldStopSoon = YES;
+ if (![self shouldStop])
return;
- }
[self removeTrackingRect];
-
- if (!isStarted)
+
+ if (!_isStarted)
return;
- isStarted = NO;
+ _isStarted = NO;
[[self webView] removePluginInstanceView:self];
-
- // To stop active streams it's necessary to invoke stop() on a copy
- // of streams. This is because calling WebNetscapePluginStream::stop() also has the side effect
- // of removing a stream from this hash set.
- Vector<RefPtr<WebNetscapePluginStream> > streamsCopy;
- copyToVector(streams, streamsCopy);
- for (size_t i = 0; i < streamsCopy.size(); i++)
- streamsCopy[i]->stop();
-
// Stop the timers
[self stopTimers];
// Stop notifications and callbacks.
[self removeWindowObservers];
- [[pendingFrameLoads allKeys] makeObjectsPerformSelector:@selector(_setInternalLoadDelegate:) withObject:nil];
- [NSObject cancelPreviousPerformRequestsWithTarget:self];
-
- // Setting the window type to 0 ensures that NPP_SetWindow will be called if the plug-in is restarted.
- lastSetWindow.type = (NPWindowType)0;
-
- [self _destroyPlugin];
- [pluginPackage close];
-
- delete eventHandler;
- eventHandler = 0;
-
- textInputFuncs = 0;
-}
-
-- (BOOL)isStarted
-{
- return isStarted;
-}
-
-- (NPEventModel)eventModel
-{
- return eventModel;
-}
-
-- (WebDataSource *)dataSource
-{
- WebFrame *webFrame = kit(core(element)->document()->frame());
- return [webFrame _dataSource];
-}
-
-- (WebFrame *)webFrame
-{
- return [[self dataSource] webFrame];
-}
-
-- (WebView *)webView
-{
- return [[self webFrame] webView];
-}
-
-- (NSWindow *)currentWindow
-{
- return [self window] ? [self window] : [[self webView] hostWindow];
-}
-
-- (NPP)plugin
-{
- return plugin;
-}
-
-- (WebNetscapePluginPackage *)pluginPackage
-{
- return pluginPackage;
-}
-
-- (void)setPluginPackage:(WebNetscapePluginPackage *)thePluginPackage;
-{
- [thePluginPackage retain];
- [pluginPackage release];
- pluginPackage = thePluginPackage;
-
- NPP_New = [pluginPackage NPP_New];
- NPP_Destroy = [pluginPackage NPP_Destroy];
- NPP_SetWindow = [pluginPackage NPP_SetWindow];
- NPP_NewStream = [pluginPackage NPP_NewStream];
- NPP_WriteReady = [pluginPackage NPP_WriteReady];
- NPP_Write = [pluginPackage NPP_Write];
- NPP_StreamAsFile = [pluginPackage NPP_StreamAsFile];
- NPP_DestroyStream = [pluginPackage NPP_DestroyStream];
- NPP_HandleEvent = [pluginPackage NPP_HandleEvent];
- NPP_URLNotify = [pluginPackage NPP_URLNotify];
- NPP_GetValue = [pluginPackage NPP_GetValue];
- NPP_SetValue = [pluginPackage NPP_SetValue];
- NPP_Print = [pluginPackage NPP_Print];
-}
-
-- (void)setMIMEType:(NSString *)theMIMEType
-{
- NSString *type = [theMIMEType copy];
- [MIMEType release];
- MIMEType = type;
-}
-
-- (void)setBaseURL:(NSURL *)theBaseURL
-{
- [theBaseURL retain];
- [baseURL release];
- baseURL = theBaseURL;
-}
-
-- (void)setAttributeKeys:(NSArray *)keys andValues:(NSArray *)values;
-{
- ASSERT([keys count] == [values count]);
-
- // Convert the attributes to 2 C string arrays.
- // These arrays are passed to NPP_New, but the strings need to be
- // modifiable and live the entire life of the plugin.
-
- // The Java plug-in requires the first argument to be the base URL
- if ([MIMEType isEqualToString:@"application/x-java-applet"]) {
- cAttributes = (char **)malloc(([keys count] + 1) * sizeof(char *));
- cValues = (char **)malloc(([values count] + 1) * sizeof(char *));
- cAttributes[0] = strdup("DOCBASE");
- cValues[0] = strdup([baseURL _web_URLCString]);
- argsCount++;
- } else {
- cAttributes = (char **)malloc([keys count] * sizeof(char *));
- cValues = (char **)malloc([values count] * sizeof(char *));
- }
-
- BOOL isWMP = [[[pluginPackage bundle] bundleIdentifier] isEqualToString:@"com.microsoft.WMP.defaultplugin"];
-
- unsigned i;
- unsigned count = [keys count];
- for (i = 0; i < count; i++) {
- NSString *key = [keys objectAtIndex:i];
- NSString *value = [values objectAtIndex:i];
- if ([key _webkit_isCaseInsensitiveEqualToString:@"height"]) {
- specifiedHeight = [value intValue];
- } else if ([key _webkit_isCaseInsensitiveEqualToString:@"width"]) {
- specifiedWidth = [value intValue];
- }
- // Avoid Window Media Player crash when these attributes are present.
- if (isWMP && ([key _webkit_isCaseInsensitiveEqualToString:@"SAMIStyle"] || [key _webkit_isCaseInsensitiveEqualToString:@"SAMILang"])) {
- continue;
- }
- cAttributes[argsCount] = strdup([key UTF8String]);
- cValues[argsCount] = strdup([value UTF8String]);
- LOG(Plugins, "%@ = %@", key, value);
- argsCount++;
- }
-}
-
-- (void)setMode:(int)theMode
-{
- mode = theMode;
-}
-
-#pragma mark NSVIEW
-
-- (id)initWithFrame:(NSRect)frame
- pluginPackage:(WebNetscapePluginPackage *)thePluginPackage
- URL:(NSURL *)theURL
- baseURL:(NSURL *)theBaseURL
- MIMEType:(NSString *)MIME
- attributeKeys:(NSArray *)keys
- attributeValues:(NSArray *)values
- loadManually:(BOOL)loadManually
- DOMElement:(DOMElement *)anElement
-{
- [super initWithFrame:frame];
-
- pendingFrameLoads = [[NSMutableDictionary alloc] init];
-
- // load the plug-in if it is not already loaded
- if (![thePluginPackage load]) {
- [self release];
- return nil;
- }
- [self setPluginPackage:thePluginPackage];
-
- element = [anElement retain];
- sourceURL = [theURL retain];
-
- [self setMIMEType:MIME];
- [self setBaseURL:theBaseURL];
- [self setAttributeKeys:keys andValues:values];
- if (loadManually)
- [self setMode:NP_FULL];
- else
- [self setMode:NP_EMBED];
-
- _loadManually = loadManually;
- return self;
-}
-
-- (id)initWithFrame:(NSRect)frame
-{
- ASSERT_NOT_REACHED();
- return nil;
-}
-
-- (void)fini
-{
-#ifndef NP_NO_QUICKDRAW
- if (offscreenGWorld)
- DisposeGWorld(offscreenGWorld);
-#endif
-
- unsigned i;
- for (i = 0; i < argsCount; i++) {
- free(cAttributes[i]);
- free(cValues[i]);
- }
- free(cAttributes);
- free(cValues);
-
- ASSERT(!eventHandler);
-
- if (timers) {
- deleteAllValues(*timers);
- delete timers;
- }
-}
-
-- (void)disconnectStream:(WebNetscapePluginStream*)stream
-{
- streams.remove(stream);
-}
-
-- (void)dealloc
-{
- ASSERT(!isStarted);
-
- [sourceURL release];
- [_error release];
- [pluginPackage release];
- [MIMEType release];
- [baseURL release];
- [pendingFrameLoads release];
- [element release];
-
- ASSERT(!plugin);
-
- [self fini];
-
- [super dealloc];
-}
-
-- (void)finalize
-{
- ASSERT_MAIN_THREAD();
- ASSERT(!isStarted);
-
- [self fini];
-
- [super finalize];
-}
-
-- (void)drawRect:(NSRect)rect
-{
- if (drawingModel == NPDrawingModelCoreAnimation)
- return;
-
- if (!isStarted)
- return;
-
- if ([NSGraphicsContext currentContextDrawingToScreen])
- [self sendDrawRectEvent:rect];
- else {
- NSBitmapImageRep *printedPluginBitmap = [self _printedPluginBitmap];
- if (printedPluginBitmap) {
- // Flip the bitmap before drawing because the QuickDraw port is flipped relative
- // to this view.
- CGContextRef cgContext = (CGContextRef)[[NSGraphicsContext currentContext] graphicsPort];
- CGContextSaveGState(cgContext);
- NSRect bounds = [self bounds];
- CGContextTranslateCTM(cgContext, 0.0f, NSHeight(bounds));
- CGContextScaleCTM(cgContext, 1.0f, -1.0f);
- [printedPluginBitmap drawInRect:bounds];
- CGContextRestoreGState(cgContext);
- }
- }
-}
-
-- (BOOL)isFlipped
-{
- return YES;
-}
-
-- (void)renewGState
-{
- [super renewGState];
-
- // -renewGState is called whenever the view's geometry changes. It's a little hacky to override this method, but
- // much safer than walking up the view hierarchy and observing frame/bounds changed notifications, since you don't
- // have to track subsequent changes to the view hierarchy and add/remove notification observers.
- // NSOpenGLView uses the exact same technique to reshape its OpenGL surface.
- [self _viewHasMoved];
-}
-
--(void)tellQuickTimeToChill
-{
-#ifndef NP_NO_QUICKDRAW
- ASSERT(isDrawingModelQuickDraw(drawingModel));
-
- // Make a call to the secret QuickDraw API that makes QuickTime calm down.
- WindowRef windowRef = (WindowRef)[[self window] windowRef];
- if (!windowRef) {
- return;
- }
- CGrafPtr port = GetWindowPort(windowRef);
- ::Rect bounds;
- GetPortBounds(port, &bounds);
- WKCallDrawingNotification(port, &bounds);
-#endif /* NP_NO_QUICKDRAW */
+ [self destroyPlugin];
}
- (void)viewWillMoveToWindow:(NSWindow *)newWindow
{
- if (isDrawingModelQuickDraw(drawingModel))
- [self tellQuickTimeToChill];
-
// We must remove the tracking rect before we move to the new window.
// Once we move to the new window, it will be too late.
[self removeTrackingRect];
@@ -1617,7 +387,7 @@ static inline void getNPRect(const NSRect& nr, NPRect& npr)
// Workaround for: <rdar://problem/3822871> resignFirstResponder is not sent to first responder view when it is removed from the window
[self setHasFocus:NO];
-
+
if (!newWindow) {
if ([[self webView] hostWindow]) {
// View will be moved out of the actual window but it still has a host window.
@@ -1625,7 +395,7 @@ static inline void getNPRect(const NSRect& nr, NPRect& npr)
} else {
// View will have no associated windows.
[self stop];
-
+
// Stop observing WebPreferencesChangedNotification -- we only need to observe this when installed in the view hierarchy.
// When not in the view hierarchy, -viewWillMoveToWindow: and -viewDidMoveToWindow will start/stop the plugin as needed.
[[NSNotificationCenter defaultCenter] removeObserver:self name:WebPreferencesChangedNotification object:nil];
@@ -1655,10 +425,10 @@ static inline void getNPRect(const NSRect& nr, NPRect& npr)
// While in the view hierarchy, observe WebPreferencesChangedNotification so that we can start/stop depending
// on whether plugins are enabled.
[[NSNotificationCenter defaultCenter] addObserver:self
- selector:@selector(preferencesHaveChanged:)
- name:WebPreferencesChangedNotification
- object:nil];
-
+ selector:@selector(preferencesHaveChanged:)
+ name:WebPreferencesChangedNotification
+ object:nil];
+
// View moved to an actual window. Start it if not already started.
[self start];
[self restartTimers];
@@ -1676,7 +446,7 @@ static inline void getNPRect(const NSRect& nr, NPRect& npr)
if (!hostWindow && ![self window]) {
// View will have no associated windows.
[self stop];
-
+
// Remove WebPreferencesChangedNotification observer -- we will observe once again when we move back into the window
[[NSNotificationCenter defaultCenter] removeObserver:self name:WebPreferencesChangedNotification object:nil];
}
@@ -1702,9 +472,6 @@ static inline void getNPRect(const NSRect& nr, NPRect& npr)
[self sendActivateEvent:YES];
[self setNeedsDisplay:YES];
[self restartTimers];
-#ifndef NP_NO_CARBON
- SetUserFocusWindow((WindowRef)[[self window] windowRef]);
-#endif // NP_NO_CARBON
}
- (void)windowResignedKey:(NSNotification *)notification
@@ -1721,7 +488,7 @@ static inline void getNPRect(const NSRect& nr, NPRect& npr)
- (void)windowDidDeminiaturize:(NSNotification *)notification
{
- [self stopTimers];
+ [self restartTimers];
}
- (void)loginWindowDidSwitchFromUser:(NSNotification *)notification
@@ -1739,7 +506,7 @@ static inline void getNPRect(const NSRect& nr, NPRect& npr)
WebPreferences *preferences = [[self webView] preferences];
BOOL arePlugInsEnabled = [preferences arePlugInsEnabled];
- if ([notification object] == preferences && isStarted != arePlugInsEnabled) {
+ if ([notification object] == preferences && _isStarted != arePlugInsEnabled) {
if (arePlugInsEnabled) {
if ([self currentWindow]) {
[self start];
@@ -1751,1198 +518,100 @@ static inline void getNPRect(const NSRect& nr, NPRect& npr)
}
}
-- (NPObject *)createPluginScriptableObject
-{
- if (!NPP_GetValue || ![self isStarted])
- return NULL;
-
- NPObject *value = NULL;
- NPError error;
- [self willCallPlugInFunction];
- {
- JSC::JSLock::DropAllLocks dropAllLocks(false);
- error = NPP_GetValue(plugin, NPPVpluginScriptableNPObject, &value);
- }
- [self didCallPlugInFunction];
- if (error != NPERR_NO_ERROR)
- return NULL;
-
- return value;
-}
-
-- (void)willCallPlugInFunction
-{
- ASSERT(plugin);
-
- // Could try to prevent infinite recursion here, but it's probably not worth the effort.
- pluginFunctionCallDepth++;
-}
-
-- (void)didCallPlugInFunction
-{
- ASSERT(pluginFunctionCallDepth > 0);
- pluginFunctionCallDepth--;
-
- // If -stop was called while we were calling into a plug-in function, and we're no longer
- // inside a plug-in function, stop now.
- if (pluginFunctionCallDepth == 0 && shouldStopSoon) {
- shouldStopSoon = NO;
- [self stop];
- }
-}
-
--(void)pluginView:(NSView *)pluginView receivedResponse:(NSURLResponse *)response
-{
- ASSERT(_loadManually);
- ASSERT(!_manualStream);
-
- _manualStream = WebNetscapePluginStream::create(core([self webFrame])->loader());
-}
-
-- (void)pluginView:(NSView *)pluginView receivedData:(NSData *)data
-{
- ASSERT(_loadManually);
- ASSERT(_manualStream);
-
- _dataLengthReceived += [data length];
-
- if (![self isStarted])
- return;
-
- if (!_manualStream->plugin()) {
-
- _manualStream->setRequestURL([[[self dataSource] request] URL]);
- _manualStream->setPlugin([self plugin]);
- ASSERT(_manualStream->plugin());
-
- _manualStream->startStreamWithResponse([[self dataSource] response]);
- }
-
- if (_manualStream->plugin())
- _manualStream->didReceiveData(0, static_cast<const char *>([data bytes]), [data length]);
-}
-
-- (void)pluginView:(NSView *)pluginView receivedError:(NSError *)error
-{
- ASSERT(_loadManually);
-
- [error retain];
- [_error release];
- _error = error;
-
- if (![self isStarted]) {
- return;
- }
-
- _manualStream->destroyStreamWithError(error);
-}
-
-- (void)pluginViewFinishedLoading:(NSView *)pluginView
-{
- ASSERT(_loadManually);
- ASSERT(_manualStream);
-
- if ([self isStarted])
- _manualStream->didFinishLoading(0);
-}
-
-#pragma mark NSTextInput implementation
-
-- (NSTextInputContext *)inputContext
-{
-#ifndef NP_NO_CARBON
- if (![self isStarted] || eventModel == NPEventModelCarbon)
- return nil;
-#endif
-
- return [super inputContext];
-}
-
-- (BOOL)hasMarkedText
-{
- ASSERT(eventModel == NPEventModelCocoa);
- ASSERT([self isStarted]);
-
- if (textInputFuncs && textInputFuncs->hasMarkedText)
- return textInputFuncs->hasMarkedText(plugin);
-
- return NO;
-}
-
-- (void)insertText:(id)aString
-{
- ASSERT(eventModel == NPEventModelCocoa);
- ASSERT([self isStarted]);
-
- if (textInputFuncs && textInputFuncs->insertText)
- textInputFuncs->insertText(plugin, aString);
-}
-
-- (NSRange)markedRange
-{
- ASSERT(eventModel == NPEventModelCocoa);
- ASSERT([self isStarted]);
-
- if (textInputFuncs && textInputFuncs->markedRange)
- return textInputFuncs->markedRange(plugin);
-
- return NSMakeRange(NSNotFound, 0);
-}
-
-- (NSRange)selectedRange
-{
- ASSERT(eventModel == NPEventModelCocoa);
- ASSERT([self isStarted]);
-
- if (textInputFuncs && textInputFuncs->selectedRange)
- return textInputFuncs->selectedRange(plugin);
-
- return NSMakeRange(NSNotFound, 0);
-}
-
-- (void)setMarkedText:(id)aString selectedRange:(NSRange)selRange
-{
- ASSERT(eventModel == NPEventModelCocoa);
- ASSERT([self isStarted]);
-
- if (textInputFuncs && textInputFuncs->setMarkedText)
- textInputFuncs->setMarkedText(plugin, aString, selRange);
-}
-
-- (void)unmarkText
-{
- ASSERT(eventModel == NPEventModelCocoa);
- ASSERT([self isStarted]);
-
- if (textInputFuncs && textInputFuncs->unmarkText)
- textInputFuncs->unmarkText(plugin);
-}
-
-- (NSArray *)validAttributesForMarkedText
-{
- ASSERT(eventModel == NPEventModelCocoa);
- ASSERT([self isStarted]);
-
- if (textInputFuncs && textInputFuncs->validAttributesForMarkedText)
- return textInputFuncs->validAttributesForMarkedText(plugin);
-
- return [NSArray array];
-}
-
-- (NSAttributedString *)attributedSubstringFromRange:(NSRange)theRange
-{
- ASSERT(eventModel == NPEventModelCocoa);
- ASSERT([self isStarted]);
-
- if (textInputFuncs && textInputFuncs->attributedSubstringFromRange)
- return textInputFuncs->attributedSubstringFromRange(plugin, theRange);
-
- return nil;
-}
-
-- (NSUInteger)characterIndexForPoint:(NSPoint)thePoint
-{
- ASSERT(eventModel == NPEventModelCocoa);
- ASSERT([self isStarted]);
-
- if (textInputFuncs && textInputFuncs->characterIndexForPoint) {
- // Convert the point to window coordinates
- NSPoint point = [[self window] convertScreenToBase:thePoint];
-
- // And view coordinates
- point = [self convertPoint:point fromView:nil];
-
- return textInputFuncs->characterIndexForPoint(plugin, point);
- }
-
- return NSNotFound;
-}
-
-- (void)doCommandBySelector:(SEL)aSelector
-{
- ASSERT(eventModel == NPEventModelCocoa);
- ASSERT([self isStarted]);
-
- if (textInputFuncs && textInputFuncs->doCommandBySelector)
- textInputFuncs->doCommandBySelector(plugin, aSelector);
-}
-
-- (NSRect)firstRectForCharacterRange:(NSRange)theRange
-{
- ASSERT(eventModel == NPEventModelCocoa);
- ASSERT([self isStarted]);
-
- if (textInputFuncs && textInputFuncs->firstRectForCharacterRange) {
- NSRect rect = textInputFuncs->firstRectForCharacterRange(plugin, theRange);
-
- // Convert the rect to window coordinates
- rect = [self convertRect:rect toView:nil];
-
- // Convert the rect location to screen coordinates
- rect.origin = [[self window] convertBaseToScreen:rect.origin];
-
- return rect;
- }
-
- return NSZeroRect;
-}
-
-// test for 10.4 because of <rdar://problem/4243463>
-#ifdef BUILDING_ON_TIGER
-- (long)conversationIdentifier
-{
- return (long)self;
-}
-#else
-- (NSInteger)conversationIdentifier
-{
- return (NSInteger)self;
-}
-#endif
-
-@end
-
-@implementation WebBaseNetscapePluginView (WebNPPCallbacks)
-
-- (NSMutableURLRequest *)requestWithURLCString:(const char *)URLCString
-{
- if (!URLCString)
- return nil;
-
- CFStringRef string = CFStringCreateWithCString(kCFAllocatorDefault, URLCString, kCFStringEncodingISOLatin1);
- ASSERT(string); // All strings should be representable in ISO Latin 1
-
- NSString *URLString = [(NSString *)string _web_stringByStrippingReturnCharacters];
- NSURL *URL = [NSURL _web_URLWithDataAsString:URLString relativeToURL:baseURL];
- CFRelease(string);
- if (!URL)
- return nil;
-
- NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:URL];
- Frame* frame = core([self webFrame]);
- if (!frame)
- return nil;
- [request _web_setHTTPReferrer:frame->loader()->outgoingReferrer()];
- return request;
-}
-
-- (void)evaluateJavaScriptPluginRequest:(WebPluginRequest *)JSPluginRequest
+- (void)renewGState
{
- // FIXME: Is this isStarted check needed here? evaluateJavaScriptPluginRequest should not be called
- // if we are stopped since this method is called after a delay and we call
- // cancelPreviousPerformRequestsWithTarget inside of stop.
- if (!isStarted) {
- return;
- }
-
- NSURL *URL = [[JSPluginRequest request] URL];
- NSString *JSString = [URL _webkit_scriptIfJavaScriptURL];
- ASSERT(JSString);
+ [super renewGState];
- NSString *result = [[self webFrame] _stringByEvaluatingJavaScriptFromString:JSString forceUserGesture:[JSPluginRequest isCurrentEventUserGesture]];
+ // -renewGState is called whenever the view's geometry changes. It's a little hacky to override this method, but
+ // much safer than walking up the view hierarchy and observing frame/bounds changed notifications, since you don't
+ // have to track subsequent changes to the view hierarchy and add/remove notification observers.
+ // NSOpenGLView uses the exact same technique to reshape its OpenGL surface.
- // Don't continue if stringByEvaluatingJavaScriptFromString caused the plug-in to stop.
- if (!isStarted) {
+ // All of the work this method does may safely be skipped if the view is not in a window. When the view
+ // is moved back into a window, everything should be set up correctly.
+ if (![self window])
return;
- }
-
- if ([JSPluginRequest frameName] != nil) {
- // FIXME: If the result is a string, we probably want to put that string into the frame.
- if ([JSPluginRequest sendNotification]) {
- [self willCallPlugInFunction];
- {
- JSC::JSLock::DropAllLocks dropAllLocks(false);
- NPP_URLNotify(plugin, [URL _web_URLCString], NPRES_DONE, [JSPluginRequest notifyData]);
- }
- [self didCallPlugInFunction];
- }
- } else if ([result length] > 0) {
- // Don't call NPP_NewStream and other stream methods if there is no JS result to deliver. This is what Mozilla does.
- NSData *JSData = [result dataUsingEncoding:NSUTF8StringEncoding];
-
- RefPtr<WebNetscapePluginStream> stream = WebNetscapePluginStream::create([NSURLRequest requestWithURL:URL], plugin, [JSPluginRequest sendNotification], [JSPluginRequest notifyData]);
-
- RetainPtr<NSURLResponse> response(AdoptNS, [[NSURLResponse alloc] initWithURL:URL
- MIMEType:@"text/plain"
- expectedContentLength:[JSData length]
- textEncodingName:nil]);
-
- stream->startStreamWithResponse(response.get());
- stream->didReceiveData(0, static_cast<const char*>([JSData bytes]), [JSData length]);
- stream->didFinishLoading(0);
- }
-}
-
-- (void)webFrame:(WebFrame *)webFrame didFinishLoadWithReason:(NPReason)reason
-{
- ASSERT(isStarted);
- WebPluginRequest *pluginRequest = [pendingFrameLoads objectForKey:webFrame];
- ASSERT(pluginRequest != nil);
- ASSERT([pluginRequest sendNotification]);
-
- [self willCallPlugInFunction];
- {
- JSC::JSLock::DropAllLocks dropAllLocks(false);
- NPP_URLNotify(plugin, [[[pluginRequest request] URL] _web_URLCString], reason, [pluginRequest notifyData]);
- }
- [self didCallPlugInFunction];
+ [self updateAndSetWindow];
- [pendingFrameLoads removeObjectForKey:webFrame];
- [webFrame _setInternalLoadDelegate:nil];
-}
-
-- (void)webFrame:(WebFrame *)webFrame didFinishLoadWithError:(NSError *)error
-{
- NPReason reason = NPRES_DONE;
- if (error != nil)
- reason = WebNetscapePluginStream::reasonForError(error);
- [self webFrame:webFrame didFinishLoadWithReason:reason];
-}
-
-- (void)loadPluginRequest:(WebPluginRequest *)pluginRequest
-{
- NSURLRequest *request = [pluginRequest request];
- NSString *frameName = [pluginRequest frameName];
- WebFrame *frame = nil;
-
- NSURL *URL = [request URL];
- NSString *JSString = [URL _webkit_scriptIfJavaScriptURL];
-
- ASSERT(frameName || JSString);
-
- if (frameName) {
- // FIXME - need to get rid of this window creation which
- // bypasses normal targeted link handling
- frame = kit(core([self webFrame])->loader()->findFrameForNavigation(frameName));
- if (frame == nil) {
- WebView *currentWebView = [self webView];
- NSDictionary *features = [[NSDictionary alloc] init];
- WebView *newWebView = [[currentWebView _UIDelegateForwarder] webView:currentWebView
- createWebViewWithRequest:nil
- windowFeatures:features];
- [features release];
-
- if (!newWebView) {
- if ([pluginRequest sendNotification]) {
- [self willCallPlugInFunction];
- {
- JSC::JSLock::DropAllLocks dropAllLocks(false);
- NPP_URLNotify(plugin, [[[pluginRequest request] URL] _web_URLCString], NPERR_GENERIC_ERROR, [pluginRequest notifyData]);
- }
- [self didCallPlugInFunction];
- }
- return;
- }
-
- frame = [newWebView mainFrame];
- core(frame)->tree()->setName(frameName);
- [[newWebView _UIDelegateForwarder] webViewShow:newWebView];
- }
- }
-
- if (JSString) {
- ASSERT(frame == nil || [self webFrame] == frame);
- [self evaluateJavaScriptPluginRequest:pluginRequest];
- } else {
- [frame loadRequest:request];
- if ([pluginRequest sendNotification]) {
- // Check if another plug-in view or even this view is waiting for the frame to load.
- // If it is, tell it that the load was cancelled because it will be anyway.
- WebBaseNetscapePluginView *view = [frame _internalLoadDelegate];
- if (view != nil) {
- ASSERT([view isKindOfClass:[WebBaseNetscapePluginView class]]);
- [view webFrame:frame didFinishLoadWithReason:NPRES_USER_BREAK];
- }
- [pendingFrameLoads _webkit_setObject:pluginRequest forUncopiedKey:frame];
- [frame _setInternalLoadDelegate:self];
- }
- }
-}
-
-- (NPError)loadRequest:(NSMutableURLRequest *)request inTarget:(const char *)cTarget withNotifyData:(void *)notifyData sendNotification:(BOOL)sendNotification
-{
- NSURL *URL = [request URL];
-
- if (!URL)
- return NPERR_INVALID_URL;
-
- // Don't allow requests to be loaded when the document loader is stopping all loaders.
- if ([[self dataSource] _documentLoader]->isStopping())
- return NPERR_GENERIC_ERROR;
-
- NSString *target = nil;
- if (cTarget) {
- // Find the frame given the target string.
- target = [NSString stringWithCString:cTarget encoding:NSISOLatin1StringEncoding];
- }
- WebFrame *frame = [self webFrame];
-
- // don't let a plugin start any loads if it is no longer part of a document that is being
- // displayed unless the loads are in the same frame as the plugin.
- if ([[self dataSource] _documentLoader] != core([self webFrame])->loader()->activeDocumentLoader() &&
- (!cTarget || [frame findFrameNamed:target] != frame)) {
- return NPERR_GENERIC_ERROR;
- }
-
- NSString *JSString = [URL _webkit_scriptIfJavaScriptURL];
- if (JSString != nil) {
- if (![[[self webView] preferences] isJavaScriptEnabled]) {
- // Return NPERR_GENERIC_ERROR if JS is disabled. This is what Mozilla does.
- return NPERR_GENERIC_ERROR;
- } else if (cTarget == NULL && mode == NP_FULL) {
- // Don't allow a JavaScript request from a standalone plug-in that is self-targetted
- // because this can cause the user to be redirected to a blank page (3424039).
- return NPERR_INVALID_PARAM;
- }
- } else {
- if (!FrameLoader::canLoad(URL, String(), core([self webFrame])->document()))
- return NPERR_GENERIC_ERROR;
- }
-
- if (cTarget || JSString) {
- // Make when targetting a frame or evaluating a JS string, perform the request after a delay because we don't
- // want to potentially kill the plug-in inside of its URL request.
-
- if (JSString && target && [frame findFrameNamed:target] != frame) {
- // For security reasons, only allow JS requests to be made on the frame that contains the plug-in.
- return NPERR_INVALID_PARAM;
- }
-
- bool currentEventIsUserGesture = false;
- if (eventHandler)
- currentEventIsUserGesture = eventHandler->currentEventIsUserGesture();
-
- WebPluginRequest *pluginRequest = [[WebPluginRequest alloc] initWithRequest:request
- frameName:target
- notifyData:notifyData
- sendNotification:sendNotification
- didStartFromUserGesture:currentEventIsUserGesture];
- [self performSelector:@selector(loadPluginRequest:) withObject:pluginRequest afterDelay:0];
- [pluginRequest release];
- } else {
- RefPtr<WebNetscapePluginStream> stream = WebNetscapePluginStream::create(request, plugin, sendNotification, notifyData);
-
- streams.add(stream.get());
- stream->start();
- }
-
- return NPERR_NO_ERROR;
-}
-
--(NPError)getURLNotify:(const char *)URLCString target:(const char *)cTarget notifyData:(void *)notifyData
-{
- LOG(Plugins, "NPN_GetURLNotify: %s target: %s", URLCString, cTarget);
-
- NSMutableURLRequest *request = [self requestWithURLCString:URLCString];
- return [self loadRequest:request inTarget:cTarget withNotifyData:notifyData sendNotification:YES];
-}
-
--(NPError)getURL:(const char *)URLCString target:(const char *)cTarget
-{
- LOG(Plugins, "NPN_GetURL: %s target: %s", URLCString, cTarget);
-
- NSMutableURLRequest *request = [self requestWithURLCString:URLCString];
- return [self loadRequest:request inTarget:cTarget withNotifyData:NULL sendNotification:NO];
-}
-
-- (NPError)_postURL:(const char *)URLCString
- target:(const char *)target
- len:(UInt32)len
- buf:(const char *)buf
- file:(NPBool)file
- notifyData:(void *)notifyData
- sendNotification:(BOOL)sendNotification
- allowHeaders:(BOOL)allowHeaders
-{
- if (!URLCString || !len || !buf) {
- return NPERR_INVALID_PARAM;
- }
-
- NSData *postData = nil;
-
- if (file) {
- // If we're posting a file, buf is either a file URL or a path to the file.
- NSString *bufString = (NSString *)CFStringCreateWithCString(kCFAllocatorDefault, buf, kCFStringEncodingWindowsLatin1);
- if (!bufString) {
- return NPERR_INVALID_PARAM;
- }
- NSURL *fileURL = [NSURL _web_URLWithDataAsString:bufString];
- NSString *path;
- if ([fileURL isFileURL]) {
- path = [fileURL path];
- } else {
- path = bufString;
- }
- postData = [NSData dataWithContentsOfFile:[path _webkit_fixedCarbonPOSIXPath]];
- CFRelease(bufString);
- if (!postData) {
- return NPERR_FILE_NOT_FOUND;
- }
- } else {
- postData = [NSData dataWithBytes:buf length:len];
- }
-
- if ([postData length] == 0) {
- return NPERR_INVALID_PARAM;
- }
-
- NSMutableURLRequest *request = [self requestWithURLCString:URLCString];
- [request setHTTPMethod:@"POST"];
-
- if (allowHeaders) {
- if ([postData _web_startsWithBlankLine]) {
- postData = [postData subdataWithRange:NSMakeRange(1, [postData length] - 1)];
- } else {
- NSInteger location = [postData _web_locationAfterFirstBlankLine];
- if (location != NSNotFound) {
- // If the blank line is somewhere in the middle of postData, everything before is the header.
- NSData *headerData = [postData subdataWithRange:NSMakeRange(0, location)];
- NSMutableDictionary *header = [headerData _webkit_parseRFC822HeaderFields];
- unsigned dataLength = [postData length] - location;
-
- // Sometimes plugins like to set Content-Length themselves when they post,
- // but WebFoundation does not like that. So we will remove the header
- // and instead truncate the data to the requested length.
- NSString *contentLength = [header objectForKey:@"Content-Length"];
-
- if (contentLength != nil)
- dataLength = MIN((unsigned)[contentLength intValue], dataLength);
- [header removeObjectForKey:@"Content-Length"];
-
- if ([header count] > 0) {
- [request setAllHTTPHeaderFields:header];
- }
- // Everything after the blank line is the actual content of the POST.
- postData = [postData subdataWithRange:NSMakeRange(location, dataLength)];
-
- }
- }
- if ([postData length] == 0) {
- return NPERR_INVALID_PARAM;
- }
- }
-
- // Plug-ins expect to receive uncached data when doing a POST (3347134).
- [request setCachePolicy:NSURLRequestReloadIgnoringCacheData];
- [request setHTTPBody:postData];
-
- return [self loadRequest:request inTarget:target withNotifyData:notifyData sendNotification:sendNotification];
-}
-
-- (NPError)postURLNotify:(const char *)URLCString
- target:(const char *)target
- len:(UInt32)len
- buf:(const char *)buf
- file:(NPBool)file
- notifyData:(void *)notifyData
-{
- LOG(Plugins, "NPN_PostURLNotify: %s", URLCString);
- return [self _postURL:URLCString target:target len:len buf:buf file:file notifyData:notifyData sendNotification:YES allowHeaders:YES];
-}
-
--(NPError)postURL:(const char *)URLCString
- target:(const char *)target
- len:(UInt32)len
- buf:(const char *)buf
- file:(NPBool)file
-{
- LOG(Plugins, "NPN_PostURL: %s", URLCString);
- // As documented, only allow headers to be specified via NPP_PostURL when using a file.
- return [self _postURL:URLCString target:target len:len buf:buf file:file notifyData:NULL sendNotification:NO allowHeaders:file];
-}
-
--(NPError)newStream:(NPMIMEType)type target:(const char *)target stream:(NPStream**)stream
-{
- LOG(Plugins, "NPN_NewStream");
- return NPERR_GENERIC_ERROR;
-}
-
--(NPError)write:(NPStream*)stream len:(SInt32)len buffer:(void *)buffer
-{
- LOG(Plugins, "NPN_Write");
- return NPERR_GENERIC_ERROR;
-}
-
--(NPError)destroyStream:(NPStream*)stream reason:(NPReason)reason
-{
- LOG(Plugins, "NPN_DestroyStream");
- // This function does a sanity check to ensure that the NPStream provided actually
- // belongs to the plug-in that provided it, which fixes a crash in the DivX
- // plug-in: <rdar://problem/5093862> | http://bugs.webkit.org/show_bug.cgi?id=13203
- if (!stream || WebNetscapePluginStream::ownerForStream(stream) != plugin) {
- LOG(Plugins, "Invalid NPStream passed to NPN_DestroyStream: %p", stream);
- return NPERR_INVALID_INSTANCE_ERROR;
- }
-
- WebNetscapePluginStream* browserStream = static_cast<WebNetscapePluginStream*>(stream->ndata);
- browserStream->cancelLoadAndDestroyStreamWithError(browserStream->errorForReason(reason));
-
- return NPERR_NO_ERROR;
-}
-
-- (const char *)userAgent
-{
- return [[[self webView] userAgentForURL:baseURL] UTF8String];
-}
-
--(void)status:(const char *)message
-{
- if (!message) {
- LOG_ERROR("NPN_Status passed a NULL status message");
- return;
- }
-
- CFStringRef status = CFStringCreateWithCString(NULL, message, kCFStringEncodingUTF8);
- if (!status) {
- LOG_ERROR("NPN_Status: the message was not valid UTF-8");
- return;
- }
+ [self resetTrackingRect];
- LOG(Plugins, "NPN_Status: %@", status);
- WebView *wv = [self webView];
- [[wv _UIDelegateForwarder] webView:wv setStatusText:(NSString *)status];
- CFRelease(status);
-}
-
--(void)invalidateRect:(NPRect *)invalidRect
-{
- LOG(Plugins, "NPN_InvalidateRect");
- [self setNeedsDisplayInRect:NSMakeRect(invalidRect->left, invalidRect->top,
- (float)invalidRect->right - invalidRect->left, (float)invalidRect->bottom - invalidRect->top)];
+ // Check to see if the plugin view is completely obscured (scrolled out of view, for example).
+ // For performance reasons, we send null events at a lower rate to plugins which are obscured.
+ BOOL oldIsObscured = _isCompletelyObscured;
+ _isCompletelyObscured = NSIsEmptyRect([self visibleRect]);
+ if (_isCompletelyObscured != oldIsObscured)
+ [self restartTimers];
}
--(BOOL)isOpaque
+- (BOOL)becomeFirstResponder
{
+ [self setHasFocus:YES];
return YES;
}
-- (void)invalidateRegion:(NPRegion)invalidRegion
-{
- LOG(Plugins, "NPN_InvalidateRegion");
- NSRect invalidRect = NSZeroRect;
- switch (drawingModel) {
-#ifndef NP_NO_QUICKDRAW
- case NPDrawingModelQuickDraw:
- {
- ::Rect qdRect;
- GetRegionBounds((NPQDRegion)invalidRegion, &qdRect);
- invalidRect = NSMakeRect(qdRect.left, qdRect.top, qdRect.right - qdRect.left, qdRect.bottom - qdRect.top);
- }
- break;
-#endif /* NP_NO_QUICKDRAW */
-
- case NPDrawingModelCoreGraphics:
- {
- CGRect cgRect = CGPathGetBoundingBox((NPCGRegion)invalidRegion);
- invalidRect = *(NSRect*)&cgRect;
- break;
- }
- default:
- ASSERT_NOT_REACHED();
- break;
- }
-
- [self setNeedsDisplayInRect:invalidRect];
-}
-
--(void)forceRedraw
-{
- LOG(Plugins, "forceRedraw");
- [self setNeedsDisplay:YES];
- [[self window] displayIfNeeded];
-}
-
-static NPBrowserTextInputFuncs *browserTextInputFuncs()
-{
- static NPBrowserTextInputFuncs inputFuncs = {
- 0,
- sizeof(NPBrowserTextInputFuncs),
- NPN_MarkedTextAbandoned,
- NPN_MarkedTextSelectionChanged
- };
-
- return &inputFuncs;
-}
-
-- (NPError)getVariable:(NPNVariable)variable value:(void *)value
-{
- switch (variable) {
- case NPNVWindowNPObject:
- {
- Frame* frame = core([self webFrame]);
- NPObject* windowScriptObject = frame ? frame->script()->windowScriptNPObject() : 0;
-
- // Return value is expected to be retained, as described here: <http://www.mozilla.org/projects/plugins/npruntime.html#browseraccess>
- if (windowScriptObject)
- _NPN_RetainObject(windowScriptObject);
-
- void **v = (void **)value;
- *v = windowScriptObject;
-
- return NPERR_NO_ERROR;
- }
-
- case NPNVPluginElementNPObject:
- {
- if (!element)
- return NPERR_GENERIC_ERROR;
-
- NPObject *plugInScriptObject = (NPObject *)[element _NPObject];
-
- // Return value is expected to be retained, as described here: <http://www.mozilla.org/projects/plugins/npruntime.html#browseraccess>
- if (plugInScriptObject)
- _NPN_RetainObject(plugInScriptObject);
-
- void **v = (void **)value;
- *v = plugInScriptObject;
-
- return NPERR_NO_ERROR;
- }
-
- case NPNVpluginDrawingModel:
- {
- *(NPDrawingModel *)value = drawingModel;
- return NPERR_NO_ERROR;
- }
-
-#ifndef NP_NO_QUICKDRAW
- case NPNVsupportsQuickDrawBool:
- {
- *(NPBool *)value = TRUE;
- return NPERR_NO_ERROR;
- }
-#endif /* NP_NO_QUICKDRAW */
-
- case NPNVsupportsCoreGraphicsBool:
- {
- *(NPBool *)value = TRUE;
- return NPERR_NO_ERROR;
- }
-
- case NPNVsupportsOpenGLBool:
- {
- *(NPBool *)value = FALSE;
- return NPERR_NO_ERROR;
- }
-
- case NPNVsupportsCoreAnimationBool:
- {
-#ifdef BUILDING_ON_TIGER
- *(NPBool *)value = FALSE;
-#else
- *(NPBool *)value = TRUE;
-#endif
- return NPERR_NO_ERROR;
- }
-
-#ifndef NP_NO_CARBON
- case NPNVsupportsCarbonBool:
- {
- *(NPBool *)value = TRUE;
- return NPERR_NO_ERROR;
- }
-#endif /* NP_NO_CARBON */
-
- case NPNVsupportsCocoaBool:
- {
- *(NPBool *)value = TRUE;
- return NPERR_NO_ERROR;
- }
-
- case NPNVbrowserTextInputFuncs:
- {
- if (eventModel == NPEventModelCocoa) {
- *(NPBrowserTextInputFuncs **)value = browserTextInputFuncs();
- return NPERR_NO_ERROR;
- }
- }
- default:
- break;
- }
-
- return NPERR_GENERIC_ERROR;
-}
-
-- (NPError)setVariable:(NPPVariable)variable value:(void *)value
-{
- switch (variable) {
- case NPPVpluginWindowBool:
- {
- NPWindowType newWindowType = (value ? NPWindowTypeWindow : NPWindowTypeDrawable);
-
- // Redisplay if window type is changing (some drawing models can only have their windows set while updating).
- if (newWindowType != window.type)
- [self setNeedsDisplay:YES];
-
- window.type = newWindowType;
- }
-
- case NPPVpluginTransparentBool:
- {
- BOOL newTransparent = (value != 0);
-
- // Redisplay if transparency is changing
- if (isTransparent != newTransparent)
- [self setNeedsDisplay:YES];
-
- isTransparent = newTransparent;
-
- return NPERR_NO_ERROR;
- }
-
- case NPPVpluginDrawingModel:
- {
- // Can only set drawing model inside NPP_New()
- if (self != [[self class] currentPluginView])
- return NPERR_GENERIC_ERROR;
-
- // Check for valid, supported drawing model
- NPDrawingModel newDrawingModel = (NPDrawingModel)(uintptr_t)value;
- switch (newDrawingModel) {
- // Supported drawing models:
-#ifndef NP_NO_QUICKDRAW
- case NPDrawingModelQuickDraw:
-#endif
- case NPDrawingModelCoreGraphics:
- drawingModel = newDrawingModel;
- return NPERR_NO_ERROR;
-
- case NPDrawingModelCoreAnimation:
- drawingModel = newDrawingModel;
- return NPERR_NO_ERROR;
-
-
- // Unsupported (or unknown) drawing models:
- default:
- LOG(Plugins, "Plugin %@ uses unsupported drawing model: %d", pluginPackage, drawingModel);
- return NPERR_GENERIC_ERROR;
- }
- }
-
- case NPPVpluginEventModel:
- {
- // Can only set event model inside NPP_New()
- if (self != [[self class] currentPluginView])
- return NPERR_GENERIC_ERROR;
-
- // Check for valid, supported event model
- NPEventModel newEventModel = (NPEventModel)(uintptr_t)value;
- switch (newEventModel) {
- // Supported event models:
-#ifndef NP_NO_CARBON
- case NPEventModelCarbon:
-#endif
- case NPEventModelCocoa:
- eventModel = newEventModel;
- return NPERR_NO_ERROR;
-
- // Unsupported (or unknown) event models:
- default:
- LOG(Plugins, "Plugin %@ uses unsupported event model: %d", pluginPackage, eventModel);
- return NPERR_GENERIC_ERROR;
- }
- }
-
- default:
- return NPERR_GENERIC_ERROR;
- }
-}
-
-- (uint32)scheduleTimerWithInterval:(uint32)interval repeat:(NPBool)repeat timerFunc:(void (*)(NPP npp, uint32 timerID))timerFunc
-{
- if (!timerFunc)
- return 0;
-
- if (!timers)
- timers = new HashMap<uint32, PluginTimer*>;
-
- uint32 timerID = ++currentTimerID;
-
- PluginTimer* timer = new PluginTimer(plugin, timerID, interval, repeat, timerFunc);
- timers->set(timerID, timer);
-
- if (shouldFireTimers)
- timer->start(isCompletelyObscured);
-
- return 0;
-}
-
-- (void)unscheduleTimer:(uint32)timerID
-{
- if (!timers)
- return;
-
- if (PluginTimer* timer = timers->take(timerID))
- delete timer;
-}
-
-- (NPError)popUpContextMenu:(NPMenu *)menu
+- (BOOL)resignFirstResponder
{
- NSEvent *currentEvent = [NSApp currentEvent];
-
- // NPN_PopUpContextMenu must be called from within the plug-in's NPP_HandleEvent.
- if (!currentEvent)
- return NPERR_GENERIC_ERROR;
-
- [NSMenu popUpContextMenu:(NSMenu *)menu withEvent:currentEvent forView:self];
- return NPERR_NO_ERROR;
+ [self setHasFocus:NO];
+ return YES;
}
-@end
-
-@implementation WebPluginRequest
-
-- (id)initWithRequest:(NSURLRequest *)request frameName:(NSString *)frameName notifyData:(void *)notifyData sendNotification:(BOOL)sendNotification didStartFromUserGesture:(BOOL)currentEventIsUserGesture
+- (WebDataSource *)dataSource
{
- [super init];
- _didStartFromUserGesture = currentEventIsUserGesture;
- _request = [request retain];
- _frameName = [frameName retain];
- _notifyData = notifyData;
- _sendNotification = sendNotification;
- return self;
+ WebFrame *webFrame = kit(core(_element.get())->document()->frame());
+ return [webFrame _dataSource];
}
-- (void)dealloc
+- (WebFrame *)webFrame
{
- [_request release];
- [_frameName release];
- [super dealloc];
+ return [[self dataSource] webFrame];
}
-- (NSURLRequest *)request
+- (WebView *)webView
{
- return _request;
+ return [[self webFrame] webView];
}
-- (NSString *)frameName
+- (NSWindow *)currentWindow
{
- return _frameName;
+ return [self window] ? [self window] : [[self webView] hostWindow];
}
-- (BOOL)isCurrentEventUserGesture
-{
- return _didStartFromUserGesture;
-}
+// We want to treat these as regular keyboard events.
-- (BOOL)sendNotification
+- (void)cut:(id)sender
{
- return _sendNotification;
+ [self keyDown:[NSApp currentEvent]];
}
-- (void *)notifyData
+- (void)copy:(id)sender
{
- return _notifyData;
+ [self keyDown:[NSApp currentEvent]];
}
-@end
-
-@implementation WebBaseNetscapePluginView (Internal)
-
-- (NPError)_createPlugin
-{
- plugin = (NPP)calloc(1, sizeof(NPP_t));
- plugin->ndata = self;
-
- ASSERT(NPP_New);
-
- // NPN_New(), which creates the plug-in instance, should never be called while calling a plug-in function for that instance.
- ASSERT(pluginFunctionCallDepth == 0);
-
- Frame* frame = core([self webFrame]);
- if (!frame)
- return NPERR_GENERIC_ERROR;
- Page* page = frame->page();
- if (!page)
- return NPERR_GENERIC_ERROR;
-
- bool wasDeferring = page->defersLoading();
- if (!wasDeferring)
- page->setDefersLoading(true);
-
- PluginMainThreadScheduler::scheduler().registerPlugin(plugin);
-
- [[self class] setCurrentPluginView:self];
- NPError npErr = NPP_New((char *)[MIMEType cString], plugin, mode, argsCount, cAttributes, cValues, NULL);
- [[self class] setCurrentPluginView:nil];
-
- if (!wasDeferring)
- page->setDefersLoading(false);
-
- LOG(Plugins, "NPP_New: %d", npErr);
- return npErr;
-}
-
-- (void)_destroyPlugin
+- (void)paste:(id)sender
{
- PluginMainThreadScheduler::scheduler().unregisterPlugin(plugin);
-
- NPError npErr;
- npErr = NPP_Destroy(plugin, NULL);
- LOG(Plugins, "NPP_Destroy: %d", npErr);
-
- if (Frame* frame = core([self webFrame]))
- frame->script()->cleanupScriptObjectsForPlugin(self);
-
- free(plugin);
- plugin = NULL;
+ [self keyDown:[NSApp currentEvent]];
}
-- (void)_viewHasMoved
+- (void)selectAll:(id)sender
{
- // All of the work this method does may safely be skipped if the view is not in a window. When the view
- // is moved back into a window, everything should be set up correctly.
- if (![self window])
- return;
-
- if (isDrawingModelQuickDraw(drawingModel))
- [self tellQuickTimeToChill];
-
- if (drawingModel == NPDrawingModelCoreGraphics || isDrawingModelQuickDraw(drawingModel))
- [self updateAndSetWindow];
-
- [self resetTrackingRect];
-
- // Check to see if the plugin view is completely obscured (scrolled out of view, for example).
- // For performance reasons, we send null events at a lower rate to plugins which are obscured.
- BOOL oldIsObscured = isCompletelyObscured;
- isCompletelyObscured = NSIsEmptyRect([self visibleRect]);
- if (isCompletelyObscured != oldIsObscured)
- [self restartTimers];
+ [self keyDown:[NSApp currentEvent]];
}
-- (NSBitmapImageRep *)_printedPluginBitmap
+// AppKit doesn't call mouseDown or mouseUp on right-click. Simulate control-click
+// mouseDown and mouseUp so plug-ins get the right-click event as they do in Carbon (3125743).
+- (void)rightMouseDown:(NSEvent *)theEvent
{
-#ifdef NP_NO_QUICKDRAW
- return nil;
-#else
- // Cannot print plugins that do not implement NPP_Print
- if (!NPP_Print)
- return nil;
-
- // This NSBitmapImageRep will share its bitmap buffer with a GWorld that the plugin will draw into.
- // The bitmap is created in 32-bits-per-pixel ARGB format, which is the default GWorld pixel format.
- NSBitmapImageRep *bitmap = [[[NSBitmapImageRep alloc] initWithBitmapDataPlanes:NULL
- pixelsWide:window.width
- pixelsHigh:window.height
- bitsPerSample:8
- samplesPerPixel:4
- hasAlpha:YES
- isPlanar:NO
- colorSpaceName:NSDeviceRGBColorSpace
- bitmapFormat:NSAlphaFirstBitmapFormat
- bytesPerRow:0
- bitsPerPixel:0] autorelease];
- ASSERT(bitmap);
-
- // Create a GWorld with the same underlying buffer into which the plugin can draw
- ::Rect printGWorldBounds;
- SetRect(&printGWorldBounds, 0, 0, window.width, window.height);
- GWorldPtr printGWorld;
- if (NewGWorldFromPtr(&printGWorld,
- k32ARGBPixelFormat,
- &printGWorldBounds,
- NULL,
- NULL,
- 0,
- (Ptr)[bitmap bitmapData],
- [bitmap bytesPerRow]) != noErr) {
- LOG_ERROR("Could not create GWorld for printing");
- return nil;
- }
-
- /// Create NPWindow for the GWorld
- NPWindow printNPWindow;
- printNPWindow.window = &printGWorld; // Normally this is an NP_Port, but when printing it is the actual CGrafPtr
- printNPWindow.x = 0;
- printNPWindow.y = 0;
- printNPWindow.width = window.width;
- printNPWindow.height = window.height;
- printNPWindow.clipRect.top = 0;
- printNPWindow.clipRect.left = 0;
- printNPWindow.clipRect.right = window.width;
- printNPWindow.clipRect.bottom = window.height;
- printNPWindow.type = NPWindowTypeDrawable; // Offscreen graphics port as opposed to a proper window
-
- // Create embed-mode NPPrint
- NPPrint npPrint;
- npPrint.mode = NP_EMBED;
- npPrint.print.embedPrint.window = printNPWindow;
- npPrint.print.embedPrint.platformPrint = printGWorld;
-
- // Tell the plugin to print into the GWorld
- [self willCallPlugInFunction];
- {
- JSC::JSLock::DropAllLocks dropAllLocks(false);
- NPP_Print(plugin, &npPrint);
- }
- [self didCallPlugInFunction];
-
- // Don't need the GWorld anymore
- DisposeGWorld(printGWorld);
-
- return bitmap;
-#endif
+ [self mouseDown:theEvent];
}
-- (void)_redeliverStream
+- (void)rightMouseUp:(NSEvent *)theEvent
{
- if ([self dataSource] && [self isStarted]) {
- // Deliver what has not been passed to the plug-in up to this point.
- if (_dataLengthReceived > 0) {
- NSData *data = [[[self dataSource] data] subdataWithRange:NSMakeRange(0, _dataLengthReceived)];
- _dataLengthReceived = 0;
- [self pluginView:self receivedData:data];
- if (![[self dataSource] isLoading]) {
- if (_error)
- [self pluginView:self receivedError:_error];
- else
- [self pluginViewFinishedLoading:self];
- }
- }
- }
+ [self mouseUp:theEvent];
}
@end
-@implementation NSData (PluginExtras)
+#endif // ENABLE(NETSCAPE_PLUGIN_API)
-- (BOOL)_web_startsWithBlankLine
-{
- return [self length] > 0 && ((const char *)[self bytes])[0] == '\n';
-}
-
-
-- (NSInteger)_web_locationAfterFirstBlankLine
-{
- const char *bytes = (const char *)[self bytes];
- unsigned length = [self length];
-
- unsigned i;
- for (i = 0; i < length - 4; i++) {
-
- // Support for Acrobat. It sends "\n\n".
- if (bytes[i] == '\n' && bytes[i+1] == '\n') {
- return i+2;
- }
-
- // Returns the position after 2 CRLF's or 1 CRLF if it is the first line.
- if (bytes[i] == '\r' && bytes[i+1] == '\n') {
- i += 2;
- if (i == 2) {
- return i;
- } else if (bytes[i] == '\n') {
- // Support for Director. It sends "\r\n\n" (3880387).
- return i+1;
- } else if (bytes[i] == '\r' && bytes[i+1] == '\n') {
- // Support for Flash. It sends "\r\n\r\n" (3758113).
- return i+2;
- }
- }
- }
- return NSNotFound;
-}
-
-@end
-#endif
diff --git a/WebKit/mac/Plugins/WebBasePluginPackage.m b/WebKit/mac/Plugins/WebBasePluginPackage.mm
index 03d438b..7b5ef8e 100644
--- a/WebKit/mac/Plugins/WebBasePluginPackage.m
+++ b/WebKit/mac/Plugins/WebBasePluginPackage.mm
@@ -33,6 +33,7 @@
#import <WebKit/WebNSObjectExtras.h>
#import <WebKit/WebPluginPackage.h>
#import <WebCore/WebCoreObjCExtras.h>
+#import <runtime/InitializeThreading.h>
#import <wtf/Assertions.h>
#import <wtf/Vector.h>
@@ -59,12 +60,13 @@
@implementation WebBasePluginPackage
-#ifndef BUILDING_ON_TIGER
+ (void)initialize
{
+ JSC::initializeThreading();
+#ifndef BUILDING_ON_TIGER
WebCoreObjCFinalizeOnMainThread(self);
-}
#endif
+}
+ (WebBasePluginPackage *)pluginWithPath:(NSString *)pluginPath
{
diff --git a/WebKit/mac/Plugins/WebNetscapePluginEventHandler.h b/WebKit/mac/Plugins/WebNetscapePluginEventHandler.h
index 54402bb..d00796f 100644
--- a/WebKit/mac/Plugins/WebNetscapePluginEventHandler.h
+++ b/WebKit/mac/Plugins/WebNetscapePluginEventHandler.h
@@ -26,18 +26,18 @@
#ifndef WebNetscapePluginEventHandler_h
#define WebNetscapePluginEventHandler_h
-#import "WebBaseNetscapePluginView.h"
+#import "WebNetscapePluginView.h"
#if ENABLE(NETSCAPE_PLUGIN_API)
@class NSEvent;
-@class WebBaseNetscapePluginView;
+@class WebNetscapePluginView;
struct CGRect;
class WebNetscapePluginEventHandler {
public:
- static WebNetscapePluginEventHandler* create(WebBaseNetscapePluginView*);
+ static WebNetscapePluginEventHandler* create(WebNetscapePluginView*);
virtual ~WebNetscapePluginEventHandler() { }
virtual void drawRect(const NSRect&) = 0;
@@ -65,13 +65,13 @@ public:
bool currentEventIsUserGesture() const { return m_currentEventIsUserGesture; }
protected:
- WebNetscapePluginEventHandler(WebBaseNetscapePluginView* pluginView)
+ WebNetscapePluginEventHandler(WebNetscapePluginView* pluginView)
: m_pluginView(pluginView)
, m_currentEventIsUserGesture(false)
{
}
- WebBaseNetscapePluginView* m_pluginView;
+ WebNetscapePluginView* m_pluginView;
bool m_currentEventIsUserGesture;
};
diff --git a/WebKit/mac/Plugins/WebNetscapePluginEventHandler.mm b/WebKit/mac/Plugins/WebNetscapePluginEventHandler.mm
index e8e6d8a..c886d7b 100644
--- a/WebKit/mac/Plugins/WebNetscapePluginEventHandler.mm
+++ b/WebKit/mac/Plugins/WebNetscapePluginEventHandler.mm
@@ -28,11 +28,11 @@
#import "WebNetscapePluginEventHandler.h"
#import <wtf/Assertions.h>
-#import "WebBaseNetscapePluginView.h"
+#import "WebNetscapePluginView.h"
#import "WebNetscapePluginEventHandlerCarbon.h"
#import "WebNetscapePluginEventHandlerCocoa.h"
-WebNetscapePluginEventHandler* WebNetscapePluginEventHandler::create(WebBaseNetscapePluginView* pluginView)
+WebNetscapePluginEventHandler* WebNetscapePluginEventHandler::create(WebNetscapePluginView* pluginView)
{
switch ([pluginView eventModel]) {
#ifndef NP_NO_CARBON
diff --git a/WebKit/mac/Plugins/WebNetscapePluginEventHandlerCarbon.h b/WebKit/mac/Plugins/WebNetscapePluginEventHandlerCarbon.h
index cf26276..b01922a 100644
--- a/WebKit/mac/Plugins/WebNetscapePluginEventHandlerCarbon.h
+++ b/WebKit/mac/Plugins/WebNetscapePluginEventHandlerCarbon.h
@@ -35,7 +35,7 @@
class WebNetscapePluginEventHandlerCarbon : public WebNetscapePluginEventHandler {
public:
- WebNetscapePluginEventHandlerCarbon(WebBaseNetscapePluginView*);
+ WebNetscapePluginEventHandlerCarbon(WebNetscapePluginView*);
virtual void drawRect(const NSRect&);
diff --git a/WebKit/mac/Plugins/WebNetscapePluginEventHandlerCarbon.mm b/WebKit/mac/Plugins/WebNetscapePluginEventHandlerCarbon.mm
index bfdd91c..7612322 100644
--- a/WebKit/mac/Plugins/WebNetscapePluginEventHandlerCarbon.mm
+++ b/WebKit/mac/Plugins/WebNetscapePluginEventHandlerCarbon.mm
@@ -27,7 +27,7 @@
#import "WebNetscapePluginEventHandlerCarbon.h"
-#import "WebBaseNetscapePluginView.h"
+#import "WebNetscapePluginView.h"
#import "WebKitLogging.h"
#import "WebKitSystemInterface.h"
@@ -35,7 +35,7 @@
#define NullEventIntervalActive 0.02
#define NullEventIntervalNotActive 0.25
-WebNetscapePluginEventHandlerCarbon::WebNetscapePluginEventHandlerCarbon(WebBaseNetscapePluginView* pluginView)
+WebNetscapePluginEventHandlerCarbon::WebNetscapePluginEventHandlerCarbon(WebNetscapePluginView* pluginView)
: WebNetscapePluginEventHandler(pluginView)
, m_keyEventHandler(0)
, m_suspendKeyUpEvents(false)
@@ -265,11 +265,14 @@ void WebNetscapePluginEventHandlerCarbon::focusChanged(bool hasFocus)
void WebNetscapePluginEventHandlerCarbon::windowFocusChanged(bool hasFocus)
{
+ WindowRef windowRef = (WindowRef)[[m_pluginView window] windowRef];
+
+ SetUserFocusWindow(windowRef);
+
EventRecord event;
getCarbonEvent(&event);
event.what = activateEvt;
- WindowRef windowRef = (WindowRef)[[m_pluginView window] windowRef];
event.message = (unsigned long)windowRef;
if (hasFocus)
event.modifiers |= activeFlag;
diff --git a/WebKit/mac/Plugins/WebNetscapePluginEventHandlerCocoa.h b/WebKit/mac/Plugins/WebNetscapePluginEventHandlerCocoa.h
index e22ff3d..8b6f6e7 100644
--- a/WebKit/mac/Plugins/WebNetscapePluginEventHandlerCocoa.h
+++ b/WebKit/mac/Plugins/WebNetscapePluginEventHandlerCocoa.h
@@ -33,7 +33,7 @@
class WebNetscapePluginEventHandlerCocoa : public WebNetscapePluginEventHandler {
public:
- WebNetscapePluginEventHandlerCocoa(WebBaseNetscapePluginView*);
+ WebNetscapePluginEventHandlerCocoa(WebNetscapePluginView*);
virtual void drawRect(const NSRect&);
diff --git a/WebKit/mac/Plugins/WebNetscapePluginEventHandlerCocoa.mm b/WebKit/mac/Plugins/WebNetscapePluginEventHandlerCocoa.mm
index fb13a12..288a356 100644
--- a/WebKit/mac/Plugins/WebNetscapePluginEventHandlerCocoa.mm
+++ b/WebKit/mac/Plugins/WebNetscapePluginEventHandlerCocoa.mm
@@ -27,9 +27,9 @@
#import "WebNetscapePluginEventHandlerCocoa.h"
-#import "WebBaseNetscapePluginView.h"
+#import "WebNetscapePluginView.h"
-WebNetscapePluginEventHandlerCocoa::WebNetscapePluginEventHandlerCocoa(WebBaseNetscapePluginView* pluginView)
+WebNetscapePluginEventHandlerCocoa::WebNetscapePluginEventHandlerCocoa(WebNetscapePluginView* pluginView)
: WebNetscapePluginEventHandler(pluginView)
{
}
diff --git a/WebKit/mac/Plugins/WebNetscapePluginPackage.h b/WebKit/mac/Plugins/WebNetscapePluginPackage.h
index 6ccbfdb..010956d 100644
--- a/WebKit/mac/Plugins/WebNetscapePluginPackage.h
+++ b/WebKit/mac/Plugins/WebNetscapePluginPackage.h
@@ -52,26 +52,16 @@ typedef enum {
ResFileRefNum resourceRef;
- NPP_NewProcPtr NPP_New;
- NPP_DestroyProcPtr NPP_Destroy;
- NPP_SetWindowProcPtr NPP_SetWindow;
- NPP_NewStreamProcPtr NPP_NewStream;
- NPP_DestroyStreamProcPtr NPP_DestroyStream;
- NPP_StreamAsFileProcPtr NPP_StreamAsFile;
- NPP_WriteReadyProcPtr NPP_WriteReady;
- NPP_WriteProcPtr NPP_Write;
- NPP_PrintProcPtr NPP_Print;
- NPP_HandleEventProcPtr NPP_HandleEvent;
- NPP_URLNotifyProcPtr NPP_URLNotify;
- NPP_GetValueProcPtr NPP_GetValue;
- NPP_SetValueProcPtr NPP_SetValue;
- NPP_ShutdownProcPtr NPP_Shutdown;
- NPP_GetJavaClassProcPtr NPP_GetJavaClass;
+ NPP_ShutdownProcPtr NP_Shutdown;
BOOL isLoaded;
BOOL needsUnload;
unsigned int instanceCount;
-
+
+#if USE(PLUGIN_HOST_PROCESS)
+ cpu_type_t pluginHostArchitecture;
+#endif
+
#ifdef SUPPORT_CFM
BOOL isBundle;
BOOL isCFM;
@@ -85,21 +75,11 @@ typedef enum {
- (void)close;
- (WebExecutableType)executableType;
-
-- (NPP_NewProcPtr)NPP_New;
-- (NPP_DestroyProcPtr)NPP_Destroy;
-- (NPP_SetWindowProcPtr)NPP_SetWindow;
-- (NPP_NewStreamProcPtr)NPP_NewStream;
-- (NPP_WriteReadyProcPtr)NPP_WriteReady;
-- (NPP_WriteProcPtr)NPP_Write;
-- (NPP_StreamAsFileProcPtr)NPP_StreamAsFile;
-- (NPP_DestroyStreamProcPtr)NPP_DestroyStream;
-- (NPP_HandleEventProcPtr)NPP_HandleEvent;
-- (NPP_URLNotifyProcPtr)NPP_URLNotify;
-- (NPP_GetValueProcPtr)NPP_GetValue;
-- (NPP_SetValueProcPtr)NPP_SetValue;
-- (NPP_PrintProcPtr)NPP_Print;
- (NPPluginFuncs *)pluginFuncs;
+#if USE(PLUGIN_HOST_PROCESS)
+- (cpu_type_t)pluginHostArchitecture;
+#endif
+
@end
#endif
diff --git a/WebKit/mac/Plugins/WebNetscapePluginPackage.m b/WebKit/mac/Plugins/WebNetscapePluginPackage.m
index 0767c1d..b3ad0bd 100644
--- a/WebKit/mac/Plugins/WebNetscapePluginPackage.m
+++ b/WebKit/mac/Plugins/WebNetscapePluginPackage.m
@@ -236,9 +236,20 @@ static TransitionVector tVectorForFunctionPointer(FunctionPointer);
if (hasCFMHeader)
return NO;
#endif
+
+#if USE(PLUGIN_HOST_PROCESS)
+ NSArray *archs = [bundle executableArchitectures];
+ if ([archs containsObject:[NSNumber numberWithInteger:NSBundleExecutableArchitectureX86_64]])
+ pluginHostArchitecture = CPU_TYPE_X86_64;
+ else if ([archs containsObject:[NSNumber numberWithInteger:NSBundleExecutableArchitectureI386]])
+ pluginHostArchitecture = CPU_TYPE_X86;
+ else
+ return NO;
+#else
if (![self isNativeLibraryData:data])
return NO;
+#endif
}
if (![self getPluginInfoFromPLists] && ![self getPluginInfoFromResources])
@@ -272,6 +283,13 @@ static TransitionVector tVectorForFunctionPointer(FunctionPointer);
return WebMachOExecutableType;
}
+#if USE(PLUGIN_HOST_PROCESS)
+- (cpu_type_t)pluginHostArchitecture
+{
+ return pluginHostArchitecture;
+}
+#endif
+
- (void)launchRealPlayer
{
CFURLRef appURL = NULL;
@@ -346,8 +364,8 @@ static TransitionVector tVectorForFunctionPointer(FunctionPointer);
#endif
NP_Initialize = (NP_InitializeFuncPtr)CFBundleGetFunctionPointerForName(cfBundle, CFSTR("NP_Initialize"));
NP_GetEntryPoints = (NP_GetEntryPointsFuncPtr)CFBundleGetFunctionPointerForName(cfBundle, CFSTR("NP_GetEntryPoints"));
- NPP_Shutdown = (NPP_ShutdownProcPtr)CFBundleGetFunctionPointerForName(cfBundle, CFSTR("NP_Shutdown"));
- if (!NP_Initialize || !NP_GetEntryPoints || !NPP_Shutdown)
+ NP_Shutdown = (NPP_ShutdownProcPtr)CFBundleGetFunctionPointerForName(cfBundle, CFSTR("NP_Shutdown"));
+ if (!NP_Initialize || !NP_GetEntryPoints || !NP_Shutdown)
goto abort;
#ifdef SUPPORT_CFM
}
@@ -439,9 +457,11 @@ static TransitionVector tVectorForFunctionPointer(FunctionPointer);
browserFuncs.createobject = (NPN_CreateObjectProcPtr)tVectorForFunctionPointer((FunctionPointer)_NPN_CreateObject);
browserFuncs.retainobject = (NPN_RetainObjectProcPtr)tVectorForFunctionPointer((FunctionPointer)_NPN_RetainObject);
browserFuncs.releaseobject = (NPN_ReleaseObjectProcPtr)tVectorForFunctionPointer((FunctionPointer)_NPN_ReleaseObject);
+ browserFuncs.hasmethod = (NPN_HasMethodProcPtr)tVectorForFunctionPointer((FunctionPointer)_NPN_HasProperty);
browserFuncs.invoke = (NPN_InvokeProcPtr)tVectorForFunctionPointer((FunctionPointer)_NPN_Invoke);
browserFuncs.invokeDefault = (NPN_InvokeDefaultProcPtr)tVectorForFunctionPointer((FunctionPointer)_NPN_InvokeDefault);
browserFuncs.evaluate = (NPN_EvaluateProcPtr)tVectorForFunctionPointer((FunctionPointer)_NPN_Evaluate);
+ browserFuncs.hasproperty = (NPN_HasPropertyProcPtr)tVectorForFunctionPointer((FunctionPointer)_NPN_HasProperty);
browserFuncs.getproperty = (NPN_GetPropertyProcPtr)tVectorForFunctionPointer((FunctionPointer)_NPN_GetProperty);
browserFuncs.setproperty = (NPN_SetPropertyProcPtr)tVectorForFunctionPointer((FunctionPointer)_NPN_SetProperty);
browserFuncs.removeproperty = (NPN_RemovePropertyProcPtr)tVectorForFunctionPointer((FunctionPointer)_NPN_RemoveProperty);
@@ -457,7 +477,7 @@ static TransitionVector tVectorForFunctionPointer(FunctionPointer);
LOG(Plugins, "%f main timing started", mainStart);
NPP_ShutdownProcPtr shutdownFunction;
npErr = pluginMainFunc(&browserFuncs, &pluginFuncs, &shutdownFunction);
- NPP_Shutdown = (NPP_ShutdownProcPtr)functionPointerForTVector((TransitionVector)shutdownFunction);
+ NP_Shutdown = (NPP_ShutdownProcPtr)functionPointerForTVector((TransitionVector)shutdownFunction);
if (!isBundle)
// Don't free pluginMainFunc if we got it from a bundle because it is owned by CFBundle in that case.
free(pluginMainFunc);
@@ -479,24 +499,24 @@ static TransitionVector tVectorForFunctionPointer(FunctionPointer);
pluginVersion = pluginFuncs.version;
LOG(Plugins, "pluginMainFunc: %d, size=%d, version=%d", npErr, pluginSize, pluginVersion);
- NPP_New = (NPP_NewProcPtr)functionPointerForTVector((TransitionVector)pluginFuncs.newp);
- NPP_Destroy = (NPP_DestroyProcPtr)functionPointerForTVector((TransitionVector)pluginFuncs.destroy);
- NPP_SetWindow = (NPP_SetWindowProcPtr)functionPointerForTVector((TransitionVector)pluginFuncs.setwindow);
- NPP_NewStream = (NPP_NewStreamProcPtr)functionPointerForTVector((TransitionVector)pluginFuncs.newstream);
- NPP_DestroyStream = (NPP_DestroyStreamProcPtr)functionPointerForTVector((TransitionVector)pluginFuncs.destroystream);
- NPP_StreamAsFile = (NPP_StreamAsFileProcPtr)functionPointerForTVector((TransitionVector)pluginFuncs.asfile);
- NPP_WriteReady = (NPP_WriteReadyProcPtr)functionPointerForTVector((TransitionVector)pluginFuncs.writeready);
- NPP_Write = (NPP_WriteProcPtr)functionPointerForTVector((TransitionVector)pluginFuncs.write);
- NPP_Print = (NPP_PrintProcPtr)functionPointerForTVector((TransitionVector)pluginFuncs.print);
- NPP_HandleEvent = (NPP_HandleEventProcPtr)functionPointerForTVector((TransitionVector)pluginFuncs.event);
- NPP_URLNotify = (NPP_URLNotifyProcPtr)functionPointerForTVector((TransitionVector)pluginFuncs.urlnotify);
- NPP_GetValue = (NPP_GetValueProcPtr)functionPointerForTVector((TransitionVector)pluginFuncs.getvalue);
- NPP_SetValue = (NPP_SetValueProcPtr)functionPointerForTVector((TransitionVector)pluginFuncs.setvalue);
+ pluginFuncs.newp = (NPP_NewProcPtr)functionPointerForTVector((TransitionVector)pluginFuncs.newp);
+ pluginFuncs.destroy = (NPP_DestroyProcPtr)functionPointerForTVector((TransitionVector)pluginFuncs.destroy);
+ pluginFuncs.setwindow = (NPP_SetWindowProcPtr)functionPointerForTVector((TransitionVector)pluginFuncs.setwindow);
+ pluginFuncs.newstream = (NPP_NewStreamProcPtr)functionPointerForTVector((TransitionVector)pluginFuncs.newstream);
+ pluginFuncs.destroystream = (NPP_DestroyStreamProcPtr)functionPointerForTVector((TransitionVector)pluginFuncs.destroystream);
+ pluginFuncs.asfile = (NPP_StreamAsFileProcPtr)functionPointerForTVector((TransitionVector)pluginFuncs.asfile);
+ pluginFuncs.writeready = (NPP_WriteReadyProcPtr)functionPointerForTVector((TransitionVector)pluginFuncs.writeready);
+ pluginFuncs.write = (NPP_WriteProcPtr)functionPointerForTVector((TransitionVector)pluginFuncs.write);
+ pluginFuncs.print = (NPP_PrintProcPtr)functionPointerForTVector((TransitionVector)pluginFuncs.print);
+ pluginFuncs.event = (NPP_HandleEventProcPtr)functionPointerForTVector((TransitionVector)pluginFuncs.event);
+ pluginFuncs.urlnotify = (NPP_URLNotifyProcPtr)functionPointerForTVector((TransitionVector)pluginFuncs.urlnotify);
+ pluginFuncs.getvalue = (NPP_GetValueProcPtr)functionPointerForTVector((TransitionVector)pluginFuncs.getvalue);
+ pluginFuncs.setvalue = (NPP_SetValueProcPtr)functionPointerForTVector((TransitionVector)pluginFuncs.setvalue);
// LiveConnect support
- NPP_GetJavaClass = (NPP_GetJavaClassProcPtr)functionPointerForTVector((TransitionVector)pluginFuncs.javaClass);
- if (NPP_GetJavaClass) {
- LOG(LiveConnect, "%@: CFM entry point for NPP_GetJavaClass = %p", [self name], NPP_GetJavaClass);
+ pluginFuncs.javaClass = (NPP_GetJavaClassProcPtr)functionPointerForTVector((TransitionVector)pluginFuncs.javaClass);
+ if (pluginFuncs.javaClass) {
+ LOG(LiveConnect, "%@: CFM entry point for NPP_GetJavaClass = %p", [self name], pluginFuncs.javaClass);
} else {
LOG(LiveConnect, "%@: no entry point for NPP_GetJavaClass", [self name]);
}
@@ -546,9 +566,11 @@ static TransitionVector tVectorForFunctionPointer(FunctionPointer);
browserFuncs.createobject = _NPN_CreateObject;
browserFuncs.retainobject = _NPN_RetainObject;
browserFuncs.releaseobject = _NPN_ReleaseObject;
+ browserFuncs.hasmethod = _NPN_HasMethod;
browserFuncs.invoke = _NPN_Invoke;
browserFuncs.invokeDefault = _NPN_InvokeDefault;
browserFuncs.evaluate = _NPN_Evaluate;
+ browserFuncs.hasproperty = _NPN_HasProperty;
browserFuncs.getproperty = _NPN_GetProperty;
browserFuncs.setproperty = _NPN_SetProperty;
browserFuncs.removeproperty = _NPN_RemoveProperty;
@@ -580,27 +602,10 @@ static TransitionVector tVectorForFunctionPointer(FunctionPointer);
pluginSize = pluginFuncs.size;
pluginVersion = pluginFuncs.version;
- NPP_New = pluginFuncs.newp;
- NPP_Destroy = pluginFuncs.destroy;
- NPP_SetWindow = pluginFuncs.setwindow;
- NPP_NewStream = pluginFuncs.newstream;
- NPP_DestroyStream = pluginFuncs.destroystream;
- NPP_StreamAsFile = pluginFuncs.asfile;
- NPP_WriteReady = pluginFuncs.writeready;
- NPP_Write = pluginFuncs.write;
- NPP_Print = pluginFuncs.print;
- NPP_HandleEvent = pluginFuncs.event;
- NPP_URLNotify = pluginFuncs.urlnotify;
- NPP_GetValue = pluginFuncs.getvalue;
- NPP_SetValue = pluginFuncs.setvalue;
-
- // LiveConnect support
- NPP_GetJavaClass = pluginFuncs.javaClass;
- if (NPP_GetJavaClass){
- LOG(LiveConnect, "%@: mach-o entry point for NPP_GetJavaClass = %p", [self name], NPP_GetJavaClass);
- } else {
+ if (pluginFuncs.javaClass)
+ LOG(LiveConnect, "%@: mach-o entry point for NPP_GetJavaClass = %p", [self name], pluginFuncs.javaClass);
+ else
LOG(LiveConnect, "%@: no entry point for NPP_GetJavaClass", [self name]);
- }
#ifdef SUPPORT_CFM
}
@@ -619,69 +624,6 @@ abort:
return NO;
}
-- (NPP_SetWindowProcPtr)NPP_SetWindow
-{
- return NPP_SetWindow;
-}
-
-- (NPP_NewProcPtr)NPP_New
-{
- return NPP_New;
-}
-
-- (NPP_DestroyProcPtr)NPP_Destroy
-{
- return NPP_Destroy;
-}
-
-- (NPP_NewStreamProcPtr)NPP_NewStream
-{
- return NPP_NewStream;
-}
-
-- (NPP_StreamAsFileProcPtr)NPP_StreamAsFile
-{
- return NPP_StreamAsFile;
-}
-- (NPP_DestroyStreamProcPtr)NPP_DestroyStream
-{
- return NPP_DestroyStream;
-}
-
-- (NPP_WriteReadyProcPtr)NPP_WriteReady
-{
- return NPP_WriteReady;
-}
-- (NPP_WriteProcPtr)NPP_Write
-{
- return NPP_Write;
-}
-
-- (NPP_HandleEventProcPtr)NPP_HandleEvent
-{
- return NPP_HandleEvent;
-}
-
--(NPP_URLNotifyProcPtr)NPP_URLNotify
-{
- return NPP_URLNotify;
-}
-
--(NPP_GetValueProcPtr)NPP_GetValue
-{
- return NPP_GetValue;
-}
-
--(NPP_SetValueProcPtr)NPP_SetValue
-{
- return NPP_SetValue;
-}
-
--(NPP_PrintProcPtr)NPP_Print
-{
- return NPP_Print;
-}
-
- (NPPluginFuncs *)pluginFuncs
{
return &pluginFuncs;
@@ -775,8 +717,8 @@ TransitionVector tVectorForFunctionPointer(FunctionPointer fp)
return;
}
- if (shutdown && NPP_Shutdown)
- NPP_Shutdown();
+ if (shutdown && NP_Shutdown)
+ NP_Shutdown();
if (resourceRef != -1)
[self closeResourceFile:resourceRef];
diff --git a/WebKit/mac/Plugins/WebNetscapePluginView.h b/WebKit/mac/Plugins/WebNetscapePluginView.h
new file mode 100644
index 0000000..9d2555b
--- /dev/null
+++ b/WebKit/mac/Plugins/WebNetscapePluginView.h
@@ -0,0 +1,174 @@
+/*
+ * Copyright (C) 2005, 2007 Apple Inc. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ * 3. Neither the name of Apple Computer, Inc. ("Apple") nor the names of
+ * its contributors may be used to endorse or promote products derived
+ * from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY APPLE AND ITS CONTRIBUTORS "AS IS" AND ANY
+ * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+ * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+ * DISCLAIMED. IN NO EVENT SHALL APPLE OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+ * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+ * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+ * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+ * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#if ENABLE(NETSCAPE_PLUGIN_API)
+
+#import "WebBaseNetscapePluginView.h"
+
+#import <WebKit/npfunctions.h>
+#import <WebKit/npapi.h>
+#import <wtf/HashMap.h>
+#import <wtf/HashSet.h>
+#import <wtf/OwnPtr.h>
+
+@class WebDataSource;
+@class WebFrame;
+@class WebNetscapePluginPackage;
+@class WebView;
+
+class PluginTimer;
+class WebNetscapePluginStream;
+class WebNetscapePluginEventHandler;
+
+typedef union PluginPort {
+#ifndef NP_NO_QUICKDRAW
+ NP_Port qdPort;
+#endif
+ NP_CGContext cgPort;
+} PluginPort;
+
+typedef struct _NPPluginTextInputFuncs NPPluginTextInputFuncs;
+
+// Because the Adobe 7.x Acrobat plug-in has a hard coded check for a view named
+// "WebNetscapePluginDocumentView", this class must retain the old name in order
+// for the plug-in to function correctly. (rdar://problem/4699455)
+#define WebNetscapePluginView WebNetscapePluginDocumentView
+
+@interface WebNetscapePluginView : WebBaseNetscapePluginView<WebPluginManualLoader, NSTextInput>
+{
+ RefPtr<WebNetscapePluginStream> _manualStream;
+#ifndef BUILDING_ON_TIGER
+ RetainPtr<CALayer> _pluginLayer;
+#endif
+ unsigned _dataLengthReceived;
+ RetainPtr<NSError> _error;
+
+ unsigned argsCount;
+ char **cAttributes;
+ char **cValues;
+
+ NPP plugin;
+ NPWindow window;
+ NPWindow lastSetWindow;
+ PluginPort nPort;
+ PluginPort lastSetPort;
+ NPDrawingModel drawingModel;
+ NPEventModel eventModel;
+
+#ifndef NP_NO_QUICKDRAW
+ // This is only valid when drawingModel is NPDrawingModelQuickDraw
+ GWorldPtr offscreenGWorld;
+#endif
+
+ OwnPtr<WebNetscapePluginEventHandler> _eventHandler;
+
+ BOOL inSetWindow;
+ BOOL shouldStopSoon;
+
+ uint32 currentTimerID;
+ HashMap<uint32, PluginTimer*>* timers;
+
+ unsigned pluginFunctionCallDepth;
+
+ int32 specifiedHeight;
+ int32 specifiedWidth;
+
+ HashSet<RefPtr<WebNetscapePluginStream> > streams;
+ RetainPtr<NSMutableDictionary> _pendingFrameLoads;
+
+ BOOL _isSilverlight;
+
+ NPPluginTextInputFuncs *textInputFuncs;
+}
+
++ (WebNetscapePluginView *)currentPluginView;
+
+
+- (id)initWithFrame:(NSRect)r
+ pluginPackage:(WebNetscapePluginPackage *)thePluginPackage
+ URL:(NSURL *)URL
+ baseURL:(NSURL *)baseURL
+ MIMEType:(NSString *)MIME
+ attributeKeys:(NSArray *)keys
+ attributeValues:(NSArray *)values
+ loadManually:(BOOL)loadManually
+ DOMElement:(DOMElement *)anElement;
+
+
+- (NPP)plugin;
+
+- (void)disconnectStream:(WebNetscapePluginStream*)stream;
+
+// Returns the NPObject that represents the plugin interface.
+// The return value is expected to be retained.
+- (NPObject *)createPluginScriptableObject;
+
+// -willCallPlugInFunction must be called before calling any of the NPP_* functions for this view's plugin.
+// This is necessary to ensure that plug-ins are not destroyed while WebKit calls into them. Some plug-ins (Flash
+// at least) are written with the assumption that nothing they do in their plug-in functions can cause NPP_Destroy()
+// to be called. Unfortunately, this is not true, especially if the plug-in uses NPN_Invoke() to execute a
+// document.write(), which clears the document and destroys the plug-in.
+// See <rdar://problem/4480737>.
+- (void)willCallPlugInFunction;
+
+// -didCallPlugInFunction should be called after returning from a plug-in function. It should be called exactly
+// once for every call to -willCallPlugInFunction.
+// See <rdar://problem/4480737>.
+- (void)didCallPlugInFunction;
+
+- (void)handleMouseMoved:(NSEvent *)event;
+
+@end
+
+@interface WebNetscapePluginView (WebInternal)
+- (BOOL)sendEvent:(void*)event isDrawRect:(BOOL)eventIsDrawRect;
+- (NPEventModel)eventModel;
+
+- (NPError)loadRequest:(NSURLRequest *)request inTarget:(NSString *)target withNotifyData:(void *)notifyData sendNotification:(BOOL)sendNotification;
+- (NPError)getURLNotify:(const char *)URL target:(const char *)target notifyData:(void *)notifyData;
+- (NPError)getURL:(const char *)URL target:(const char *)target;
+- (NPError)postURLNotify:(const char *)URL target:(const char *)target len:(UInt32)len buf:(const char *)buf file:(NPBool)file notifyData:(void *)notifyData;
+- (NPError)postURL:(const char *)URL target:(const char *)target len:(UInt32)len buf:(const char *)buf file:(NPBool)file;
+- (NPError)newStream:(NPMIMEType)type target:(const char *)target stream:(NPStream**)stream;
+- (NPError)write:(NPStream*)stream len:(SInt32)len buffer:(void *)buffer;
+- (NPError)destroyStream:(NPStream*)stream reason:(NPReason)reason;
+- (void)status:(const char *)message;
+- (const char *)userAgent;
+- (void)invalidateRect:(NPRect *)invalidRect;
+- (void)invalidateRegion:(NPRegion)invalidateRegion;
+- (void)forceRedraw;
+- (NPError)getVariable:(NPNVariable)variable value:(void *)value;
+- (NPError)setVariable:(NPPVariable)variable value:(void *)value;
+- (uint32)scheduleTimerWithInterval:(uint32)interval repeat:(NPBool)repeat timerFunc:(void (*)(NPP npp, uint32 timerID))timerFunc;
+- (void)unscheduleTimer:(uint32)timerID;
+- (NPError)popUpContextMenu:(NPMenu *)menu;
+
+@end
+
+#endif
+
diff --git a/WebKit/mac/Plugins/WebNetscapePluginView.mm b/WebKit/mac/Plugins/WebNetscapePluginView.mm
new file mode 100644
index 0000000..a792e21
--- /dev/null
+++ b/WebKit/mac/Plugins/WebNetscapePluginView.mm
@@ -0,0 +1,2338 @@
+/*
+ * Copyright (C) 2005, 2006, 2007 Apple Inc. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ * 3. Neither the name of Apple Computer, Inc. ("Apple") nor the names of
+ * its contributors may be used to endorse or promote products derived
+ * from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY APPLE AND ITS CONTRIBUTORS "AS IS" AND ANY
+ * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+ * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+ * DISCLAIMED. IN NO EVENT SHALL APPLE OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+ * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+ * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+ * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+ * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#if ENABLE(NETSCAPE_PLUGIN_API)
+
+#import "WebNetscapePluginView.h"
+
+#import "WebDataSourceInternal.h"
+#import "WebDefaultUIDelegate.h"
+#import "WebFrameInternal.h"
+#import "WebFrameView.h"
+#import "WebGraphicsExtras.h"
+#import "WebKitLogging.h"
+#import "WebKitNSStringExtras.h"
+#import "WebKitSystemInterface.h"
+#import "WebNSDataExtras.h"
+#import "WebNSDictionaryExtras.h"
+#import "WebNSObjectExtras.h"
+#import "WebNSURLExtras.h"
+#import "WebNSURLRequestExtras.h"
+#import "WebNSViewExtras.h"
+#import "WebNetscapePluginPackage.h"
+#import "WebBaseNetscapePluginStream.h"
+#import "WebNetscapePluginEventHandler.h"
+#import "WebNullPluginView.h"
+#import "WebPreferences.h"
+#import "WebPluginRequest.h"
+#import "WebViewInternal.h"
+#import "WebUIDelegatePrivate.h"
+#import <Carbon/Carbon.h>
+#import <runtime/JSLock.h>
+#import <WebCore/npruntime_impl.h>
+#import <WebCore/DocumentLoader.h>
+#import <WebCore/Element.h>
+#import <WebCore/Frame.h>
+#import <WebCore/FrameLoader.h>
+#import <WebCore/FrameTree.h>
+#import <WebCore/Page.h>
+#import <WebCore/PluginMainThreadScheduler.h>
+#import <WebCore/ScriptController.h>
+#import <WebCore/SoftLinking.h>
+#import <WebCore/WebCoreObjCExtras.h>
+#import <WebKit/nptextinput.h>
+#import <WebKit/DOMPrivate.h>
+#import <WebKit/WebUIDelegate.h>
+#import <runtime/InitializeThreading.h>
+#import <wtf/Assertions.h>
+#import <objc/objc-runtime.h>
+
+#define LoginWindowDidSwitchFromUserNotification @"WebLoginWindowDidSwitchFromUserNotification"
+#define LoginWindowDidSwitchToUserNotification @"WebLoginWindowDidSwitchToUserNotification"
+
+using namespace WebCore;
+
+static inline bool isDrawingModelQuickDraw(NPDrawingModel drawingModel)
+{
+#ifndef NP_NO_QUICKDRAW
+ return drawingModel == NPDrawingModelQuickDraw;
+#else
+ return false;
+#endif
+};
+
+@interface WebNetscapePluginView (Internal)
+- (NPError)_createPlugin;
+- (void)_destroyPlugin;
+- (NSBitmapImageRep *)_printedPluginBitmap;
+- (void)_redeliverStream;
+@end
+
+static WebNetscapePluginView *currentPluginView = nil;
+
+typedef struct OpaquePortState* PortState;
+
+static const double ThrottledTimerInterval = 0.25;
+
+class PluginTimer : public TimerBase {
+public:
+ typedef void (*TimerFunc)(NPP npp, uint32 timerID);
+
+ PluginTimer(NPP npp, uint32 timerID, uint32 interval, NPBool repeat, TimerFunc timerFunc)
+ : m_npp(npp)
+ , m_timerID(timerID)
+ , m_interval(interval)
+ , m_repeat(repeat)
+ , m_timerFunc(timerFunc)
+ {
+ }
+
+ void start(bool throttle)
+ {
+ ASSERT(!isActive());
+
+ double timeInterval = m_interval / 1000.0;
+
+ if (throttle)
+ timeInterval = max(timeInterval, ThrottledTimerInterval);
+
+ if (m_repeat)
+ startRepeating(timeInterval);
+ else
+ startOneShot(timeInterval);
+ }
+
+private:
+ virtual void fired()
+ {
+ m_timerFunc(m_npp, m_timerID);
+ if (!m_repeat)
+ delete this;
+ }
+
+ NPP m_npp;
+ uint32 m_timerID;
+ uint32 m_interval;
+ NPBool m_repeat;
+ TimerFunc m_timerFunc;
+};
+
+#ifndef NP_NO_QUICKDRAW
+
+// QuickDraw is not available in 64-bit
+
+typedef struct {
+ GrafPtr oldPort;
+ GDHandle oldDevice;
+ Point oldOrigin;
+ RgnHandle oldClipRegion;
+ RgnHandle oldVisibleRegion;
+ RgnHandle clipRegion;
+ BOOL forUpdate;
+} PortState_QD;
+
+#endif /* NP_NO_QUICKDRAW */
+
+typedef struct {
+ CGContextRef context;
+} PortState_CG;
+
+@class NSTextInputContext;
+@interface NSResponder (AppKitDetails)
+- (NSTextInputContext *)inputContext;
+@end
+
+@interface WebNetscapePluginView (ForwardDeclarations)
+- (void)setWindowIfNecessary;
+- (NPError)loadRequest:(NSMutableURLRequest *)request inTarget:(const char *)cTarget withNotifyData:(void *)notifyData sendNotification:(BOOL)sendNotification;
+@end
+
+@implementation WebNetscapePluginView
+
++ (void)initialize
+{
+ JSC::initializeThreading();
+#ifndef BUILDING_ON_TIGER
+ WebCoreObjCFinalizeOnMainThread(self);
+#endif
+ WKSendUserChangeNotifications();
+}
+
+#pragma mark EVENTS
+
+- (BOOL)superviewsHaveSuperviews
+{
+ NSView *contentView = [[self window] contentView];
+ NSView *view;
+ for (view = self; view != nil; view = [view superview]) {
+ if (view == contentView) {
+ return YES;
+ }
+ }
+ return NO;
+}
+
+
+// The WindowRef created by -[NSWindow windowRef] has a QuickDraw GrafPort that covers
+// the entire window frame (or structure region to use the Carbon term) rather then just the window content.
+// We can remove this when <rdar://problem/4201099> is fixed.
+- (void)fixWindowPort
+{
+#ifndef NP_NO_QUICKDRAW
+ ASSERT(isDrawingModelQuickDraw(drawingModel));
+
+ NSWindow *currentWindow = [self currentWindow];
+ if ([currentWindow isKindOfClass:objc_getClass("NSCarbonWindow")])
+ return;
+
+ float windowHeight = [currentWindow frame].size.height;
+ NSView *contentView = [currentWindow contentView];
+ NSRect contentRect = [contentView convertRect:[contentView frame] toView:nil]; // convert to window-relative coordinates
+
+ CGrafPtr oldPort;
+ GetPort(&oldPort);
+ SetPort(GetWindowPort((WindowRef)[currentWindow windowRef]));
+
+ MovePortTo(static_cast<short>(contentRect.origin.x), /* Flip Y */ static_cast<short>(windowHeight - NSMaxY(contentRect)));
+ PortSize(static_cast<short>(contentRect.size.width), static_cast<short>(contentRect.size.height));
+
+ SetPort(oldPort);
+#endif
+}
+
+#ifndef NP_NO_QUICKDRAW
+static UInt32 getQDPixelFormatForBitmapContext(CGContextRef context)
+{
+ UInt32 byteOrder = CGBitmapContextGetBitmapInfo(context) & kCGBitmapByteOrderMask;
+ if (byteOrder == kCGBitmapByteOrderDefault)
+ switch (CGBitmapContextGetBitsPerPixel(context)) {
+ case 16:
+ byteOrder = kCGBitmapByteOrder16Host;
+ break;
+ case 32:
+ byteOrder = kCGBitmapByteOrder32Host;
+ break;
+ }
+ switch (byteOrder) {
+ case kCGBitmapByteOrder16Little:
+ return k16LE555PixelFormat;
+ case kCGBitmapByteOrder32Little:
+ return k32BGRAPixelFormat;
+ case kCGBitmapByteOrder16Big:
+ return k16BE555PixelFormat;
+ case kCGBitmapByteOrder32Big:
+ return k32ARGBPixelFormat;
+ }
+ ASSERT_NOT_REACHED();
+ return 0;
+}
+
+static inline void getNPRect(const CGRect& cgr, NPRect& npr)
+{
+ npr.top = static_cast<uint16>(cgr.origin.y);
+ npr.left = static_cast<uint16>(cgr.origin.x);
+ npr.bottom = static_cast<uint16>(CGRectGetMaxY(cgr));
+ npr.right = static_cast<uint16>(CGRectGetMaxX(cgr));
+}
+
+#endif
+
+static inline void getNPRect(const NSRect& nr, NPRect& npr)
+{
+ npr.top = static_cast<uint16>(nr.origin.y);
+ npr.left = static_cast<uint16>(nr.origin.x);
+ npr.bottom = static_cast<uint16>(NSMaxY(nr));
+ npr.right = static_cast<uint16>(NSMaxX(nr));
+}
+
+- (PortState)saveAndSetNewPortStateForUpdate:(BOOL)forUpdate
+{
+ ASSERT([self currentWindow] != nil);
+
+ // Use AppKit to convert view coordinates to NSWindow coordinates.
+ NSRect boundsInWindow = [self convertRect:[self bounds] toView:nil];
+ NSRect visibleRectInWindow = [self convertRect:[self visibleRect] toView:nil];
+
+ // Flip Y to convert NSWindow coordinates to top-left-based window coordinates.
+ float borderViewHeight = [[self currentWindow] frame].size.height;
+ boundsInWindow.origin.y = borderViewHeight - NSMaxY(boundsInWindow);
+ visibleRectInWindow.origin.y = borderViewHeight - NSMaxY(visibleRectInWindow);
+
+#ifndef NP_NO_QUICKDRAW
+ WindowRef windowRef = (WindowRef)[[self currentWindow] windowRef];
+ ASSERT(windowRef);
+
+ // Look at the Carbon port to convert top-left-based window coordinates into top-left-based content coordinates.
+ if (isDrawingModelQuickDraw(drawingModel)) {
+ // If drawing with QuickDraw, fix the window port so that it has the same bounds as the NSWindow's
+ // content view. This makes it easier to convert between AppKit view and QuickDraw port coordinates.
+ [self fixWindowPort];
+
+ ::Rect portBounds;
+ CGrafPtr port = GetWindowPort(windowRef);
+ GetPortBounds(port, &portBounds);
+
+ PixMap *pix = *GetPortPixMap(port);
+ boundsInWindow.origin.x += pix->bounds.left - portBounds.left;
+ boundsInWindow.origin.y += pix->bounds.top - portBounds.top;
+ visibleRectInWindow.origin.x += pix->bounds.left - portBounds.left;
+ visibleRectInWindow.origin.y += pix->bounds.top - portBounds.top;
+ }
+#endif
+
+ window.type = NPWindowTypeWindow;
+ window.x = (int32)boundsInWindow.origin.x;
+ window.y = (int32)boundsInWindow.origin.y;
+ window.width = static_cast<uint32>(NSWidth(boundsInWindow));
+ window.height = static_cast<uint32>(NSHeight(boundsInWindow));
+
+ // "Clip-out" the plug-in when:
+ // 1) it's not really in a window or off-screen or has no height or width.
+ // 2) window.x is a "big negative number" which is how WebCore expresses off-screen widgets.
+ // 3) the window is miniaturized or the app is hidden
+ // 4) we're inside of viewWillMoveToWindow: with a nil window. In this case, superviews may already have nil
+ // superviews and nil windows and results from convertRect:toView: are incorrect.
+ NSWindow *realWindow = [self window];
+ if (window.width <= 0 || window.height <= 0 || window.x < -100000
+ || realWindow == nil || [realWindow isMiniaturized]
+ || [NSApp isHidden]
+ || ![self superviewsHaveSuperviews]
+ || [self isHiddenOrHasHiddenAncestor]) {
+
+ // The following code tries to give plug-ins the same size they will eventually have.
+ // The specifiedWidth and specifiedHeight variables are used to predict the size that
+ // WebCore will eventually resize us to.
+
+ // The QuickTime plug-in has problems if you give it a width or height of 0.
+ // Since other plug-ins also might have the same sort of trouble, we make sure
+ // to always give plug-ins a size other than 0,0.
+
+ if (window.width <= 0)
+ window.width = specifiedWidth > 0 ? specifiedWidth : 100;
+ if (window.height <= 0)
+ window.height = specifiedHeight > 0 ? specifiedHeight : 100;
+
+ window.clipRect.bottom = window.clipRect.top;
+ window.clipRect.left = window.clipRect.right;
+ } else {
+ getNPRect(visibleRectInWindow, window.clipRect);
+ }
+
+ // Save the port state, set up the port for entry into the plugin
+ PortState portState;
+ switch (drawingModel) {
+#ifndef NP_NO_QUICKDRAW
+ case NPDrawingModelQuickDraw: {
+ // Set up NS_Port.
+ ::Rect portBounds;
+ CGrafPtr port = GetWindowPort(windowRef);
+ GetPortBounds(port, &portBounds);
+ nPort.qdPort.port = port;
+ nPort.qdPort.portx = (int32)-boundsInWindow.origin.x;
+ nPort.qdPort.porty = (int32)-boundsInWindow.origin.y;
+ window.window = &nPort;
+
+ PortState_QD *qdPortState = (PortState_QD*)malloc(sizeof(PortState_QD));
+ portState = (PortState)qdPortState;
+
+ GetGWorld(&qdPortState->oldPort, &qdPortState->oldDevice);
+
+ qdPortState->oldOrigin.h = portBounds.left;
+ qdPortState->oldOrigin.v = portBounds.top;
+
+ qdPortState->oldClipRegion = NewRgn();
+ GetPortClipRegion(port, qdPortState->oldClipRegion);
+
+ qdPortState->oldVisibleRegion = NewRgn();
+ GetPortVisibleRegion(port, qdPortState->oldVisibleRegion);
+
+ RgnHandle clipRegion = NewRgn();
+ qdPortState->clipRegion = clipRegion;
+
+ CGContextRef currentContext = (CGContextRef)[[NSGraphicsContext currentContext] graphicsPort];
+ if (currentContext && WKCGContextIsBitmapContext(currentContext)) {
+ // We use WKCGContextIsBitmapContext here, because if we just called CGBitmapContextGetData
+ // on any context, we'd log to the console every time. But even if WKCGContextIsBitmapContext
+ // returns true, it still might not be a context we need to create a GWorld for; for example
+ // transparency layers will return true, but return 0 for CGBitmapContextGetData.
+ void* offscreenData = CGBitmapContextGetData(currentContext);
+ if (offscreenData) {
+ // If the current context is an offscreen bitmap, then create a GWorld for it.
+ ::Rect offscreenBounds;
+ offscreenBounds.top = 0;
+ offscreenBounds.left = 0;
+ offscreenBounds.right = CGBitmapContextGetWidth(currentContext);
+ offscreenBounds.bottom = CGBitmapContextGetHeight(currentContext);
+ GWorldPtr newOffscreenGWorld;
+ QDErr err = NewGWorldFromPtr(&newOffscreenGWorld,
+ getQDPixelFormatForBitmapContext(currentContext), &offscreenBounds, 0, 0, 0,
+ static_cast<char*>(offscreenData), CGBitmapContextGetBytesPerRow(currentContext));
+ ASSERT(newOffscreenGWorld && !err);
+ if (!err) {
+ if (offscreenGWorld)
+ DisposeGWorld(offscreenGWorld);
+ offscreenGWorld = newOffscreenGWorld;
+
+ SetGWorld(offscreenGWorld, NULL);
+
+ port = offscreenGWorld;
+
+ nPort.qdPort.port = port;
+ boundsInWindow = [self bounds];
+
+ // Generate a QD origin based on the current affine transform for currentContext.
+ CGAffineTransform offscreenMatrix = CGContextGetCTM(currentContext);
+ CGPoint origin = {0,0};
+ CGPoint axisFlip = {1,1};
+ origin = CGPointApplyAffineTransform(origin, offscreenMatrix);
+ axisFlip = CGPointApplyAffineTransform(axisFlip, offscreenMatrix);
+
+ // Quartz bitmaps have origins at the bottom left, but the axes may be inverted, so handle that.
+ origin.x = offscreenBounds.left - origin.x * (axisFlip.x - origin.x);
+ origin.y = offscreenBounds.bottom + origin.y * (axisFlip.y - origin.y);
+
+ nPort.qdPort.portx = static_cast<int32>(-boundsInWindow.origin.x + origin.x);
+ nPort.qdPort.porty = static_cast<int32>(-boundsInWindow.origin.y - origin.y);
+ window.x = 0;
+ window.y = 0;
+ window.window = &nPort;
+
+ // Use the clip bounds from the context instead of the bounds we created
+ // from the window above.
+ getNPRect(CGRectOffset(CGContextGetClipBoundingBox(currentContext), -origin.x, origin.y), window.clipRect);
+ }
+ }
+ }
+
+ MacSetRectRgn(clipRegion,
+ window.clipRect.left + nPort.qdPort.portx, window.clipRect.top + nPort.qdPort.porty,
+ window.clipRect.right + nPort.qdPort.portx, window.clipRect.bottom + nPort.qdPort.porty);
+
+ // Clip to the dirty region if drawing to a window. When drawing to another bitmap context, do not clip.
+ if ([NSGraphicsContext currentContext] == [[self currentWindow] graphicsContext]) {
+ // Clip to dirty region so plug-in does not draw over already-drawn regions of the window that are
+ // not going to be redrawn this update. This forces plug-ins to play nice with z-index ordering.
+ if (forUpdate) {
+ RgnHandle viewClipRegion = NewRgn();
+
+ // Get list of dirty rects from the opaque ancestor -- WebKit does some tricks with invalidation and
+ // display to enable z-ordering for NSViews; a side-effect of this is that only the WebHTMLView
+ // knows about the true set of dirty rects.
+ NSView *opaqueAncestor = [self opaqueAncestor];
+ const NSRect *dirtyRects;
+ NSInteger dirtyRectCount, dirtyRectIndex;
+ [opaqueAncestor getRectsBeingDrawn:&dirtyRects count:&dirtyRectCount];
+
+ for (dirtyRectIndex = 0; dirtyRectIndex < dirtyRectCount; dirtyRectIndex++) {
+ NSRect dirtyRect = [self convertRect:dirtyRects[dirtyRectIndex] fromView:opaqueAncestor];
+ if (!NSEqualSizes(dirtyRect.size, NSZeroSize)) {
+ // Create a region for this dirty rect
+ RgnHandle dirtyRectRegion = NewRgn();
+ SetRectRgn(dirtyRectRegion, static_cast<short>(NSMinX(dirtyRect)), static_cast<short>(NSMinY(dirtyRect)), static_cast<short>(NSMaxX(dirtyRect)), static_cast<short>(NSMaxY(dirtyRect)));
+
+ // Union this dirty rect with the rest of the dirty rects
+ UnionRgn(viewClipRegion, dirtyRectRegion, viewClipRegion);
+ DisposeRgn(dirtyRectRegion);
+ }
+ }
+
+ // Intersect the dirty region with the clip region, so that we only draw over dirty parts
+ SectRgn(clipRegion, viewClipRegion, clipRegion);
+ DisposeRgn(viewClipRegion);
+ }
+ }
+
+ // Switch to the port and set it up.
+ SetPort(port);
+ PenNormal();
+ ForeColor(blackColor);
+ BackColor(whiteColor);
+ SetOrigin(nPort.qdPort.portx, nPort.qdPort.porty);
+ SetPortClipRegion(nPort.qdPort.port, clipRegion);
+
+ if (forUpdate) {
+ // AppKit may have tried to help us by doing a BeginUpdate.
+ // But the invalid region at that level didn't include AppKit's notion of what was not valid.
+ // We reset the port's visible region to counteract what BeginUpdate did.
+ SetPortVisibleRegion(nPort.qdPort.port, clipRegion);
+ InvalWindowRgn(windowRef, clipRegion);
+ }
+
+ qdPortState->forUpdate = forUpdate;
+ break;
+ }
+#endif /* NP_NO_QUICKDRAW */
+
+ case NPDrawingModelCoreGraphics: {
+ ASSERT([NSView focusView] == self);
+
+ CGContextRef context = static_cast<CGContextRef>([[NSGraphicsContext currentContext] graphicsPort]);
+
+ PortState_CG *cgPortState = (PortState_CG *)malloc(sizeof(PortState_CG));
+ portState = (PortState)cgPortState;
+ cgPortState->context = context;
+
+ // Update the plugin's window/context
+#ifdef NP_NO_CARBON
+ nPort.cgPort.window = (NPNSWindow *)[self currentWindow];
+#else
+ nPort.cgPort.window = _eventHandler->platformWindow([self currentWindow]);
+#endif /* NP_NO_CARBON */
+ nPort.cgPort.context = context;
+ window.window = &nPort.cgPort;
+
+ // Save current graphics context's state; will be restored by -restorePortState:
+ CGContextSaveGState(context);
+
+ // Clip to the dirty region if drawing to a window. When drawing to another bitmap context, do not clip.
+ if ([NSGraphicsContext currentContext] == [[self currentWindow] graphicsContext]) {
+ // Get list of dirty rects from the opaque ancestor -- WebKit does some tricks with invalidation and
+ // display to enable z-ordering for NSViews; a side-effect of this is that only the WebHTMLView
+ // knows about the true set of dirty rects.
+ NSView *opaqueAncestor = [self opaqueAncestor];
+ const NSRect *dirtyRects;
+ NSInteger count;
+ [opaqueAncestor getRectsBeingDrawn:&dirtyRects count:&count];
+ Vector<CGRect, 16> convertedDirtyRects;
+ convertedDirtyRects.resize(count);
+ for (int i = 0; i < count; ++i)
+ reinterpret_cast<NSRect&>(convertedDirtyRects[i]) = [self convertRect:dirtyRects[i] fromView:opaqueAncestor];
+ CGContextClipToRects(context, convertedDirtyRects.data(), count);
+ }
+
+ break;
+ }
+
+ case NPDrawingModelCoreAnimation:
+ window.window = [self currentWindow];
+ // Just set the port state to a dummy value.
+ portState = (PortState)1;
+ break;
+
+ default:
+ ASSERT_NOT_REACHED();
+ portState = NULL;
+ break;
+ }
+
+ return portState;
+}
+
+- (PortState)saveAndSetNewPortState
+{
+ return [self saveAndSetNewPortStateForUpdate:NO];
+}
+
+- (void)restorePortState:(PortState)portState
+{
+ ASSERT([self currentWindow]);
+ ASSERT(portState);
+
+ switch (drawingModel) {
+#ifndef NP_NO_QUICKDRAW
+ case NPDrawingModelQuickDraw: {
+ PortState_QD *qdPortState = (PortState_QD *)portState;
+ WindowRef windowRef = (WindowRef)[[self currentWindow] windowRef];
+ CGrafPtr port = GetWindowPort(windowRef);
+
+ SetPort(port);
+
+ if (qdPortState->forUpdate)
+ ValidWindowRgn(windowRef, qdPortState->clipRegion);
+
+ SetOrigin(qdPortState->oldOrigin.h, qdPortState->oldOrigin.v);
+
+ SetPortClipRegion(port, qdPortState->oldClipRegion);
+ if (qdPortState->forUpdate)
+ SetPortVisibleRegion(port, qdPortState->oldVisibleRegion);
+
+ DisposeRgn(qdPortState->oldClipRegion);
+ DisposeRgn(qdPortState->oldVisibleRegion);
+ DisposeRgn(qdPortState->clipRegion);
+
+ SetGWorld(qdPortState->oldPort, qdPortState->oldDevice);
+ break;
+ }
+#endif /* NP_NO_QUICKDRAW */
+
+ case NPDrawingModelCoreGraphics:
+ ASSERT([NSView focusView] == self);
+ ASSERT(((PortState_CG *)portState)->context == nPort.cgPort.context);
+ CGContextRestoreGState(nPort.cgPort.context);
+ break;
+
+ case NPDrawingModelCoreAnimation:
+ ASSERT(portState == (PortState)1);
+ break;
+ default:
+ ASSERT_NOT_REACHED();
+ break;
+ }
+}
+
+- (BOOL)sendEvent:(void*)event isDrawRect:(BOOL)eventIsDrawRect
+{
+ if (![self window])
+ return NO;
+ ASSERT(event);
+
+ if (!_isStarted)
+ return NO;
+
+ ASSERT([_pluginPackage.get() pluginFuncs]->event);
+
+ // Make sure we don't call NPP_HandleEvent while we're inside NPP_SetWindow.
+ // We probably don't want more general reentrancy protection; we are really
+ // protecting only against this one case, which actually comes up when
+ // you first install the SVG viewer plug-in.
+ if (inSetWindow)
+ return NO;
+
+ Frame* frame = core([self webFrame]);
+ if (!frame)
+ return NO;
+ Page* page = frame->page();
+ if (!page)
+ return NO;
+
+ bool wasDeferring = page->defersLoading();
+ if (!wasDeferring)
+ page->setDefersLoading(true);
+
+ // Can only send drawRect (updateEvt) to CoreGraphics plugins when actually drawing
+ ASSERT((drawingModel != NPDrawingModelCoreGraphics) || !eventIsDrawRect || [NSView focusView] == self);
+
+ PortState portState = NULL;
+
+ if (isDrawingModelQuickDraw(drawingModel) || (drawingModel != NPDrawingModelCoreAnimation && eventIsDrawRect)) {
+ // In CoreGraphics mode, the port state only needs to be saved/set when redrawing the plug-in view.
+ // The plug-in is not allowed to draw at any other time.
+ portState = [self saveAndSetNewPortStateForUpdate:eventIsDrawRect];
+ // We may have changed the window, so inform the plug-in.
+ [self setWindowIfNecessary];
+ }
+
+#if !defined(NDEBUG) && !defined(NP_NO_QUICKDRAW)
+ // Draw green to help debug.
+ // If we see any green we know something's wrong.
+ // Note that PaintRect() only works for QuickDraw plugins; otherwise the current QD port is undefined.
+ if (isDrawingModelQuickDraw(drawingModel) && eventIsDrawRect) {
+ ForeColor(greenColor);
+ const ::Rect bigRect = { -10000, -10000, 10000, 10000 };
+ PaintRect(&bigRect);
+ ForeColor(blackColor);
+ }
+#endif
+
+ // Temporarily retain self in case the plug-in view is released while sending an event.
+ [[self retain] autorelease];
+
+ BOOL acceptedEvent;
+ [self willCallPlugInFunction];
+ {
+ JSC::JSLock::DropAllLocks dropAllLocks(false);
+ acceptedEvent = ![_pluginPackage.get() pluginFuncs]->event(plugin, event);
+ }
+ [self didCallPlugInFunction];
+
+ if (portState) {
+ if ([self currentWindow])
+ [self restorePortState:portState];
+ if (portState != (PortState)1)
+ free(portState);
+ }
+
+ if (!wasDeferring)
+ page->setDefersLoading(false);
+
+ return acceptedEvent;
+}
+
+- (void)windowFocusChanged:(BOOL)hasFocus
+{
+ _eventHandler->windowFocusChanged(hasFocus);
+}
+
+- (void)sendDrawRectEvent:(NSRect)rect
+{
+ ASSERT(_eventHandler);
+
+ _eventHandler->drawRect(rect);
+}
+
+- (void)stopTimers
+{
+ [super stopTimers];
+
+ if (_eventHandler)
+ _eventHandler->stopTimers();
+
+ if (!timers)
+ return;
+
+ HashMap<uint32, PluginTimer*>::const_iterator end = timers->end();
+ for (HashMap<uint32, PluginTimer*>::const_iterator it = timers->begin(); it != end; ++it) {
+ PluginTimer* timer = it->second;
+ timer->stop();
+ }
+}
+
+- (void)startTimers
+{
+ [super startTimers];
+
+ // If the plugin is completely obscured (scrolled out of view, for example), then we will
+ // send null events at a reduced rate.
+ _eventHandler->startTimers(_isCompletelyObscured);
+
+ if (!timers)
+ return;
+
+ HashMap<uint32, PluginTimer*>::const_iterator end = timers->end();
+ for (HashMap<uint32, PluginTimer*>::const_iterator it = timers->begin(); it != end; ++it) {
+ PluginTimer* timer = it->second;
+ ASSERT(!timer->isActive());
+ timer->start(_isCompletelyObscured);
+ }
+}
+
+- (void)focusChanged
+{
+ // We need to null check the event handler here because
+ // the plug-in view can resign focus after it's been stopped
+ // and the event handler has been deleted.
+ if (_eventHandler)
+ _eventHandler->focusChanged(_hasFocus);
+}
+
+- (void)mouseDown:(NSEvent *)theEvent
+{
+ if (!_isStarted)
+ return;
+
+ _eventHandler->mouseDown(theEvent);
+}
+
+- (void)mouseUp:(NSEvent *)theEvent
+{
+ if (!_isStarted)
+ return;
+
+ _eventHandler->mouseUp(theEvent);
+}
+
+- (void)mouseEntered:(NSEvent *)theEvent
+{
+ if (!_isStarted)
+ return;
+
+ _eventHandler->mouseEntered(theEvent);
+}
+
+- (void)mouseExited:(NSEvent *)theEvent
+{
+ if (!_isStarted)
+ return;
+
+ _eventHandler->mouseExited(theEvent);
+
+ // Set cursor back to arrow cursor. Because NSCursor doesn't know about changes that the plugin made, we could get confused about what we think the
+ // current cursor is otherwise. Therefore we have no choice but to unconditionally reset the cursor when the mouse exits the plugin.
+ [[NSCursor arrowCursor] set];
+}
+
+// We can't name this method mouseMoved because we don't want to override
+// the NSView mouseMoved implementation.
+- (void)handleMouseMoved:(NSEvent *)theEvent
+{
+ if (!_isStarted)
+ return;
+
+ _eventHandler->mouseMoved(theEvent);
+}
+
+- (void)mouseDragged:(NSEvent *)theEvent
+{
+ if (!_isStarted)
+ return;
+
+ _eventHandler->mouseDragged(theEvent);
+}
+
+- (void)scrollWheel:(NSEvent *)theEvent
+{
+ if (!_isStarted) {
+ [super scrollWheel:theEvent];
+ return;
+ }
+
+ if (!_eventHandler->scrollWheel(theEvent))
+ [super scrollWheel:theEvent];
+}
+
+- (void)keyUp:(NSEvent *)theEvent
+{
+ if (!_isStarted)
+ return;
+
+ _eventHandler->keyUp(theEvent);
+}
+
+- (void)keyDown:(NSEvent *)theEvent
+{
+ if (!_isStarted)
+ return;
+
+ _eventHandler->keyDown(theEvent);
+}
+
+- (void)flagsChanged:(NSEvent *)theEvent
+{
+ if (!_isStarted)
+ return;
+
+ _eventHandler->flagsChanged(theEvent);
+}
+
+#pragma mark WEB_NETSCAPE_PLUGIN
+
+- (BOOL)isNewWindowEqualToOldWindow
+{
+ if (window.x != lastSetWindow.x)
+ return NO;
+ if (window.y != lastSetWindow.y)
+ return NO;
+ if (window.width != lastSetWindow.width)
+ return NO;
+ if (window.height != lastSetWindow.height)
+ return NO;
+ if (window.clipRect.top != lastSetWindow.clipRect.top)
+ return NO;
+ if (window.clipRect.left != lastSetWindow.clipRect.left)
+ return NO;
+ if (window.clipRect.bottom != lastSetWindow.clipRect.bottom)
+ return NO;
+ if (window.clipRect.right != lastSetWindow.clipRect.right)
+ return NO;
+ if (window.type != lastSetWindow.type)
+ return NO;
+
+ switch (drawingModel) {
+#ifndef NP_NO_QUICKDRAW
+ case NPDrawingModelQuickDraw:
+ if (nPort.qdPort.portx != lastSetPort.qdPort.portx)
+ return NO;
+ if (nPort.qdPort.porty != lastSetPort.qdPort.porty)
+ return NO;
+ if (nPort.qdPort.port != lastSetPort.qdPort.port)
+ return NO;
+ break;
+#endif /* NP_NO_QUICKDRAW */
+
+ case NPDrawingModelCoreGraphics:
+ if (nPort.cgPort.window != lastSetPort.cgPort.window)
+ return NO;
+ if (nPort.cgPort.context != lastSetPort.cgPort.context)
+ return NO;
+ break;
+
+ case NPDrawingModelCoreAnimation:
+ if (window.window != lastSetWindow.window)
+ return NO;
+ break;
+ default:
+ ASSERT_NOT_REACHED();
+ break;
+ }
+
+ return YES;
+}
+
+-(void)tellQuickTimeToChill
+{
+#ifndef NP_NO_QUICKDRAW
+ ASSERT(isDrawingModelQuickDraw(drawingModel));
+
+ // Make a call to the secret QuickDraw API that makes QuickTime calm down.
+ WindowRef windowRef = (WindowRef)[[self window] windowRef];
+ if (!windowRef) {
+ return;
+ }
+ CGrafPtr port = GetWindowPort(windowRef);
+ ::Rect bounds;
+ GetPortBounds(port, &bounds);
+ WKCallDrawingNotification(port, &bounds);
+#endif /* NP_NO_QUICKDRAW */
+}
+
+- (void)updateAndSetWindow
+{
+ // A plug-in can only update if it's (1) already been started (2) isn't stopped
+ // and (3) is able to draw on-screen. To meet condition (3) the plug-in must not
+ // be hidden and be attached to a window. QuickDraw plug-ins are an important
+ // excpetion to rule (3) because they manually must be told when to stop writing
+ // bits to the window backing store, thus to do so requires a new call to
+ // NPP_SetWindow() with an empty NPWindow struct.
+ if (!_isStarted)
+ return;
+
+#ifdef NP_NO_QUICKDRAW
+ if (![self canDraw])
+ return;
+#else
+ if (drawingModel == NPDrawingModelQuickDraw)
+ [self tellQuickTimeToChill];
+ else if (drawingModel == NPDrawingModelCoreGraphics && ![self canDraw])
+ return;
+
+#endif // NP_NO_QUICKDRAW
+
+ BOOL didLockFocus = [NSView focusView] != self && [self lockFocusIfCanDraw];
+
+ PortState portState = [self saveAndSetNewPortState];
+ if (portState) {
+ [self setWindowIfNecessary];
+ [self restorePortState:portState];
+ if (portState != (PortState)1)
+ free(portState);
+ }
+ if (didLockFocus)
+ [self unlockFocus];
+}
+
+- (void)setWindowIfNecessary
+{
+ if (!_isStarted)
+ return;
+
+ if (![self isNewWindowEqualToOldWindow]) {
+ // Make sure we don't call NPP_HandleEvent while we're inside NPP_SetWindow.
+ // We probably don't want more general reentrancy protection; we are really
+ // protecting only against this one case, which actually comes up when
+ // you first install the SVG viewer plug-in.
+ NPError npErr;
+ ASSERT(!inSetWindow);
+
+ inSetWindow = YES;
+
+ // A CoreGraphics plugin's window may only be set while the plugin is being updated
+ ASSERT((drawingModel != NPDrawingModelCoreGraphics) || [NSView focusView] == self);
+
+ [self willCallPlugInFunction];
+ {
+ JSC::JSLock::DropAllLocks dropAllLocks(false);
+ npErr = [_pluginPackage.get() pluginFuncs]->setwindow(plugin, &window);
+ }
+ [self didCallPlugInFunction];
+ inSetWindow = NO;
+
+#ifndef NDEBUG
+ switch (drawingModel) {
+#ifndef NP_NO_QUICKDRAW
+ case NPDrawingModelQuickDraw:
+ LOG(Plugins, "NPP_SetWindow (QuickDraw): %d, port=0x%08x, window.x:%d window.y:%d window.width:%d window.height:%d",
+ npErr, (int)nPort.qdPort.port, (int)window.x, (int)window.y, (int)window.width, (int)window.height);
+ break;
+#endif /* NP_NO_QUICKDRAW */
+
+ case NPDrawingModelCoreGraphics:
+ LOG(Plugins, "NPP_SetWindow (CoreGraphics): %d, window=%p, context=%p, window.x:%d window.y:%d window.width:%d window.height:%d",
+ npErr, nPort.cgPort.window, nPort.cgPort.context, (int)window.x, (int)window.y, (int)window.width, (int)window.height);
+ break;
+
+ case NPDrawingModelCoreAnimation:
+ LOG(Plugins, "NPP_SetWindow (CoreAnimation): %d, window=%p window.x:%d window.y:%d window.width:%d window.height:%d",
+ npErr, window.window, nPort.cgPort.context, (int)window.x, (int)window.y, (int)window.width, (int)window.height);
+ break;
+
+ default:
+ ASSERT_NOT_REACHED();
+ break;
+ }
+#endif /* !defined(NDEBUG) */
+
+ lastSetWindow = window;
+ lastSetPort = nPort;
+ }
+}
+
++ (void)setCurrentPluginView:(WebNetscapePluginView *)view
+{
+ currentPluginView = view;
+}
+
++ (WebNetscapePluginView *)currentPluginView
+{
+ return currentPluginView;
+}
+
+- (BOOL)createPlugin
+{
+ // Open the plug-in package so it remains loaded while our plugin uses it
+ [_pluginPackage.get() open];
+
+ // Initialize drawingModel to an invalid value so that we can detect when the plugin does not specify a drawingModel
+ drawingModel = (NPDrawingModel)-1;
+
+ // Initialize eventModel to an invalid value so that we can detect when the plugin does not specify an event model.
+ eventModel = (NPEventModel)-1;
+
+ NPError npErr = [self _createPlugin];
+ if (npErr != NPERR_NO_ERROR) {
+ LOG_ERROR("NPP_New failed with error: %d", npErr);
+ [self _destroyPlugin];
+ [_pluginPackage.get() close];
+ return NO;
+ }
+
+ if (drawingModel == (NPDrawingModel)-1) {
+#ifndef NP_NO_QUICKDRAW
+ // Default to QuickDraw if the plugin did not specify a drawing model.
+ drawingModel = NPDrawingModelQuickDraw;
+#else
+ // QuickDraw is not available, so we can't default to it. Instead, default to CoreGraphics.
+ drawingModel = NPDrawingModelCoreGraphics;
+#endif
+ }
+
+ if (eventModel == (NPEventModel)-1) {
+ // If the plug-in did not specify a drawing model we default to Carbon when it is available.
+#ifndef NP_NO_CARBON
+ eventModel = NPEventModelCarbon;
+#else
+ eventModel = NPEventModelCocoa;
+#endif // NP_NO_CARBON
+ }
+
+#ifndef NP_NO_CARBON
+ if (eventModel == NPEventModelCocoa && isDrawingModelQuickDraw(drawingModel)) {
+ LOG(Plugins, "Plugin can't use use Cocoa event model with QuickDraw drawing model: %@", _pluginPackage.get());
+ [self _destroyPlugin];
+ [_pluginPackage.get() close];
+
+ return NO;
+ }
+#endif // NP_NO_CARBON
+
+#ifndef BUILDING_ON_TIGER
+ if (drawingModel == NPDrawingModelCoreAnimation) {
+ void *value = 0;
+ if ([_pluginPackage.get() pluginFuncs]->getvalue(plugin, NPPVpluginCoreAnimationLayer, &value) == NPERR_NO_ERROR && value) {
+
+ // The plug-in gives us a retained layer.
+ _pluginLayer.adoptNS((CALayer *)value);
+ [self setWantsLayer:YES];
+ LOG(Plugins, "%@ is using Core Animation drawing model with layer %@", _pluginPackage.get(), _pluginLayer.get());
+ }
+
+ ASSERT(_pluginLayer);
+ }
+#endif
+
+ // Create the event handler
+ _eventHandler.set(WebNetscapePluginEventHandler::create(self));
+
+ // Get the text input vtable
+ if (eventModel == NPEventModelCocoa) {
+ [self willCallPlugInFunction];
+ {
+ JSC::JSLock::DropAllLocks dropAllLocks(false);
+ NPPluginTextInputFuncs *value = 0;
+ if (![_pluginPackage.get() pluginFuncs]->getvalue(plugin, NPPVpluginTextInputFuncs, &value) == NPERR_NO_ERROR && value)
+ textInputFuncs = value;
+ }
+ [self didCallPlugInFunction];
+ }
+
+ return YES;
+}
+
+#ifndef BUILDING_ON_TIGER
+- (void)setLayer:(CALayer *)newLayer
+{
+ [super setLayer:newLayer];
+
+ if (_pluginLayer)
+ [newLayer addSublayer:_pluginLayer.get()];
+}
+#endif
+
+- (void)loadStream
+{
+ if (_loadManually) {
+ [self _redeliverStream];
+ return;
+ }
+
+ // If the OBJECT/EMBED tag has no SRC, the URL is passed to us as "".
+ // Check for this and don't start a load in this case.
+ if (_sourceURL && ![_sourceURL.get() _web_isEmpty]) {
+ NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:_sourceURL.get()];
+ [request _web_setHTTPReferrer:core([self webFrame])->loader()->outgoingReferrer()];
+ [self loadRequest:request inTarget:nil withNotifyData:nil sendNotification:NO];
+ }
+}
+
+- (BOOL)shouldStop
+{
+ // If we're already calling a plug-in function, do not call NPP_Destroy(). The plug-in function we are calling
+ // may assume that its instance->pdata, or other memory freed by NPP_Destroy(), is valid and unchanged until said
+ // plugin-function returns.
+ // See <rdar://problem/4480737>.
+ if (pluginFunctionCallDepth > 0) {
+ shouldStopSoon = YES;
+ return NO;
+ }
+
+ return YES;
+}
+
+- (void)destroyPlugin
+{
+ // To stop active streams it's necessary to invoke stop() on a copy
+ // of streams. This is because calling WebNetscapePluginStream::stop() also has the side effect
+ // of removing a stream from this hash set.
+ Vector<RefPtr<WebNetscapePluginStream> > streamsCopy;
+ copyToVector(streams, streamsCopy);
+ for (size_t i = 0; i < streamsCopy.size(); i++)
+ streamsCopy[i]->stop();
+
+ [[_pendingFrameLoads.get() allKeys] makeObjectsPerformSelector:@selector(_setInternalLoadDelegate:) withObject:nil];
+ [NSObject cancelPreviousPerformRequestsWithTarget:self];
+
+ // Setting the window type to 0 ensures that NPP_SetWindow will be called if the plug-in is restarted.
+ lastSetWindow.type = (NPWindowType)0;
+
+#ifndef BUILDING_ON_TIGER
+ _pluginLayer = 0;
+#endif
+
+ [self _destroyPlugin];
+ [_pluginPackage.get() close];
+
+ _eventHandler.clear();
+
+ textInputFuncs = 0;
+}
+
+- (NPEventModel)eventModel
+{
+ return eventModel;
+}
+
+- (NPP)plugin
+{
+ return plugin;
+}
+
+- (void)setAttributeKeys:(NSArray *)keys andValues:(NSArray *)values;
+{
+ ASSERT([keys count] == [values count]);
+
+ // Convert the attributes to 2 C string arrays.
+ // These arrays are passed to NPP_New, but the strings need to be
+ // modifiable and live the entire life of the plugin.
+
+ // The Java plug-in requires the first argument to be the base URL
+ if ([_MIMEType.get() isEqualToString:@"application/x-java-applet"]) {
+ cAttributes = (char **)malloc(([keys count] + 1) * sizeof(char *));
+ cValues = (char **)malloc(([values count] + 1) * sizeof(char *));
+ cAttributes[0] = strdup("DOCBASE");
+ cValues[0] = strdup([_baseURL.get() _web_URLCString]);
+ argsCount++;
+ } else {
+ cAttributes = (char **)malloc([keys count] * sizeof(char *));
+ cValues = (char **)malloc([values count] * sizeof(char *));
+ }
+
+ BOOL isWMP = [[[_pluginPackage.get() bundle] bundleIdentifier] isEqualToString:@"com.microsoft.WMP.defaultplugin"];
+
+ unsigned i;
+ unsigned count = [keys count];
+ for (i = 0; i < count; i++) {
+ NSString *key = [keys objectAtIndex:i];
+ NSString *value = [values objectAtIndex:i];
+ if ([key _webkit_isCaseInsensitiveEqualToString:@"height"]) {
+ specifiedHeight = [value intValue];
+ } else if ([key _webkit_isCaseInsensitiveEqualToString:@"width"]) {
+ specifiedWidth = [value intValue];
+ }
+ // Avoid Window Media Player crash when these attributes are present.
+ if (isWMP && ([key _webkit_isCaseInsensitiveEqualToString:@"SAMIStyle"] || [key _webkit_isCaseInsensitiveEqualToString:@"SAMILang"])) {
+ continue;
+ }
+ cAttributes[argsCount] = strdup([key UTF8String]);
+ cValues[argsCount] = strdup([value UTF8String]);
+ LOG(Plugins, "%@ = %@", key, value);
+ argsCount++;
+ }
+}
+
+#pragma mark NSVIEW
+
+- (id)initWithFrame:(NSRect)frame
+ pluginPackage:(WebNetscapePluginPackage *)pluginPackage
+ URL:(NSURL *)URL
+ baseURL:(NSURL *)baseURL
+ MIMEType:(NSString *)MIME
+ attributeKeys:(NSArray *)keys
+ attributeValues:(NSArray *)values
+ loadManually:(BOOL)loadManually
+ DOMElement:(DOMElement *)element
+{
+ self = [super initWithFrame:frame pluginPackage:pluginPackage URL:URL baseURL:baseURL MIMEType:MIME attributeKeys:keys attributeValues:values loadManually:loadManually DOMElement:element];
+ if (!self)
+ return nil;
+
+ _pendingFrameLoads.adoptNS([[NSMutableDictionary alloc] init]);
+
+ // load the plug-in if it is not already loaded
+ if (![pluginPackage load]) {
+ [self release];
+ return nil;
+ }
+
+ return self;
+}
+
+- (id)initWithFrame:(NSRect)frame
+{
+ ASSERT_NOT_REACHED();
+ return nil;
+}
+
+- (void)fini
+{
+#ifndef NP_NO_QUICKDRAW
+ if (offscreenGWorld)
+ DisposeGWorld(offscreenGWorld);
+#endif
+
+ for (unsigned i = 0; i < argsCount; i++) {
+ free(cAttributes[i]);
+ free(cValues[i]);
+ }
+ free(cAttributes);
+ free(cValues);
+
+ ASSERT(!_eventHandler);
+
+ if (timers) {
+ deleteAllValues(*timers);
+ delete timers;
+ }
+}
+
+- (void)disconnectStream:(WebNetscapePluginStream*)stream
+{
+ streams.remove(stream);
+}
+
+- (void)dealloc
+{
+ ASSERT(!_isStarted);
+ ASSERT(!plugin);
+
+ [self fini];
+
+ [super dealloc];
+}
+
+- (void)finalize
+{
+ ASSERT_MAIN_THREAD();
+ ASSERT(!_isStarted);
+
+ [self fini];
+
+ [super finalize];
+}
+
+- (void)drawRect:(NSRect)rect
+{
+ if (drawingModel == NPDrawingModelCoreAnimation)
+ return;
+
+ if (!_isStarted)
+ return;
+
+ if ([NSGraphicsContext currentContextDrawingToScreen])
+ [self sendDrawRectEvent:rect];
+ else {
+ NSBitmapImageRep *printedPluginBitmap = [self _printedPluginBitmap];
+ if (printedPluginBitmap) {
+ // Flip the bitmap before drawing because the QuickDraw port is flipped relative
+ // to this view.
+ CGContextRef cgContext = (CGContextRef)[[NSGraphicsContext currentContext] graphicsPort];
+ CGContextSaveGState(cgContext);
+ NSRect bounds = [self bounds];
+ CGContextTranslateCTM(cgContext, 0.0f, NSHeight(bounds));
+ CGContextScaleCTM(cgContext, 1.0f, -1.0f);
+ [printedPluginBitmap drawInRect:bounds];
+ CGContextRestoreGState(cgContext);
+ }
+ }
+}
+
+- (NPObject *)createPluginScriptableObject
+{
+ if (![_pluginPackage.get() pluginFuncs]->getvalue || !_isStarted)
+ return NULL;
+
+ NPObject *value = NULL;
+ NPError error;
+ [self willCallPlugInFunction];
+ {
+ JSC::JSLock::DropAllLocks dropAllLocks(false);
+ error = [_pluginPackage.get() pluginFuncs]->getvalue(plugin, NPPVpluginScriptableNPObject, &value);
+ }
+ [self didCallPlugInFunction];
+ if (error != NPERR_NO_ERROR)
+ return NULL;
+
+ return value;
+}
+
+- (void)willCallPlugInFunction
+{
+ ASSERT(plugin);
+
+ // Could try to prevent infinite recursion here, but it's probably not worth the effort.
+ pluginFunctionCallDepth++;
+}
+
+- (void)didCallPlugInFunction
+{
+ ASSERT(pluginFunctionCallDepth > 0);
+ pluginFunctionCallDepth--;
+
+ // If -stop was called while we were calling into a plug-in function, and we're no longer
+ // inside a plug-in function, stop now.
+ if (pluginFunctionCallDepth == 0 && shouldStopSoon) {
+ shouldStopSoon = NO;
+ [self stop];
+ }
+}
+
+-(void)pluginView:(NSView *)pluginView receivedResponse:(NSURLResponse *)response
+{
+ ASSERT(_loadManually);
+ ASSERT(!_manualStream);
+
+ _manualStream = WebNetscapePluginStream::create(core([self webFrame])->loader());
+}
+
+- (void)pluginView:(NSView *)pluginView receivedData:(NSData *)data
+{
+ ASSERT(_loadManually);
+ ASSERT(_manualStream);
+
+ _dataLengthReceived += [data length];
+
+ if (!_isStarted)
+ return;
+
+ if (!_manualStream->plugin()) {
+
+ _manualStream->setRequestURL([[[self dataSource] request] URL]);
+ _manualStream->setPlugin([self plugin]);
+ ASSERT(_manualStream->plugin());
+
+ _manualStream->startStreamWithResponse([[self dataSource] response]);
+ }
+
+ if (_manualStream->plugin())
+ _manualStream->didReceiveData(0, static_cast<const char *>([data bytes]), [data length]);
+}
+
+- (void)pluginView:(NSView *)pluginView receivedError:(NSError *)error
+{
+ ASSERT(_loadManually);
+
+ _error = error;
+
+ if (!_isStarted) {
+ return;
+ }
+
+ _manualStream->destroyStreamWithError(error);
+}
+
+- (void)pluginViewFinishedLoading:(NSView *)pluginView
+{
+ ASSERT(_loadManually);
+ ASSERT(_manualStream);
+
+ if (_isStarted)
+ _manualStream->didFinishLoading(0);
+}
+
+#pragma mark NSTextInput implementation
+
+- (NSTextInputContext *)inputContext
+{
+#ifndef NP_NO_CARBON
+ if (!_isStarted || eventModel == NPEventModelCarbon)
+ return nil;
+#endif
+
+ return [super inputContext];
+}
+
+- (BOOL)hasMarkedText
+{
+ ASSERT(eventModel == NPEventModelCocoa);
+ ASSERT(_isStarted);
+
+ if (textInputFuncs && textInputFuncs->hasMarkedText)
+ return textInputFuncs->hasMarkedText(plugin);
+
+ return NO;
+}
+
+- (void)insertText:(id)aString
+{
+ ASSERT(eventModel == NPEventModelCocoa);
+ ASSERT(_isStarted);
+
+ if (textInputFuncs && textInputFuncs->insertText)
+ textInputFuncs->insertText(plugin, aString);
+}
+
+- (NSRange)markedRange
+{
+ ASSERT(eventModel == NPEventModelCocoa);
+ ASSERT(_isStarted);
+
+ if (textInputFuncs && textInputFuncs->markedRange)
+ return textInputFuncs->markedRange(plugin);
+
+ return NSMakeRange(NSNotFound, 0);
+}
+
+- (NSRange)selectedRange
+{
+ ASSERT(eventModel == NPEventModelCocoa);
+ ASSERT(_isStarted);
+
+ if (textInputFuncs && textInputFuncs->selectedRange)
+ return textInputFuncs->selectedRange(plugin);
+
+ return NSMakeRange(NSNotFound, 0);
+}
+
+- (void)setMarkedText:(id)aString selectedRange:(NSRange)selRange
+{
+ ASSERT(eventModel == NPEventModelCocoa);
+ ASSERT(_isStarted);
+
+ if (textInputFuncs && textInputFuncs->setMarkedText)
+ textInputFuncs->setMarkedText(plugin, aString, selRange);
+}
+
+- (void)unmarkText
+{
+ ASSERT(eventModel == NPEventModelCocoa);
+ ASSERT(_isStarted);
+
+ if (textInputFuncs && textInputFuncs->unmarkText)
+ textInputFuncs->unmarkText(plugin);
+}
+
+- (NSArray *)validAttributesForMarkedText
+{
+ ASSERT(eventModel == NPEventModelCocoa);
+ ASSERT(_isStarted);
+
+ if (textInputFuncs && textInputFuncs->validAttributesForMarkedText)
+ return textInputFuncs->validAttributesForMarkedText(plugin);
+
+ return [NSArray array];
+}
+
+- (NSAttributedString *)attributedSubstringFromRange:(NSRange)theRange
+{
+ ASSERT(eventModel == NPEventModelCocoa);
+ ASSERT(_isStarted);
+
+ if (textInputFuncs && textInputFuncs->attributedSubstringFromRange)
+ return textInputFuncs->attributedSubstringFromRange(plugin, theRange);
+
+ return nil;
+}
+
+- (NSUInteger)characterIndexForPoint:(NSPoint)thePoint
+{
+ ASSERT(eventModel == NPEventModelCocoa);
+ ASSERT(_isStarted);
+
+ if (textInputFuncs && textInputFuncs->characterIndexForPoint) {
+ // Convert the point to window coordinates
+ NSPoint point = [[self window] convertScreenToBase:thePoint];
+
+ // And view coordinates
+ point = [self convertPoint:point fromView:nil];
+
+ return textInputFuncs->characterIndexForPoint(plugin, point);
+ }
+
+ return NSNotFound;
+}
+
+- (void)doCommandBySelector:(SEL)aSelector
+{
+ ASSERT(eventModel == NPEventModelCocoa);
+ ASSERT(_isStarted);
+
+ if (textInputFuncs && textInputFuncs->doCommandBySelector)
+ textInputFuncs->doCommandBySelector(plugin, aSelector);
+}
+
+- (NSRect)firstRectForCharacterRange:(NSRange)theRange
+{
+ ASSERT(eventModel == NPEventModelCocoa);
+ ASSERT(_isStarted);
+
+ if (textInputFuncs && textInputFuncs->firstRectForCharacterRange) {
+ NSRect rect = textInputFuncs->firstRectForCharacterRange(plugin, theRange);
+
+ // Convert the rect to window coordinates
+ rect = [self convertRect:rect toView:nil];
+
+ // Convert the rect location to screen coordinates
+ rect.origin = [[self window] convertBaseToScreen:rect.origin];
+
+ return rect;
+ }
+
+ return NSZeroRect;
+}
+
+// test for 10.4 because of <rdar://problem/4243463>
+#ifdef BUILDING_ON_TIGER
+- (long)conversationIdentifier
+{
+ return (long)self;
+}
+#else
+- (NSInteger)conversationIdentifier
+{
+ return (NSInteger)self;
+}
+#endif
+
+@end
+
+@implementation WebNetscapePluginView (WebNPPCallbacks)
+
+- (void)evaluateJavaScriptPluginRequest:(WebPluginRequest *)JSPluginRequest
+{
+ // FIXME: Is this isStarted check needed here? evaluateJavaScriptPluginRequest should not be called
+ // if we are stopped since this method is called after a delay and we call
+ // cancelPreviousPerformRequestsWithTarget inside of stop.
+ if (!_isStarted) {
+ return;
+ }
+
+ NSURL *URL = [[JSPluginRequest request] URL];
+ NSString *JSString = [URL _webkit_scriptIfJavaScriptURL];
+ ASSERT(JSString);
+
+ NSString *result = [[self webFrame] _stringByEvaluatingJavaScriptFromString:JSString forceUserGesture:[JSPluginRequest isCurrentEventUserGesture]];
+
+ // Don't continue if stringByEvaluatingJavaScriptFromString caused the plug-in to stop.
+ if (!_isStarted) {
+ return;
+ }
+
+ if ([JSPluginRequest frameName] != nil) {
+ // FIXME: If the result is a string, we probably want to put that string into the frame.
+ if ([JSPluginRequest sendNotification]) {
+ [self willCallPlugInFunction];
+ {
+ JSC::JSLock::DropAllLocks dropAllLocks(false);
+ [_pluginPackage.get() pluginFuncs]->urlnotify(plugin, [URL _web_URLCString], NPRES_DONE, [JSPluginRequest notifyData]);
+ }
+ [self didCallPlugInFunction];
+ }
+ } else if ([result length] > 0) {
+ // Don't call NPP_NewStream and other stream methods if there is no JS result to deliver. This is what Mozilla does.
+ NSData *JSData = [result dataUsingEncoding:NSUTF8StringEncoding];
+
+ RefPtr<WebNetscapePluginStream> stream = WebNetscapePluginStream::create([NSURLRequest requestWithURL:URL], plugin, [JSPluginRequest sendNotification], [JSPluginRequest notifyData]);
+
+ RetainPtr<NSURLResponse> response(AdoptNS, [[NSURLResponse alloc] initWithURL:URL
+ MIMEType:@"text/plain"
+ expectedContentLength:[JSData length]
+ textEncodingName:nil]);
+
+ stream->startStreamWithResponse(response.get());
+ stream->didReceiveData(0, static_cast<const char*>([JSData bytes]), [JSData length]);
+ stream->didFinishLoading(0);
+ }
+}
+
+- (void)webFrame:(WebFrame *)webFrame didFinishLoadWithReason:(NPReason)reason
+{
+ ASSERT(_isStarted);
+
+ WebPluginRequest *pluginRequest = [_pendingFrameLoads.get() objectForKey:webFrame];
+ ASSERT(pluginRequest != nil);
+ ASSERT([pluginRequest sendNotification]);
+
+ [self willCallPlugInFunction];
+ {
+ JSC::JSLock::DropAllLocks dropAllLocks(false);
+ [_pluginPackage.get() pluginFuncs]->urlnotify(plugin, [[[pluginRequest request] URL] _web_URLCString], reason, [pluginRequest notifyData]);
+ }
+ [self didCallPlugInFunction];
+
+ [_pendingFrameLoads.get() removeObjectForKey:webFrame];
+ [webFrame _setInternalLoadDelegate:nil];
+}
+
+- (void)webFrame:(WebFrame *)webFrame didFinishLoadWithError:(NSError *)error
+{
+ NPReason reason = NPRES_DONE;
+ if (error != nil)
+ reason = WebNetscapePluginStream::reasonForError(error);
+ [self webFrame:webFrame didFinishLoadWithReason:reason];
+}
+
+- (void)loadPluginRequest:(WebPluginRequest *)pluginRequest
+{
+ NSURLRequest *request = [pluginRequest request];
+ NSString *frameName = [pluginRequest frameName];
+ WebFrame *frame = nil;
+
+ NSURL *URL = [request URL];
+ NSString *JSString = [URL _webkit_scriptIfJavaScriptURL];
+
+ ASSERT(frameName || JSString);
+
+ if (frameName) {
+ // FIXME - need to get rid of this window creation which
+ // bypasses normal targeted link handling
+ frame = kit(core([self webFrame])->loader()->findFrameForNavigation(frameName));
+ if (frame == nil) {
+ WebView *currentWebView = [self webView];
+ NSDictionary *features = [[NSDictionary alloc] init];
+ WebView *newWebView = [[currentWebView _UIDelegateForwarder] webView:currentWebView
+ createWebViewWithRequest:nil
+ windowFeatures:features];
+ [features release];
+
+ if (!newWebView) {
+ if ([pluginRequest sendNotification]) {
+ [self willCallPlugInFunction];
+ {
+ JSC::JSLock::DropAllLocks dropAllLocks(false);
+ [_pluginPackage.get() pluginFuncs]->urlnotify(plugin, [[[pluginRequest request] URL] _web_URLCString], NPERR_GENERIC_ERROR, [pluginRequest notifyData]);
+ }
+ [self didCallPlugInFunction];
+ }
+ return;
+ }
+
+ frame = [newWebView mainFrame];
+ core(frame)->tree()->setName(frameName);
+ [[newWebView _UIDelegateForwarder] webViewShow:newWebView];
+ }
+ }
+
+ if (JSString) {
+ ASSERT(frame == nil || [self webFrame] == frame);
+ [self evaluateJavaScriptPluginRequest:pluginRequest];
+ } else {
+ [frame loadRequest:request];
+ if ([pluginRequest sendNotification]) {
+ // Check if another plug-in view or even this view is waiting for the frame to load.
+ // If it is, tell it that the load was cancelled because it will be anyway.
+ WebNetscapePluginView *view = [frame _internalLoadDelegate];
+ if (view != nil) {
+ ASSERT([view isKindOfClass:[WebNetscapePluginView class]]);
+ [view webFrame:frame didFinishLoadWithReason:NPRES_USER_BREAK];
+ }
+ [_pendingFrameLoads.get() _webkit_setObject:pluginRequest forUncopiedKey:frame];
+ [frame _setInternalLoadDelegate:self];
+ }
+ }
+}
+
+- (NPError)loadRequest:(NSMutableURLRequest *)request inTarget:(const char *)cTarget withNotifyData:(void *)notifyData sendNotification:(BOOL)sendNotification
+{
+ NSURL *URL = [request URL];
+
+ if (!URL)
+ return NPERR_INVALID_URL;
+
+ // Don't allow requests to be loaded when the document loader is stopping all loaders.
+ if ([[self dataSource] _documentLoader]->isStopping())
+ return NPERR_GENERIC_ERROR;
+
+ NSString *target = nil;
+ if (cTarget) {
+ // Find the frame given the target string.
+ target = [NSString stringWithCString:cTarget encoding:NSISOLatin1StringEncoding];
+ }
+ WebFrame *frame = [self webFrame];
+
+ // don't let a plugin start any loads if it is no longer part of a document that is being
+ // displayed unless the loads are in the same frame as the plugin.
+ if ([[self dataSource] _documentLoader] != core([self webFrame])->loader()->activeDocumentLoader() &&
+ (!cTarget || [frame findFrameNamed:target] != frame)) {
+ return NPERR_GENERIC_ERROR;
+ }
+
+ NSString *JSString = [URL _webkit_scriptIfJavaScriptURL];
+ if (JSString != nil) {
+ if (![[[self webView] preferences] isJavaScriptEnabled]) {
+ // Return NPERR_GENERIC_ERROR if JS is disabled. This is what Mozilla does.
+ return NPERR_GENERIC_ERROR;
+ } else if (cTarget == NULL && _mode == NP_FULL) {
+ // Don't allow a JavaScript request from a standalone plug-in that is self-targetted
+ // because this can cause the user to be redirected to a blank page (3424039).
+ return NPERR_INVALID_PARAM;
+ }
+ } else {
+ if (!FrameLoader::canLoad(URL, String(), core([self webFrame])->document()))
+ return NPERR_GENERIC_ERROR;
+ }
+
+ if (cTarget || JSString) {
+ // Make when targetting a frame or evaluating a JS string, perform the request after a delay because we don't
+ // want to potentially kill the plug-in inside of its URL request.
+
+ if (JSString && target && [frame findFrameNamed:target] != frame) {
+ // For security reasons, only allow JS requests to be made on the frame that contains the plug-in.
+ return NPERR_INVALID_PARAM;
+ }
+
+ bool currentEventIsUserGesture = false;
+ if (_eventHandler)
+ currentEventIsUserGesture = _eventHandler->currentEventIsUserGesture();
+
+ WebPluginRequest *pluginRequest = [[WebPluginRequest alloc] initWithRequest:request
+ frameName:target
+ notifyData:notifyData
+ sendNotification:sendNotification
+ didStartFromUserGesture:currentEventIsUserGesture];
+ [self performSelector:@selector(loadPluginRequest:) withObject:pluginRequest afterDelay:0];
+ [pluginRequest release];
+ } else {
+ RefPtr<WebNetscapePluginStream> stream = WebNetscapePluginStream::create(request, plugin, sendNotification, notifyData);
+
+ streams.add(stream.get());
+ stream->start();
+ }
+
+ return NPERR_NO_ERROR;
+}
+
+-(NPError)getURLNotify:(const char *)URLCString target:(const char *)cTarget notifyData:(void *)notifyData
+{
+ LOG(Plugins, "NPN_GetURLNotify: %s target: %s", URLCString, cTarget);
+
+ NSMutableURLRequest *request = [self requestWithURLCString:URLCString];
+ return [self loadRequest:request inTarget:cTarget withNotifyData:notifyData sendNotification:YES];
+}
+
+-(NPError)getURL:(const char *)URLCString target:(const char *)cTarget
+{
+ LOG(Plugins, "NPN_GetURL: %s target: %s", URLCString, cTarget);
+
+ NSMutableURLRequest *request = [self requestWithURLCString:URLCString];
+ return [self loadRequest:request inTarget:cTarget withNotifyData:NULL sendNotification:NO];
+}
+
+- (NPError)_postURL:(const char *)URLCString
+ target:(const char *)target
+ len:(UInt32)len
+ buf:(const char *)buf
+ file:(NPBool)file
+ notifyData:(void *)notifyData
+ sendNotification:(BOOL)sendNotification
+ allowHeaders:(BOOL)allowHeaders
+{
+ if (!URLCString || !len || !buf) {
+ return NPERR_INVALID_PARAM;
+ }
+
+ NSData *postData = nil;
+
+ if (file) {
+ // If we're posting a file, buf is either a file URL or a path to the file.
+ NSString *bufString = (NSString *)CFStringCreateWithCString(kCFAllocatorDefault, buf, kCFStringEncodingWindowsLatin1);
+ if (!bufString) {
+ return NPERR_INVALID_PARAM;
+ }
+ NSURL *fileURL = [NSURL _web_URLWithDataAsString:bufString];
+ NSString *path;
+ if ([fileURL isFileURL]) {
+ path = [fileURL path];
+ } else {
+ path = bufString;
+ }
+ postData = [NSData dataWithContentsOfFile:[path _webkit_fixedCarbonPOSIXPath]];
+ CFRelease(bufString);
+ if (!postData) {
+ return NPERR_FILE_NOT_FOUND;
+ }
+ } else {
+ postData = [NSData dataWithBytes:buf length:len];
+ }
+
+ if ([postData length] == 0) {
+ return NPERR_INVALID_PARAM;
+ }
+
+ NSMutableURLRequest *request = [self requestWithURLCString:URLCString];
+ [request setHTTPMethod:@"POST"];
+
+ if (allowHeaders) {
+ if ([postData _web_startsWithBlankLine]) {
+ postData = [postData subdataWithRange:NSMakeRange(1, [postData length] - 1)];
+ } else {
+ NSInteger location = [postData _web_locationAfterFirstBlankLine];
+ if (location != NSNotFound) {
+ // If the blank line is somewhere in the middle of postData, everything before is the header.
+ NSData *headerData = [postData subdataWithRange:NSMakeRange(0, location)];
+ NSMutableDictionary *header = [headerData _webkit_parseRFC822HeaderFields];
+ unsigned dataLength = [postData length] - location;
+
+ // Sometimes plugins like to set Content-Length themselves when they post,
+ // but WebFoundation does not like that. So we will remove the header
+ // and instead truncate the data to the requested length.
+ NSString *contentLength = [header objectForKey:@"Content-Length"];
+
+ if (contentLength != nil)
+ dataLength = MIN((unsigned)[contentLength intValue], dataLength);
+ [header removeObjectForKey:@"Content-Length"];
+
+ if ([header count] > 0) {
+ [request setAllHTTPHeaderFields:header];
+ }
+ // Everything after the blank line is the actual content of the POST.
+ postData = [postData subdataWithRange:NSMakeRange(location, dataLength)];
+
+ }
+ }
+ if ([postData length] == 0) {
+ return NPERR_INVALID_PARAM;
+ }
+ }
+
+ // Plug-ins expect to receive uncached data when doing a POST (3347134).
+ [request setCachePolicy:NSURLRequestReloadIgnoringCacheData];
+ [request setHTTPBody:postData];
+
+ return [self loadRequest:request inTarget:target withNotifyData:notifyData sendNotification:sendNotification];
+}
+
+- (NPError)postURLNotify:(const char *)URLCString
+ target:(const char *)target
+ len:(UInt32)len
+ buf:(const char *)buf
+ file:(NPBool)file
+ notifyData:(void *)notifyData
+{
+ LOG(Plugins, "NPN_PostURLNotify: %s", URLCString);
+ return [self _postURL:URLCString target:target len:len buf:buf file:file notifyData:notifyData sendNotification:YES allowHeaders:YES];
+}
+
+-(NPError)postURL:(const char *)URLCString
+ target:(const char *)target
+ len:(UInt32)len
+ buf:(const char *)buf
+ file:(NPBool)file
+{
+ LOG(Plugins, "NPN_PostURL: %s", URLCString);
+ // As documented, only allow headers to be specified via NPP_PostURL when using a file.
+ return [self _postURL:URLCString target:target len:len buf:buf file:file notifyData:NULL sendNotification:NO allowHeaders:file];
+}
+
+-(NPError)newStream:(NPMIMEType)type target:(const char *)target stream:(NPStream**)stream
+{
+ LOG(Plugins, "NPN_NewStream");
+ return NPERR_GENERIC_ERROR;
+}
+
+-(NPError)write:(NPStream*)stream len:(SInt32)len buffer:(void *)buffer
+{
+ LOG(Plugins, "NPN_Write");
+ return NPERR_GENERIC_ERROR;
+}
+
+-(NPError)destroyStream:(NPStream*)stream reason:(NPReason)reason
+{
+ LOG(Plugins, "NPN_DestroyStream");
+ // This function does a sanity check to ensure that the NPStream provided actually
+ // belongs to the plug-in that provided it, which fixes a crash in the DivX
+ // plug-in: <rdar://problem/5093862> | http://bugs.webkit.org/show_bug.cgi?id=13203
+ if (!stream || WebNetscapePluginStream::ownerForStream(stream) != plugin) {
+ LOG(Plugins, "Invalid NPStream passed to NPN_DestroyStream: %p", stream);
+ return NPERR_INVALID_INSTANCE_ERROR;
+ }
+
+ WebNetscapePluginStream* browserStream = static_cast<WebNetscapePluginStream*>(stream->ndata);
+ browserStream->cancelLoadAndDestroyStreamWithError(browserStream->errorForReason(reason));
+
+ return NPERR_NO_ERROR;
+}
+
+- (const char *)userAgent
+{
+ NSString *userAgent = [[self webView] userAgentForURL:_baseURL.get()];
+
+ if (_isSilverlight) {
+ // Silverlight has a workaround for a leak in Safari 2. This workaround is
+ // applied when the user agent does not contain "Version/3" so we append it
+ // at the end of the user agent.
+ userAgent = [userAgent stringByAppendingString:@" Version/3.2.1"];
+ }
+
+ return [userAgent UTF8String];
+}
+
+-(void)status:(const char *)message
+{
+ if (!message) {
+ LOG_ERROR("NPN_Status passed a NULL status message");
+ return;
+ }
+
+ CFStringRef status = CFStringCreateWithCString(NULL, message, kCFStringEncodingUTF8);
+ if (!status) {
+ LOG_ERROR("NPN_Status: the message was not valid UTF-8");
+ return;
+ }
+
+ LOG(Plugins, "NPN_Status: %@", status);
+ WebView *wv = [self webView];
+ [[wv _UIDelegateForwarder] webView:wv setStatusText:(NSString *)status];
+ CFRelease(status);
+}
+
+-(void)invalidateRect:(NPRect *)invalidRect
+{
+ LOG(Plugins, "NPN_InvalidateRect");
+ [self setNeedsDisplayInRect:NSMakeRect(invalidRect->left, invalidRect->top,
+ (float)invalidRect->right - invalidRect->left, (float)invalidRect->bottom - invalidRect->top)];
+}
+
+-(BOOL)isOpaque
+{
+ return YES;
+}
+
+- (void)invalidateRegion:(NPRegion)invalidRegion
+{
+ LOG(Plugins, "NPN_InvalidateRegion");
+ NSRect invalidRect = NSZeroRect;
+ switch (drawingModel) {
+#ifndef NP_NO_QUICKDRAW
+ case NPDrawingModelQuickDraw:
+ {
+ ::Rect qdRect;
+ GetRegionBounds((NPQDRegion)invalidRegion, &qdRect);
+ invalidRect = NSMakeRect(qdRect.left, qdRect.top, qdRect.right - qdRect.left, qdRect.bottom - qdRect.top);
+ }
+ break;
+#endif /* NP_NO_QUICKDRAW */
+
+ case NPDrawingModelCoreGraphics:
+ {
+ CGRect cgRect = CGPathGetBoundingBox((NPCGRegion)invalidRegion);
+ invalidRect = *(NSRect*)&cgRect;
+ break;
+ }
+ default:
+ ASSERT_NOT_REACHED();
+ break;
+ }
+
+ [self setNeedsDisplayInRect:invalidRect];
+}
+
+-(void)forceRedraw
+{
+ LOG(Plugins, "forceRedraw");
+ [self setNeedsDisplay:YES];
+ [[self window] displayIfNeeded];
+}
+
+static NPBrowserTextInputFuncs *browserTextInputFuncs()
+{
+ static NPBrowserTextInputFuncs inputFuncs = {
+ 0,
+ sizeof(NPBrowserTextInputFuncs),
+ NPN_MarkedTextAbandoned,
+ NPN_MarkedTextSelectionChanged
+ };
+
+ return &inputFuncs;
+}
+
+- (NPError)getVariable:(NPNVariable)variable value:(void *)value
+{
+ switch (variable) {
+ case NPNVWindowNPObject:
+ {
+ Frame* frame = core([self webFrame]);
+ NPObject* windowScriptObject = frame ? frame->script()->windowScriptNPObject() : 0;
+
+ // Return value is expected to be retained, as described here: <http://www.mozilla.org/projects/plugins/npruntime.html#browseraccess>
+ if (windowScriptObject)
+ _NPN_RetainObject(windowScriptObject);
+
+ void **v = (void **)value;
+ *v = windowScriptObject;
+
+ return NPERR_NO_ERROR;
+ }
+
+ case NPNVPluginElementNPObject:
+ {
+ if (!_element)
+ return NPERR_GENERIC_ERROR;
+
+ NPObject *plugInScriptObject = (NPObject *)[_element.get() _NPObject];
+
+ // Return value is expected to be retained, as described here: <http://www.mozilla.org/projects/plugins/npruntime.html#browseraccess>
+ if (plugInScriptObject)
+ _NPN_RetainObject(plugInScriptObject);
+
+ void **v = (void **)value;
+ *v = plugInScriptObject;
+
+ return NPERR_NO_ERROR;
+ }
+
+ case NPNVpluginDrawingModel:
+ {
+ *(NPDrawingModel *)value = drawingModel;
+ return NPERR_NO_ERROR;
+ }
+
+#ifndef NP_NO_QUICKDRAW
+ case NPNVsupportsQuickDrawBool:
+ {
+ *(NPBool *)value = TRUE;
+ return NPERR_NO_ERROR;
+ }
+#endif /* NP_NO_QUICKDRAW */
+
+ case NPNVsupportsCoreGraphicsBool:
+ {
+ *(NPBool *)value = TRUE;
+ return NPERR_NO_ERROR;
+ }
+
+ case NPNVsupportsOpenGLBool:
+ {
+ *(NPBool *)value = FALSE;
+ return NPERR_NO_ERROR;
+ }
+
+ case NPNVsupportsCoreAnimationBool:
+ {
+#ifdef BUILDING_ON_TIGER
+ *(NPBool *)value = FALSE;
+#else
+ *(NPBool *)value = TRUE;
+#endif
+ return NPERR_NO_ERROR;
+ }
+
+#ifndef NP_NO_CARBON
+ case NPNVsupportsCarbonBool:
+ {
+ *(NPBool *)value = TRUE;
+ return NPERR_NO_ERROR;
+ }
+#endif /* NP_NO_CARBON */
+
+ case NPNVsupportsCocoaBool:
+ {
+ *(NPBool *)value = TRUE;
+ return NPERR_NO_ERROR;
+ }
+
+ case NPNVbrowserTextInputFuncs:
+ {
+ if (eventModel == NPEventModelCocoa) {
+ *(NPBrowserTextInputFuncs **)value = browserTextInputFuncs();
+ return NPERR_NO_ERROR;
+ }
+ }
+ default:
+ break;
+ }
+
+ return NPERR_GENERIC_ERROR;
+}
+
+- (NPError)setVariable:(NPPVariable)variable value:(void *)value
+{
+ switch (variable) {
+ case NPPVpluginDrawingModel:
+ {
+ // Can only set drawing model inside NPP_New()
+ if (self != [[self class] currentPluginView])
+ return NPERR_GENERIC_ERROR;
+
+ // Check for valid, supported drawing model
+ NPDrawingModel newDrawingModel = (NPDrawingModel)(uintptr_t)value;
+ switch (newDrawingModel) {
+ // Supported drawing models:
+#ifndef NP_NO_QUICKDRAW
+ case NPDrawingModelQuickDraw:
+#endif
+ case NPDrawingModelCoreGraphics:
+#ifndef BUILDING_ON_TIGER
+ case NPDrawingModelCoreAnimation:
+#endif
+ drawingModel = newDrawingModel;
+ return NPERR_NO_ERROR;
+
+
+ // Unsupported (or unknown) drawing models:
+ default:
+ LOG(Plugins, "Plugin %@ uses unsupported drawing model: %d", _eventHandler.get(), drawingModel);
+ return NPERR_GENERIC_ERROR;
+ }
+ }
+
+ case NPPVpluginEventModel:
+ {
+ // Can only set event model inside NPP_New()
+ if (self != [[self class] currentPluginView])
+ return NPERR_GENERIC_ERROR;
+
+ // Check for valid, supported event model
+ NPEventModel newEventModel = (NPEventModel)(uintptr_t)value;
+ switch (newEventModel) {
+ // Supported event models:
+#ifndef NP_NO_CARBON
+ case NPEventModelCarbon:
+#endif
+ case NPEventModelCocoa:
+ eventModel = newEventModel;
+ return NPERR_NO_ERROR;
+
+ // Unsupported (or unknown) event models:
+ default:
+ LOG(Plugins, "Plugin %@ uses unsupported event model: %d", _eventHandler.get(), eventModel);
+ return NPERR_GENERIC_ERROR;
+ }
+ }
+
+ default:
+ return NPERR_GENERIC_ERROR;
+ }
+}
+
+- (uint32)scheduleTimerWithInterval:(uint32)interval repeat:(NPBool)repeat timerFunc:(void (*)(NPP npp, uint32 timerID))timerFunc
+{
+ if (!timerFunc)
+ return 0;
+
+ if (!timers)
+ timers = new HashMap<uint32, PluginTimer*>;
+
+ uint32 timerID;
+
+ do {
+ timerID = ++currentTimerID;
+ } while (timers->contains(timerID) || timerID == 0);
+
+ PluginTimer* timer = new PluginTimer(plugin, timerID, interval, repeat, timerFunc);
+ timers->set(timerID, timer);
+
+ if (_shouldFireTimers)
+ timer->start(_isCompletelyObscured);
+
+ return timerID;
+}
+
+- (void)unscheduleTimer:(uint32)timerID
+{
+ if (!timers)
+ return;
+
+ if (PluginTimer* timer = timers->take(timerID))
+ delete timer;
+}
+
+- (NPError)popUpContextMenu:(NPMenu *)menu
+{
+ NSEvent *currentEvent = [NSApp currentEvent];
+
+ // NPN_PopUpContextMenu must be called from within the plug-in's NPP_HandleEvent.
+ if (!currentEvent)
+ return NPERR_GENERIC_ERROR;
+
+ [NSMenu popUpContextMenu:(NSMenu *)menu withEvent:currentEvent forView:self];
+ return NPERR_NO_ERROR;
+}
+
+@end
+
+@implementation WebNetscapePluginView (Internal)
+
+- (NPError)_createPlugin
+{
+ plugin = (NPP)calloc(1, sizeof(NPP_t));
+ plugin->ndata = self;
+
+ ASSERT([_pluginPackage.get() pluginFuncs]->newp);
+
+ // NPN_New(), which creates the plug-in instance, should never be called while calling a plug-in function for that instance.
+ ASSERT(pluginFunctionCallDepth == 0);
+
+ PluginMainThreadScheduler::scheduler().registerPlugin(plugin);
+
+ _isSilverlight = [[[_pluginPackage.get() bundle] bundleIdentifier] isEqualToString:@"com.microsoft.SilverlightPlugin"];
+
+ [[self class] setCurrentPluginView:self];
+ NPError npErr = [_pluginPackage.get() pluginFuncs]->newp((char *)[_MIMEType.get() cString], plugin, _mode, argsCount, cAttributes, cValues, NULL);
+ [[self class] setCurrentPluginView:nil];
+ LOG(Plugins, "NPP_New: %d", npErr);
+ return npErr;
+}
+
+- (void)_destroyPlugin
+{
+ PluginMainThreadScheduler::scheduler().unregisterPlugin(plugin);
+
+ NPError npErr;
+ npErr = ![_pluginPackage.get() pluginFuncs]->destroy(plugin, NULL);
+ LOG(Plugins, "NPP_Destroy: %d", npErr);
+
+ if (Frame* frame = core([self webFrame]))
+ frame->script()->cleanupScriptObjectsForPlugin(self);
+
+ free(plugin);
+ plugin = NULL;
+}
+
+- (NSBitmapImageRep *)_printedPluginBitmap
+{
+#ifdef NP_NO_QUICKDRAW
+ return nil;
+#else
+ // Cannot print plugins that do not implement NPP_Print
+ if (![_pluginPackage.get() pluginFuncs]->print)
+ return nil;
+
+ // This NSBitmapImageRep will share its bitmap buffer with a GWorld that the plugin will draw into.
+ // The bitmap is created in 32-bits-per-pixel ARGB format, which is the default GWorld pixel format.
+ NSBitmapImageRep *bitmap = [[[NSBitmapImageRep alloc] initWithBitmapDataPlanes:NULL
+ pixelsWide:window.width
+ pixelsHigh:window.height
+ bitsPerSample:8
+ samplesPerPixel:4
+ hasAlpha:YES
+ isPlanar:NO
+ colorSpaceName:NSDeviceRGBColorSpace
+ bitmapFormat:NSAlphaFirstBitmapFormat
+ bytesPerRow:0
+ bitsPerPixel:0] autorelease];
+ ASSERT(bitmap);
+
+ // Create a GWorld with the same underlying buffer into which the plugin can draw
+ ::Rect printGWorldBounds;
+ SetRect(&printGWorldBounds, 0, 0, window.width, window.height);
+ GWorldPtr printGWorld;
+ if (NewGWorldFromPtr(&printGWorld,
+ k32ARGBPixelFormat,
+ &printGWorldBounds,
+ NULL,
+ NULL,
+ 0,
+ (Ptr)[bitmap bitmapData],
+ [bitmap bytesPerRow]) != noErr) {
+ LOG_ERROR("Could not create GWorld for printing");
+ return nil;
+ }
+
+ /// Create NPWindow for the GWorld
+ NPWindow printNPWindow;
+ printNPWindow.window = &printGWorld; // Normally this is an NP_Port, but when printing it is the actual CGrafPtr
+ printNPWindow.x = 0;
+ printNPWindow.y = 0;
+ printNPWindow.width = window.width;
+ printNPWindow.height = window.height;
+ printNPWindow.clipRect.top = 0;
+ printNPWindow.clipRect.left = 0;
+ printNPWindow.clipRect.right = window.width;
+ printNPWindow.clipRect.bottom = window.height;
+ printNPWindow.type = NPWindowTypeDrawable; // Offscreen graphics port as opposed to a proper window
+
+ // Create embed-mode NPPrint
+ NPPrint npPrint;
+ npPrint.mode = NP_EMBED;
+ npPrint.print.embedPrint.window = printNPWindow;
+ npPrint.print.embedPrint.platformPrint = printGWorld;
+
+ // Tell the plugin to print into the GWorld
+ [self willCallPlugInFunction];
+ {
+ JSC::JSLock::DropAllLocks dropAllLocks(false);
+ [_pluginPackage.get() pluginFuncs]->print(plugin, &npPrint);
+ }
+ [self didCallPlugInFunction];
+
+ // Don't need the GWorld anymore
+ DisposeGWorld(printGWorld);
+
+ return bitmap;
+#endif
+}
+
+- (void)_redeliverStream
+{
+ if ([self dataSource] && _isStarted) {
+ // Deliver what has not been passed to the plug-in up to this point.
+ if (_dataLengthReceived > 0) {
+ NSData *data = [[[self dataSource] data] subdataWithRange:NSMakeRange(0, _dataLengthReceived)];
+ _dataLengthReceived = 0;
+ [self pluginView:self receivedData:data];
+ if (![[self dataSource] isLoading]) {
+ if (_error)
+ [self pluginView:self receivedError:_error.get()];
+ else
+ [self pluginViewFinishedLoading:self];
+ }
+ }
+ }
+}
+
+@end
+
+#endif
diff --git a/WebKit/mac/Plugins/WebPluginController.mm b/WebKit/mac/Plugins/WebPluginController.mm
index d892d4a..b618bd6 100644
--- a/WebKit/mac/Plugins/WebPluginController.mm
+++ b/WebKit/mac/Plugins/WebPluginController.mm
@@ -335,7 +335,7 @@ static void cancelOutstandingCheck(const void *item, void *context)
LOG_ERROR("could not load URL %@", [request URL]);
return;
}
- core(frame)->loader()->load(request, target);
+ core(frame)->loader()->load(request, target, false);
}
}
diff --git a/WebKit/mac/Plugins/WebPluginDatabase.mm b/WebKit/mac/Plugins/WebPluginDatabase.mm
index 531214e..4f2bdd8 100644
--- a/WebKit/mac/Plugins/WebPluginDatabase.mm
+++ b/WebKit/mac/Plugins/WebPluginDatabase.mm
@@ -28,20 +28,20 @@
#import "WebPluginDatabase.h"
+#import "WebBaseNetscapePluginView.h"
#import "WebBasePluginPackage.h"
#import "WebDataSourcePrivate.h"
#import "WebFrame.h"
#import "WebFrameViewInternal.h"
#import "WebHTMLRepresentation.h"
#import "WebHTMLView.h"
+#import "WebHTMLView.h"
#import "WebKitLogging.h"
-#import "WebNetscapePluginPackage.h"
#import "WebNSFileManagerExtras.h"
+#import "WebNetscapePluginPackage.h"
#import "WebPluginController.h"
-#import "WebBaseNetscapePluginView.h"
#import "WebPluginPackage.h"
#import "WebViewPrivate.h"
-#import "WebHTMLView.h"
#import <WebKitSystemInterface.h>
#import <wtf/Assertions.h>
diff --git a/WebKit/mac/Plugins/WebPluginRequest.h b/WebKit/mac/Plugins/WebPluginRequest.h
new file mode 100644
index 0000000..5336dcb
--- /dev/null
+++ b/WebKit/mac/Plugins/WebPluginRequest.h
@@ -0,0 +1,50 @@
+/*
+ * Copyright (C) 2005, 2007 Apple Inc. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ * 3. Neither the name of Apple Computer, Inc. ("Apple") nor the names of
+ * its contributors may be used to endorse or promote products derived
+ * from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY APPLE AND ITS CONTRIBUTORS "AS IS" AND ANY
+ * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+ * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+ * DISCLAIMED. IN NO EVENT SHALL APPLE OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+ * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+ * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+ * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+ * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#if ENABLE(NETSCAPE_PLUGIN_API)
+
+@interface WebPluginRequest : NSObject
+{
+ NSURLRequest *_request;
+ NSString *_frameName;
+ void *_notifyData;
+ BOOL _didStartFromUserGesture;
+ BOOL _sendNotification;
+}
+
+- (id)initWithRequest:(NSURLRequest *)request frameName:(NSString *)frameName notifyData:(void *)notifyData sendNotification:(BOOL)sendNotification didStartFromUserGesture:(BOOL)currentEventIsUserGesture;
+
+- (NSURLRequest *)request;
+- (NSString *)frameName;
+- (void *)notifyData;
+- (BOOL)isCurrentEventUserGesture;
+- (BOOL)sendNotification;
+
+@end
+
+#endif // ENABLE(NETSCAPE_PLUGIN_API)
diff --git a/WebKit/mac/Plugins/WebPluginRequest.m b/WebKit/mac/Plugins/WebPluginRequest.m
new file mode 100644
index 0000000..df36d40
--- /dev/null
+++ b/WebKit/mac/Plugins/WebPluginRequest.m
@@ -0,0 +1,80 @@
+/*
+ * Copyright (C) 2005, 2007 Apple Inc. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ * 3. Neither the name of Apple Computer, Inc. ("Apple") nor the names of
+ * its contributors may be used to endorse or promote products derived
+ * from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY APPLE AND ITS CONTRIBUTORS "AS IS" AND ANY
+ * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+ * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+ * DISCLAIMED. IN NO EVENT SHALL APPLE OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+ * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+ * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+ * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+ * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#if ENABLE(NETSCAPE_PLUGIN_API)
+
+#import "WebPluginRequest.h"
+
+@implementation WebPluginRequest
+
+- (id)initWithRequest:(NSURLRequest *)request frameName:(NSString *)frameName notifyData:(void *)notifyData sendNotification:(BOOL)sendNotification didStartFromUserGesture:(BOOL)currentEventIsUserGesture
+{
+ [super init];
+ _didStartFromUserGesture = currentEventIsUserGesture;
+ _request = [request retain];
+ _frameName = [frameName retain];
+ _notifyData = notifyData;
+ _sendNotification = sendNotification;
+ return self;
+}
+
+- (void)dealloc
+{
+ [_request release];
+ [_frameName release];
+ [super dealloc];
+}
+
+- (NSURLRequest *)request
+{
+ return _request;
+}
+
+- (NSString *)frameName
+{
+ return _frameName;
+}
+
+- (BOOL)isCurrentEventUserGesture
+{
+ return _didStartFromUserGesture;
+}
+
+- (BOOL)sendNotification
+{
+ return _sendNotification;
+}
+
+- (void *)notifyData
+{
+ return _notifyData;
+}
+
+@end
+
+#endif // ENABLE(NETSCAPE_PLUGIN_API)
diff --git a/WebKit/mac/Plugins/npapi.mm b/WebKit/mac/Plugins/npapi.mm
index f85ec9f..eb32c2b 100644
--- a/WebKit/mac/Plugins/npapi.mm
+++ b/WebKit/mac/Plugins/npapi.mm
@@ -30,13 +30,13 @@
#import <WebKit/npapi.h>
#import <WebKit/nptextinput.h>
-#import "WebBaseNetscapePluginView.h"
+#import "WebNetscapePluginView.h"
#import "WebKitLogging.h"
#import <WebCore/PluginMainThreadScheduler.h>
using namespace WebCore;
-WebBaseNetscapePluginView *pluginViewForInstance(NPP instance);
+WebNetscapePluginView *pluginViewForInstance(NPP instance);
// general plug-in to browser functions
@@ -70,14 +70,14 @@ NPError NPN_RequestRead(NPStream* stream, NPByteRange* rangeList)
// instance-specific functions
// The plugin view is always the ndata of the instance. Sometimes, plug-ins will call an instance-specific function
// with a NULL instance. To workaround this, call the last plug-in view that made a call to a plug-in.
-// Currently, the current plug-in view is only set before NPP_New in [WebBaseNetscapePluginView start].
+// Currently, the current plug-in view is only set before NPP_New in [WebNetscapePluginView start].
// This specifically works around Flash and Shockwave. When we call NPP_New, they call NPN_UserAgent with a NULL instance.
-WebBaseNetscapePluginView *pluginViewForInstance(NPP instance)
+WebNetscapePluginView *pluginViewForInstance(NPP instance)
{
if (instance && instance->ndata)
- return (WebBaseNetscapePluginView *)instance->ndata;
+ return (WebNetscapePluginView *)instance->ndata;
else
- return [WebBaseNetscapePluginView currentPluginView];
+ return [WebNetscapePluginView currentPluginView];
}
NPError NPN_GetURLNotify(NPP instance, const char* URL, const char* target, void* notifyData)
@@ -194,14 +194,14 @@ NPError NPN_PopUpContextMenu(NPP instance, NPMenu *menu)
void NPN_MarkedTextAbandoned(NPP instance)
{
- WebBaseNetscapePluginView *pluginView = pluginViewForInstance(instance);
+ WebNetscapePluginView *pluginView = pluginViewForInstance(instance);
[[NSInputManager currentInputManager] markedTextAbandoned:pluginView];
}
void NPN_MarkedTextSelectionChanged(NPP instance, NSRange newSel)
{
- WebBaseNetscapePluginView *pluginView = pluginViewForInstance(instance);
+ WebNetscapePluginView *pluginView = pluginViewForInstance(instance);
[[NSInputManager currentInputManager] markedTextSelectionChanged:newSel client:pluginView];
}
diff --git a/WebKit/mac/WebCoreSupport/WebCachedPagePlatformData.h b/WebKit/mac/WebCoreSupport/WebCachedFramePlatformData.h
index 3b0ab32..6c3f166 100644
--- a/WebKit/mac/WebCoreSupport/WebCachedPagePlatformData.h
+++ b/WebKit/mac/WebCoreSupport/WebCachedFramePlatformData.h
@@ -27,12 +27,12 @@
*/
#import <objc/objc-runtime.h>
-#import <WebCore/CachedPagePlatformData.h>
+#import <WebCore/CachedFramePlatformData.h>
#import <wtf/RetainPtr.h>
-class WebCachedPagePlatformData : public WebCore::CachedPagePlatformData {
+class WebCachedFramePlatformData : public WebCore::CachedFramePlatformData {
public:
- WebCachedPagePlatformData(id webDocumentView) : m_webDocumentView(webDocumentView) { }
+ WebCachedFramePlatformData(id webDocumentView) : m_webDocumentView(webDocumentView) { }
virtual void clear() { objc_msgSend(m_webDocumentView.get(), @selector(closeIfNotCurrentView)); }
diff --git a/WebKit/mac/WebCoreSupport/WebChromeClient.h b/WebKit/mac/WebCoreSupport/WebChromeClient.h
index f6a6efb..29a4c25 100644
--- a/WebKit/mac/WebCoreSupport/WebChromeClient.h
+++ b/WebKit/mac/WebCoreSupport/WebChromeClient.h
@@ -94,7 +94,9 @@ public:
virtual WebCore::IntPoint screenToWindow(const WebCore::IntPoint&) const;
virtual WebCore::IntRect windowToScreen(const WebCore::IntRect&) const;
virtual PlatformWidget platformWindow() const;
-
+ virtual void contentsSizeChanged(WebCore::Frame*, const WebCore::IntSize&) const;
+ virtual void scrollRectIntoView(const WebCore::IntRect&, const WebCore::ScrollView*) const;
+
virtual void setStatusbarText(const WebCore::String&);
virtual void mouseDidMoveOverElement(const WebCore::HitTestResult&, unsigned modifierFlags);
@@ -131,6 +133,7 @@ public:
virtual void enableSuddenTermination();
virtual void disableSuddenTermination();
+ virtual void formStateDidChange(const WebCore::Node*) { }
private:
WebView *m_webView;
diff --git a/WebKit/mac/WebCoreSupport/WebChromeClient.mm b/WebKit/mac/WebCoreSupport/WebChromeClient.mm
index f864367..6b5d138 100644
--- a/WebKit/mac/WebCoreSupport/WebChromeClient.mm
+++ b/WebKit/mac/WebCoreSupport/WebChromeClient.mm
@@ -55,6 +55,7 @@
#import <WebCore/PlatformScreen.h>
#import <WebCore/PlatformString.h>
#import <WebCore/ResourceRequest.h>
+#import <WebCore/ScrollView.h>
#import <WebCore/Widget.h>
#import <WebCore/WindowFeatures.h>
#import <wtf/PassRefPtr.h>
@@ -449,6 +450,30 @@ PlatformWidget WebChromeClient::platformWindow() const
return 0;
return m_webView;
}
+
+void WebChromeClient::contentsSizeChanged(Frame*, const IntSize&) const
+{
+}
+
+void WebChromeClient::scrollRectIntoView(const IntRect& r, const ScrollView* scrollView) const
+{
+ // FIXME: This scrolling behavior should be under the control of the embedding client (rather than something
+ // we just do ourselves).
+
+ // We have to convert back to document view coordinates in order to let the flipping conversion take place. It just
+ // doesn't make sense for the scrollRectIntoView API to take document view coordinates.
+ IntRect scrollRect = r;
+ scrollRect.move(scrollView->scrollOffset());
+ NSRect rect = scrollRect;
+ for (NSView *view = [[[m_webView mainFrame] frameView] documentView]; view; view = [view superview]) {
+ if ([view isKindOfClass:[NSClipView class]]) {
+ NSClipView *clipView = (NSClipView *)view;
+ NSView *documentView = [clipView documentView];
+ [documentView scrollRectToVisible:[documentView convertRect:rect fromView:[[[m_webView mainFrame] frameView] documentView]]];
+ }
+ }
+}
+
// End host window methods.
void WebChromeClient::mouseDidMoveOverElement(const HitTestResult& result, unsigned modifierFlags)
diff --git a/WebKit/mac/WebCoreSupport/WebEditorClient.h b/WebKit/mac/WebCoreSupport/WebEditorClient.h
index 245e575..2845b97 100644
--- a/WebKit/mac/WebCoreSupport/WebEditorClient.h
+++ b/WebKit/mac/WebCoreSupport/WebEditorClient.h
@@ -48,6 +48,7 @@ public:
virtual int spellCheckerDocumentTag();
virtual bool smartInsertDeleteEnabled();
+ virtual bool isSelectTrailingWhitespaceEnabled();
virtual bool isEditable();
virtual bool shouldDeleteRange(WebCore::Range*);
diff --git a/WebKit/mac/WebCoreSupport/WebEditorClient.mm b/WebKit/mac/WebCoreSupport/WebEditorClient.mm
index f2ed480..67d3cc2 100644
--- a/WebKit/mac/WebCoreSupport/WebEditorClient.mm
+++ b/WebKit/mac/WebCoreSupport/WebEditorClient.mm
@@ -53,6 +53,7 @@
#import <WebCore/PlatformKeyboardEvent.h>
#import <WebCore/PlatformString.h>
#import <WebCore/WebCoreObjCExtras.h>
+#import <runtime/InitializeThreading.h>
#import <wtf/PassRefPtr.h>
using namespace WebCore;
@@ -89,12 +90,13 @@ WebViewInsertAction kit(EditorInsertAction coreAction)
@implementation WebEditCommand
-#ifndef BUILDING_ON_TIGER
+ (void)initialize
{
+ JSC::initializeThreading();
+#ifndef BUILDING_ON_TIGER
WebCoreObjCFinalizeOnMainThread(self);
-}
#endif
+}
- (id)initWithEditCommand:(PassRefPtr<EditCommand>)command
{
@@ -222,6 +224,11 @@ bool WebEditorClient::smartInsertDeleteEnabled()
return [m_webView smartInsertDeleteEnabled];
}
+bool WebEditorClient::isSelectTrailingWhitespaceEnabled()
+{
+ return [m_webView isSelectTrailingWhitespaceEnabled];
+}
+
bool WebEditorClient::shouldApplyStyle(CSSStyleDeclaration* style, Range* range)
{
return [[m_webView _editingDelegateForwarder] webView:m_webView
@@ -447,6 +454,9 @@ void WebEditorClient::handleInputMethodKeydown(KeyboardEvent* event)
void WebEditorClient::textFieldDidBeginEditing(Element* element)
{
+ if (!element->isHTMLElement())
+ return;
+
DOMHTMLInputElement* inputElement = [DOMHTMLInputElement _wrapHTMLInputElement:(HTMLInputElement*)element];
FormDelegateLog(inputElement);
CallFormDelegate(m_webView, @selector(textFieldDidBeginEditing:inFrame:), inputElement, kit(element->document()->frame()));
@@ -454,6 +464,9 @@ void WebEditorClient::textFieldDidBeginEditing(Element* element)
void WebEditorClient::textFieldDidEndEditing(Element* element)
{
+ if (!element->isHTMLElement())
+ return;
+
DOMHTMLInputElement* inputElement = [DOMHTMLInputElement _wrapHTMLInputElement:(HTMLInputElement*)element];
FormDelegateLog(inputElement);
CallFormDelegate(m_webView, @selector(textFieldDidEndEditing:inFrame:), inputElement, kit(element->document()->frame()));
@@ -461,6 +474,9 @@ void WebEditorClient::textFieldDidEndEditing(Element* element)
void WebEditorClient::textDidChangeInTextField(Element* element)
{
+ if (!element->isHTMLElement())
+ return;
+
DOMHTMLInputElement* inputElement = [DOMHTMLInputElement _wrapHTMLInputElement:(HTMLInputElement*)element];
FormDelegateLog(inputElement);
CallFormDelegate(m_webView, @selector(textDidChangeInTextField:inFrame:), inputElement, kit(element->document()->frame()));
@@ -491,6 +507,9 @@ static SEL selectorForKeyEvent(KeyboardEvent* event)
bool WebEditorClient::doTextFieldCommandFromEvent(Element* element, KeyboardEvent* event)
{
+ if (!element->isHTMLElement())
+ return NO;
+
DOMHTMLInputElement* inputElement = [DOMHTMLInputElement _wrapHTMLInputElement:(HTMLInputElement*)element];
FormDelegateLog(inputElement);
if (SEL commandSelector = selectorForKeyEvent(event))
@@ -500,6 +519,9 @@ bool WebEditorClient::doTextFieldCommandFromEvent(Element* element, KeyboardEven
void WebEditorClient::textWillBeDeletedInTextField(Element* element)
{
+ if (!element->isHTMLElement())
+ return;
+
DOMHTMLInputElement* inputElement = [DOMHTMLInputElement _wrapHTMLInputElement:(HTMLInputElement*)element];
FormDelegateLog(inputElement);
// We're using the deleteBackward selector for all deletion operations since the autofill code treats all deletions the same way.
@@ -508,6 +530,9 @@ void WebEditorClient::textWillBeDeletedInTextField(Element* element)
void WebEditorClient::textDidChangeInTextArea(Element* element)
{
+ if (!element->isHTMLElement())
+ return;
+
DOMHTMLTextAreaElement* textAreaElement = [DOMHTMLTextAreaElement _wrapHTMLTextAreaElement:(HTMLTextAreaElement*)element];
FormDelegateLog(textAreaElement);
CallFormDelegate(m_webView, @selector(textDidChangeInTextArea:inFrame:), textAreaElement, kit(element->document()->frame()));
diff --git a/WebKit/mac/WebCoreSupport/WebFrameLoaderClient.h b/WebKit/mac/WebCoreSupport/WebFrameLoaderClient.h
index 2730765..03c00ee 100644
--- a/WebKit/mac/WebCoreSupport/WebFrameLoaderClient.h
+++ b/WebKit/mac/WebCoreSupport/WebFrameLoaderClient.h
@@ -40,7 +40,7 @@
namespace WebCore {
class AuthenticationChallenge;
- class CachedPage;
+ class CachedFrame;
class HistoryItem;
class String;
class ResourceLoader;
@@ -76,6 +76,7 @@ private:
virtual void assignIdentifierToInitialRequest(unsigned long identifier, WebCore::DocumentLoader*, const WebCore::ResourceRequest&);
virtual void dispatchWillSendRequest(WebCore::DocumentLoader*, unsigned long identifier, WebCore::ResourceRequest&, const WebCore::ResourceResponse& redirectResponse);
+ virtual bool shouldUseCredentialStorage(WebCore::DocumentLoader*, unsigned long identifier);
virtual void dispatchDidReceiveAuthenticationChallenge(WebCore::DocumentLoader*, unsigned long identifier, const WebCore::AuthenticationChallenge&);
virtual void dispatchDidCancelAuthenticationChallenge(WebCore::DocumentLoader*, unsigned long identifier, const WebCore::AuthenticationChallenge&);
virtual void dispatchDidReceiveResponse(WebCore::DocumentLoader*, unsigned long identifier, const WebCore::ResourceResponse&);
@@ -100,6 +101,7 @@ private:
virtual void dispatchDidFinishDocumentLoad();
virtual void dispatchDidFinishLoad();
virtual void dispatchDidFirstLayout();
+ virtual void dispatchDidFirstVisuallyNonEmptyLayout();
virtual WebCore::Frame* dispatchCreatePage();
virtual void dispatchShow();
@@ -136,7 +138,9 @@ private:
virtual void committedLoad(WebCore::DocumentLoader*, const char*, int);
virtual void finishedLoading(WebCore::DocumentLoader*);
- virtual void updateGlobalHistory(const WebCore::KURL&);
+ virtual void updateGlobalHistory();
+ virtual void updateGlobalHistoryForRedirectWithoutHistoryItem();
+
virtual bool shouldGoToHistoryItem(WebCore::HistoryItem*) const;
virtual WebCore::ResourceError cancelledError(const WebCore::ResourceRequest&);
@@ -152,8 +156,8 @@ private:
virtual WebCore::String userAgent(const WebCore::KURL&);
- virtual void savePlatformDataToCachedPage(WebCore::CachedPage*);
- virtual void transitionToCommittedFromCachedPage(WebCore::CachedPage*);
+ virtual void savePlatformDataToCachedFrame(WebCore::CachedFrame*);
+ virtual void transitionToCommittedFromCachedFrame(WebCore::CachedFrame*);
virtual void transitionToCommittedForNewPage();
virtual bool canHandleRequest(const WebCore::ResourceRequest&) const;
diff --git a/WebKit/mac/WebCoreSupport/WebFrameLoaderClient.mm b/WebKit/mac/WebCoreSupport/WebFrameLoaderClient.mm
index eb538e0..6f02729 100644
--- a/WebKit/mac/WebCoreSupport/WebFrameLoaderClient.mm
+++ b/WebKit/mac/WebCoreSupport/WebFrameLoaderClient.mm
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2006, 2007, 2008 Apple Inc. All rights reserved.
+ * Copyright (C) 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
@@ -35,7 +35,7 @@
#import "DOMElementInternal.h"
#import "WebBackForwardList.h"
-#import "WebCachedPagePlatformData.h"
+#import "WebCachedFramePlatformData.h"
#import "WebChromeClient.h"
#import "WebDataSourceInternal.h"
#import "WebDocumentInternal.h"
@@ -56,7 +56,7 @@
#import "WebKitLogging.h"
#import "WebKitNSStringExtras.h"
#import "WebNSURLExtras.h"
-#import "WebBaseNetscapePluginView.h"
+#import "WebNetscapePluginView.h"
#import "WebNetscapePluginPackage.h"
#import "WebNullPluginView.h"
#import "WebPanelAuthenticationHandler.h"
@@ -67,14 +67,13 @@
#import "WebPolicyDelegatePrivate.h"
#import "WebPreferences.h"
#import "WebResourceLoadDelegate.h"
-#import "WebResourcePrivate.h"
#import "WebUIDelegate.h"
#import "WebUIDelegatePrivate.h"
#import "WebViewInternal.h"
#import <WebKitSystemInterface.h>
#import <WebCore/AuthenticationMac.h>
#import <WebCore/BlockExceptions.h>
-#import <WebCore/CachedPage.h>
+#import <WebCore/CachedFrame.h>
#import <WebCore/Chrome.h>
#import <WebCore/Document.h>
#import <WebCore/DocumentLoader.h>
@@ -85,6 +84,7 @@
#import <WebCore/FrameLoaderTypes.h>
#import <WebCore/FrameTree.h>
#import <WebCore/FrameView.h>
+#import <WebCore/HTMLHeadElement.h>
#import <WebCore/HTMLFormElement.h>
#import <WebCore/HTMLFrameElement.h>
#import <WebCore/HTMLFrameOwnerElement.h>
@@ -107,12 +107,17 @@
#import <WebCore/Widget.h>
#import <WebKit/DOMElement.h>
#import <WebKit/DOMHTMLFormElement.h>
+#import <runtime/InitializeThreading.h>
#import <wtf/PassRefPtr.h>
#if ENABLE(MAC_JAVA_BRIDGE)
#import "WebJavaPlugIn.h"
#endif
+#if USE(PLUGIN_HOST_PROCESS)
+#import "WebHostedNetscapePluginView.h"
+#endif
+
using namespace WebCore;
using namespace HTMLNames;
@@ -143,6 +148,48 @@ static inline WebDataSource *dataSource(DocumentLoader* loader)
return loader ? static_cast<WebDocumentLoaderMac*>(loader)->dataSource() : nil;
}
+// Quirk for the Apple Dictionary application.
+//
+// If a top level frame has a <script> element in its <head> for a script named MainPageJavaScript.js,
+// then for that frame's document, ignore changes to the scrolling attribute of frames. That script
+// has a bug in it where it sets the scrolling attribute on frames, and that erroneous scrolling
+// attribute needs to be ignored to avoid showing extra scroll bars in the window.
+// This quirk can be removed when Apple Dictionary is fixed (see <rdar://problem/6471058>).
+
+static void applyAppleDictionaryApplicationQuirkNonInlinePart(WebFrameLoaderClient* client, const ResourceRequest& request)
+{
+ if (!request.url().isLocalFile())
+ return;
+ if (!request.url().string().endsWith("MainPageJavaScript.js"))
+ return;
+ Frame* frame = core(client->webFrame());
+ if (!frame)
+ return;
+ if (frame->tree()->parent())
+ return;
+ Document* document = frame->document();
+ if (!document)
+ return;
+ HTMLHeadElement* head = document->head();
+ if (!head)
+ return;
+ for (Node* c = head->firstChild(); c; c = c->nextSibling()) {
+ if (c->hasTagName(scriptTag) && static_cast<Element*>(c)->getAttribute(srcAttr) == "MainPageJavaScript.js") {
+ document->setFrameElementsShouldIgnoreScrolling(true);
+ return;
+ }
+ }
+}
+
+static inline void applyAppleDictionaryApplicationQuirk(WebFrameLoaderClient* client, const ResourceRequest& request)
+{
+ // Use a one-time-initialized global variable so we can quickly determine there's nothing to do in
+ // all applications other than Apple Dictionary.
+ static bool isAppleDictionary = [[[NSBundle mainBundle] bundleIdentifier] isEqualToString:@"com.apple.Dictionary"];
+ if (isAppleDictionary)
+ applyAppleDictionaryApplicationQuirkNonInlinePart(client, request);
+}
+
WebFrameLoaderClient::WebFrameLoaderClient(WebFrame *webFrame)
: m_webFrame(webFrame)
, m_policyFunction(0)
@@ -275,6 +322,8 @@ void WebFrameLoaderClient::setOriginalURLForDownload(WebDownload *download, cons
bool WebFrameLoaderClient::dispatchDidLoadResourceFromMemoryCache(DocumentLoader* loader, const ResourceRequest& request, const ResourceResponse& response, int length)
{
+ applyAppleDictionaryApplicationQuirk(this, request);
+
WebView *webView = getWebView(m_webFrame.get());
WebResourceDelegateImplementationCache* implementations = WebViewGetResourceLoadDelegateImplementations(webView);
if (!implementations->didLoadResourceFromMemoryCacheFunc)
@@ -306,6 +355,8 @@ void WebFrameLoaderClient::assignIdentifierToInitialRequest(unsigned long identi
void WebFrameLoaderClient::dispatchWillSendRequest(DocumentLoader* loader, unsigned long identifier, ResourceRequest& request, const ResourceResponse& redirectResponse)
{
+ applyAppleDictionaryApplicationQuirk(this, request);
+
WebView *webView = getWebView(m_webFrame.get());
WebResourceDelegateImplementationCache* implementations = WebViewGetResourceLoadDelegateImplementations(webView);
@@ -316,6 +367,19 @@ void WebFrameLoaderClient::dispatchWillSendRequest(DocumentLoader* loader, unsig
request = (NSURLRequest *)CallResourceLoadDelegate(implementations->willSendRequestFunc, webView, @selector(webView:resource:willSendRequest:redirectResponse:fromDataSource:), [webView _objectForIdentifier:identifier], request.nsURLRequest(), redirectResponse.nsURLResponse(), dataSource(loader));
}
+bool WebFrameLoaderClient::shouldUseCredentialStorage(DocumentLoader* loader, unsigned long identifier)
+{
+ WebView *webView = getWebView(m_webFrame.get());
+ WebResourceDelegateImplementationCache* implementations = WebViewGetResourceLoadDelegateImplementations(webView);
+
+ if (implementations->shouldUseCredentialStorageFunc) {
+ if (id resource = [webView _objectForIdentifier:identifier])
+ return CallResourceLoadDelegateReturningBoolean(NO, implementations->shouldUseCredentialStorageFunc, webView, @selector(webView:resource:shouldUseCredentialStorageForDataSource:), resource, dataSource(loader));
+ }
+
+ return true;
+}
+
void WebFrameLoaderClient::dispatchDidReceiveAuthenticationChallenge(DocumentLoader* loader, unsigned long identifier, const AuthenticationChallenge& challenge)
{
WebView *webView = getWebView(m_webFrame.get());
@@ -553,6 +617,14 @@ void WebFrameLoaderClient::dispatchDidFirstLayout()
CallFrameLoadDelegate(implementations->didFirstLayoutInFrameFunc, webView, @selector(webView:didFirstLayoutInFrame:), m_webFrame.get());
}
+void WebFrameLoaderClient::dispatchDidFirstVisuallyNonEmptyLayout()
+{
+ WebView *webView = getWebView(m_webFrame.get());
+ WebFrameLoadDelegateImplementationCache* implementations = WebViewGetFrameLoadDelegateImplementations(webView);
+ if (implementations->didFirstVisuallyNonEmptyLayoutInFrameFunc)
+ CallFrameLoadDelegate(implementations->didFirstVisuallyNonEmptyLayoutInFrameFunc, webView, @selector(webView:didFirstVisuallyNonEmptyLayoutInFrame:), m_webFrame.get());
+}
+
Frame* WebFrameLoaderClient::dispatchCreatePage()
{
WebView *currentWebView = getWebView(m_webFrame.get());
@@ -711,13 +783,44 @@ void WebFrameLoaderClient::finishedLoading(DocumentLoader* loader)
[dataSource(loader) _finishedLoading];
}
-void WebFrameLoaderClient::updateGlobalHistory(const KURL& url)
+void WebFrameLoaderClient::updateGlobalHistory()
+{
+ DocumentLoader* loader = core(m_webFrame.get())->loader()->documentLoader();
+
+ if (loader->urlForHistoryReflectsServerRedirect()) {
+ [[WebHistory optionalSharedHistory] _visitedURL:loader->urlForHistory()
+ withTitle:loader->title()
+ method:loader->request().httpMethod()
+ wasFailure:loader->urlForHistoryReflectsFailure()
+ serverRedirectURL:loader->url()
+ isClientRedirect:NO];
+ return;
+ }
+
+ if (loader->urlForHistoryReflectsClientRedirect()) {
+ [[WebHistory optionalSharedHistory] _visitedURL:loader->urlForHistory()
+ withTitle:loader->title()
+ method:loader->request().httpMethod()
+ wasFailure:loader->urlForHistoryReflectsFailure()
+ serverRedirectURL:nil
+ isClientRedirect:YES];
+ return;
+ }
+
+ [[WebHistory optionalSharedHistory] _visitedURL:loader->urlForHistory()
+ withTitle:loader->title()
+ method:loader->request().httpMethod()
+ wasFailure:loader->urlForHistoryReflectsFailure()
+ serverRedirectURL:nil
+ isClientRedirect:NO];
+}
+
+void WebFrameLoaderClient::updateGlobalHistoryForRedirectWithoutHistoryItem()
{
- NSURL *cocoaURL = url;
- const String& pageTitle = core(m_webFrame.get())->loader()->documentLoader()->title();
- [[WebHistory optionalSharedHistory] _addItemForURL:cocoaURL title:pageTitle];
+ DocumentLoader* loader = core(m_webFrame.get())->loader()->documentLoader();
+ [[WebHistory optionalSharedHistory] _visitedURLForRedirectWithoutHistoryItem:loader->url()];
}
-
+
bool WebFrameLoaderClient::shouldGoToHistoryItem(HistoryItem* item) const
{
WebView* view = getWebView(m_webFrame.get());
@@ -800,11 +903,13 @@ String WebFrameLoaderClient::generatedMIMETypeForURLScheme(const String& URLSche
void WebFrameLoaderClient::frameLoadCompleted()
{
// Note: Can be called multiple times.
+
+ // See WebFrameLoaderClient::provisionalLoadStarted.
+ if ([getWebView(m_webFrame.get()) drawsBackground])
+ [[m_webFrame->_private->webFrameView _scrollView] setDrawsBackground:YES];
+
// Even if already complete, we might have set a previous item on a frame that
// didn't do any data loading on the past transaction. Make sure to clear these out.
- NSScrollView *sv = [m_webFrame->_private->webFrameView _scrollView];
- if ([getWebView(m_webFrame.get()) drawsBackground])
- [sv setDrawsBackground:YES];
core(m_webFrame.get())->loader()->setPreviousHistoryItem(0);
}
@@ -846,9 +951,15 @@ void WebFrameLoaderClient::restoreViewState()
void WebFrameLoaderClient::provisionalLoadStarted()
{
- // FIXME: This is OK as long as no one resizes the window,
- // but in the case where someone does, it means garbage outside
- // the occupied part of the scroll view.
+ // Tell the scroll view not to draw a background so we can leave the contents of
+ // the old page showing during the beginning of the loading process.
+
+ // This will stay set to NO until:
+ // 1) The load gets far enough along: WebFrameLoader::frameLoadCompleted.
+ // 2) The window is resized: -[WebFrameView setFrameSize:].
+ // or 3) The view is moved out of the window: -[WebFrameView viewDidMoveToWindow].
+ // Please keep the comments in these four functions in agreement with each other.
+
[[m_webFrame->_private->webFrameView _scrollView] setDrawsBackground:NO];
}
@@ -906,19 +1017,19 @@ void WebFrameLoaderClient::setTitle(const String& title, const KURL& URL)
[[[WebHistory optionalSharedHistory] itemForURL:nsURL] setTitle:titleNSString];
}
-void WebFrameLoaderClient::savePlatformDataToCachedPage(CachedPage* cachedPage)
+void WebFrameLoaderClient::savePlatformDataToCachedFrame(CachedFrame* cachedFrame)
{
- WebCachedPagePlatformData* webPlatformData = new WebCachedPagePlatformData([m_webFrame->_private->webFrameView documentView]);
- cachedPage->setCachedPagePlatformData(webPlatformData);
+ WebCachedFramePlatformData* webPlatformData = new WebCachedFramePlatformData([m_webFrame->_private->webFrameView documentView]);
+ cachedFrame->setCachedFramePlatformData(webPlatformData);
}
-void WebFrameLoaderClient::transitionToCommittedFromCachedPage(CachedPage* cachedPage)
+void WebFrameLoaderClient::transitionToCommittedFromCachedFrame(CachedFrame* cachedFrame)
{
- WebCachedPagePlatformData* platformData = reinterpret_cast<WebCachedPagePlatformData*>(cachedPage->cachedPagePlatformData());
+ WebCachedFramePlatformData* platformData = reinterpret_cast<WebCachedFramePlatformData*>(cachedFrame->cachedFramePlatformData());
NSView <WebDocumentView> *cachedView = platformData->webDocumentView();
ASSERT(cachedView != nil);
- ASSERT(cachedPage->documentLoader());
- [cachedView setDataSource:dataSource(cachedPage->documentLoader())];
+ ASSERT(cachedFrame->documentLoader());
+ [cachedView setDataSource:dataSource(cachedFrame->documentLoader())];
// clean up webkit plugin instances before WebHTMLView gets freed.
WebView *webView = getWebView(m_webFrame.get());
@@ -1279,6 +1390,15 @@ public:
#endif // ENABLE(NETSCAPE_PLUGIN_API)
+static Class netscapePluginViewClass()
+{
+#if USE(PLUGIN_HOST_PROCESS)
+ return [WebHostedNetscapePluginView class];
+#else
+ return [WebNetscapePluginView class];
+#endif
+}
+
Widget* WebFrameLoaderClient::createPlugin(const IntSize& size, Element* element, const KURL& url,
const Vector<String>& paramNames, const Vector<String>& paramValues, const String& mimeType, bool loadManually)
{
@@ -1341,7 +1461,7 @@ Widget* WebFrameLoaderClient::createPlugin(const IntSize& size, Element* element
#if ENABLE(NETSCAPE_PLUGIN_API)
else if ([pluginPackage isKindOfClass:[WebNetscapePluginPackage class]]) {
- WebBaseNetscapePluginView *embeddedView = [[[WebBaseNetscapePluginView alloc]
+ WebBaseNetscapePluginView *pluginView = [[[netscapePluginViewClass() alloc]
initWithFrame:NSMakeRect(0, 0, size.width(), size.height())
pluginPackage:(WebNetscapePluginPackage *)pluginPackage
URL:URL
@@ -1352,7 +1472,7 @@ Widget* WebFrameLoaderClient::createPlugin(const IntSize& size, Element* element
loadManually:loadManually
DOMElement:kit(element)] autorelease];
- return new NetscapePluginWidget(embeddedView);
+ return new NetscapePluginWidget(pluginView);
}
#endif
} else
@@ -1390,8 +1510,8 @@ void WebFrameLoaderClient::redirectDataToPlugin(Widget* pluginWidget)
NSView *pluginView = pluginWidget->platformWidget();
#if ENABLE(NETSCAPE_PLUGIN_API)
- if ([pluginView isKindOfClass:[WebBaseNetscapePluginView class]])
- [representation _redirectDataToManualLoader:(WebBaseNetscapePluginView *)pluginView forPluginView:pluginView];
+ if ([pluginView isKindOfClass:[WebNetscapePluginView class]])
+ [representation _redirectDataToManualLoader:(WebNetscapePluginView *)pluginView forPluginView:pluginView];
else {
#else
{
@@ -1434,7 +1554,7 @@ Widget* WebFrameLoaderClient::createJavaAppletWidget(const IntSize& size, Elemen
}
#if ENABLE(NETSCAPE_PLUGIN_API)
else if ([pluginPackage isKindOfClass:[WebNetscapePluginPackage class]]) {
- view = [[[WebBaseNetscapePluginView alloc] initWithFrame:NSMakeRect(0, 0, size.width(), size.height())
+ view = [[[netscapePluginViewClass() alloc] initWithFrame:NSMakeRect(0, 0, size.width(), size.height())
pluginPackage:(WebNetscapePluginPackage *)pluginPackage
URL:nil
baseURL:baseURL
@@ -1525,12 +1645,13 @@ jobject WebFrameLoaderClient::javaApplet(NSView* view)
@implementation WebFramePolicyListener
-#ifndef BUILDING_ON_TIGER
+ (void)initialize
{
+ JSC::initializeThreading();
+#ifndef BUILDING_ON_TIGER
WebCoreObjCFinalizeOnMainThread(self);
-}
#endif
+}
- (id)initWithWebCoreFrame:(Frame*)frame
{
diff --git a/WebKit/mac/WebCoreSupport/WebIconDatabaseClient.mm b/WebKit/mac/WebCoreSupport/WebIconDatabaseClient.mm
index 43202b0..dc9ae6d 100644
--- a/WebKit/mac/WebCoreSupport/WebIconDatabaseClient.mm
+++ b/WebKit/mac/WebCoreSupport/WebIconDatabaseClient.mm
@@ -30,7 +30,6 @@
#import "WebIconDatabaseInternal.h"
-#import <WebCore/FoundationExtras.h>
#import <WebCore/PlatformString.h>
diff --git a/WebKit/mac/WebCoreSupport/WebPasteboardHelper.mm b/WebKit/mac/WebCoreSupport/WebPasteboardHelper.mm
index 2da6654..274045f 100644
--- a/WebKit/mac/WebCoreSupport/WebPasteboardHelper.mm
+++ b/WebKit/mac/WebCoreSupport/WebPasteboardHelper.mm
@@ -33,6 +33,7 @@
#import <WebCore/DOMDocumentFragment.h>
#import <WebCore/PlatformString.h>
#import <wtf/RetainPtr.h>
+#import <wtf/StdLibExtras.h>
using namespace WebCore;
@@ -90,10 +91,12 @@ DOMDocumentFragment *WebPasteboardHelper::fragmentFromPasteboard(const NSPastebo
}
NSArray *WebPasteboardHelper::insertablePasteboardTypes() const
-{
- static RetainPtr<NSArray> types = [[NSArray alloc] initWithObjects:WebArchivePboardType, NSHTMLPboardType,
- NSFilenamesPboardType, NSTIFFPboardType, NSPICTPboardType, NSURLPboardType,
- NSRTFDPboardType, NSRTFPboardType, NSStringPboardType, NSColorPboardType, nil];
-
+{
+ DEFINE_STATIC_LOCAL(RetainPtr<NSArray>, types, ([[NSArray alloc] initWithObjects:WebArchivePboardType, NSHTMLPboardType, NSFilenamesPboardType, NSTIFFPboardType,
+#if defined(BUILDING_ON_TIGER) || defined(BUILDING_ON_LEOPARD)
+ NSPICTPboardType,
+#endif
+ NSURLPboardType, NSRTFDPboardType, NSRTFPboardType, NSStringPboardType, NSColorPboardType, nil]));
+
return types.get();
}
diff --git a/WebKit/mac/WebCoreSupport/WebSystemInterface.m b/WebKit/mac/WebCoreSupport/WebSystemInterface.m
index 417f668..52f5583 100644
--- a/WebKit/mac/WebCoreSupport/WebSystemInterface.m
+++ b/WebKit/mac/WebCoreSupport/WebSystemInterface.m
@@ -47,15 +47,8 @@ void InitWebCoreSystemInterface(void)
INIT(DrawBezeledTextArea);
INIT(DrawBezeledTextFieldCell);
INIT(DrawFocusRing);
- INIT(DrawMediaFullscreenButton);
- INIT(DrawMediaMuteButton);
- INIT(DrawMediaPauseButton);
- INIT(DrawMediaPlayButton);
- INIT(DrawMediaSeekBackButton);
- INIT(DrawMediaSeekForwardButton);
+ INIT(DrawMediaUIPart);
INIT(DrawMediaSliderTrack);
- INIT(DrawMediaSliderThumb);
- INIT(DrawMediaUnMuteButton);
INIT(DrawTextFieldCellFocusRing);
INIT(GetExtensionsForMIMEType);
INIT(GetFontInLanguageForCharacter);
@@ -65,6 +58,8 @@ void InitWebCoreSystemInterface(void)
INIT(GetNSURLResponseLastModifiedDate);
INIT(GetPreferredExtensionForMIMEType);
INIT(GetWheelEventDeltas);
+ INIT(HitTestMediaUIPart);
+ INIT(MeasureMediaUIPart);
INIT(PopupMenu);
INIT(SetCGFontRenderingMode);
INIT(SetDragImage);
diff --git a/WebKit/mac/WebCoreSupport/WebViewFactory.mm b/WebKit/mac/WebCoreSupport/WebViewFactory.mm
index e9cd746..9ccdfff 100644
--- a/WebKit/mac/WebCoreSupport/WebViewFactory.mm
+++ b/WebKit/mac/WebCoreSupport/WebViewFactory.mm
@@ -344,6 +344,11 @@
return UI_STRING("Writing Direction", "Writing direction context sub-menu item");
}
+- (NSString *)contextMenuItemTagTextDirectionMenu
+{
+ return UI_STRING("Text Direction", "Text direction context sub-menu item");
+}
+
- (NSString *)contextMenuItemTagDefaultDirection
{
return UI_STRING("Default", "Default writing direction context menu item");
@@ -417,6 +422,18 @@
return WKCreateAXUIElementRef(element);
}
+- (CGRect)accessibilityConvertScreenRect:(CGRect)bounds
+{
+ NSArray *screens = [NSScreen screens];
+ if ([screens count]) {
+ CGFloat screenHeight = NSHeight([[screens objectAtIndex:0] frame]);
+ bounds.origin.y = (screenHeight - (bounds.origin.y + bounds.size.height));
+ } else
+ bounds = CGRectZero;
+
+ return bounds;
+}
+
- (void)unregisterUniqueIdForUIElement:(id)element
{
WKUnregisterUniqueIdForElement(element);
diff --git a/WebKit/mac/WebKit.exp b/WebKit/mac/WebKit.exp
index c284ffa..d166894 100644
--- a/WebKit/mac/WebKit.exp
+++ b/WebKit/mac/WebKit.exp
@@ -28,6 +28,7 @@
.objc_class_name_WebScriptCallFrame
.objc_class_name_WebSecurityOrigin
.objc_class_name_WebStringTruncator
+.objc_class_name_WebTextIterator
.objc_class_name_WebURLsWithTitles
.objc_class_name_WebView
_HIWebViewCreate
diff --git a/WebKit/mac/WebKit.order b/WebKit/mac/WebKit.order
index 6bb0178..b39330e 100644
--- a/WebKit/mac/WebKit.order
+++ b/WebKit/mac/WebKit.order
@@ -1,7 +1,8 @@
+[WebPreferences initialize]
-_contains
-_WebKitLinkedOnOrAfter
-_WebKitLinkTimeVersion
+__ZL23cacheModelForMainBundlev
+__ZL8containsPKPKciS0_
+WebKitLinkedOnOrAfter
+WebKitLinkTimeVersion
+[WebPreferences standardPreferences]
-[WebPreferences initWithIdentifier:]
+[WebPreferences(WebInternal) _IBCreatorID]
@@ -10,10 +11,12 @@ _WebKitLinkTimeVersion
-[WebPreferences(WebPrivate) _postPreferencesChangesNotification]
-[WebPreferences setAutosaves:]
+[WebIconDatabase delayDatabaseCleanup]
++[NSString(WebKitExtras) _webkit_localCacheDirectoryWithBundleIdentifier:]
-[NSString(WebKitExtras) _web_stringByAbbreviatingWithTildeInPath]
+[WebIconDatabase sharedIconDatabase]
-[WebIconDatabase init]
-__Z13defaultClientv
+-[WebIconDatabase(WebInternal) _startUpIconDatabase]
+__ZL13defaultClientv
-[WebIconDatabase(WebInternal) _databaseDirectory]
-[WebPreferences privateBrowsingEnabled]
-[WebPreferences _boolValueForKey:]
@@ -29,49 +32,82 @@ __Z13defaultClientv
+[WebHTMLView(WebPrivate) _selectionPasteboardTypes]
+[WebHTMLView(WebPrivate) supportedNonImageMIMETypes]
+[WebHTMLRepresentation supportedNonImageMIMETypes]
-__Z11stringArrayRKN3WTF7HashSetIN7WebCore6StringENS1_10StringHashENS_10HashTraitsIS2_EEEE
+__ZN21WebIconDatabaseClient13performImportEv
+__Z21importToWebCoreFormatv
++[ThreadEnabler enableThreading]
+__ZL20objectFromPathForKeyP8NSStringP11objc_object
+-[ThreadEnabler threadEnablingSelector:]
+__ZL11stringArrayRKN3WTF7HashSetIN7WebCore6StringENS1_10StringHashENS_10HashTraitsIS2_EEEE
+[WebPDFView supportedMIMETypes]
+[WebPDFRepresentation supportedMIMETypes]
+[WebPDFRepresentation postScriptMIMETypes]
+[WebDataSource(WebInternal) _repTypesAllowImageTypeOmission:]
-+[WebView registerURLSchemeAsLocal:]
+WebLocalizedString
+-[NSURL(WebNSURLExtras) _web_originalDataAsString]
+-[NSURL(WebNSURLExtras) _web_originalData]
-[WebIconDatabase retainIconForURL:]
--[WebIconDatabase(WebInternal) _isEnabled]
-_WebLocalizedString
--[WebView initWithFrame:frameName:groupName:]
+-[WebIconDatabase(WebPendingPublic) isEnabled]
++[NSURL(WebNSURLExtras) _web_URLWithDataAsString:]
++[NSURL(WebNSURLExtras) _web_URLWithDataAsString:relativeToURL:]
+-[NSString(WebKitExtras) _webkit_stringByTrimmingWhitespace]
++[NSURL(WebNSURLExtras) _web_URLWithData:relativeToURL:]
+-[WebHistory init]
++[WebHistoryPrivate initialize]
+-[WebHistoryPrivate init]
+-[WebHistory setHistoryAgeInDaysLimit:]
+-[WebHistoryPrivate setHistoryAgeInDaysLimit:]
+-[WebHistory setHistoryItemLimit:]
+-[WebHistoryPrivate setHistoryItemLimit:]
+-[WebHistory loadFromURL:error:]
+-[WebHistoryPrivate loadFromURL:collectDiscardedItemsInto:error:]
+-[WebHistoryPrivate loadHistoryGutsFromURL:savedItemsCount:collectDiscardedItemsInto:error:]
++[WebHistory setOptionalSharedHistory:]
+-[WebHistory(WebPrivate) _itemForURLString:]
+-[WebHistoryPrivate itemForURLString:]
++[WebView registerURLSchemeAsLocal:]
+-[NSURL(WebNSURLExtras) _webkit_canonicalize]
+WKNSURLProtocolClassForRequest
+-[NSString(WebKitExtras) _webkit_isCaseInsensitiveEqualToString:]
+-[WebView(WebPrivate) _initWithFrame:frameName:groupName:usesDocumentViews:]
+[WebViewPrivate initialize]
+-[WebViewPrivate .cxx_construct]
-[WebViewPrivate init]
--[WebView _commonInitializationWithFrameName:groupName:]
+-[WebView(WebPrivate) _commonInitializationWithFrameName:groupName:usesDocumentViews:]
-[WebPreferences(WebPrivate) willAddToWebView]
-[WebFrameView initWithFrame:]
-_InitWebCoreSystemInterface
+InitWebCoreSystemInterface
+[WebViewFactory createSharedFactory]
+[WebKeyGenerator createSharedGenerator]
-_WKDisableCGDeferredUpdates
--[WebFrameViewPrivate init]
+WKDisableCGDeferredUpdates
-[WebClipView initWithFrame:]
-_WebKitInitializeLoggingChannelsIfNecessary
-_initializeLogChannel
+-[WebFrameView visibleRect]
+-[WebFrameView webFrame]
+WebKitInitializeLoggingChannelsIfNecessary
+initializeLogChannel
+[WebHistoryItem initialize]
+[WebHistoryItem(WebInternal) initWindowWatcherIfNecessary]
__Z36WebKitInitializeDatabasesIfNecessaryv
__ZN24WebDatabaseTrackerClient30sharedWebDatabaseTrackerClientEv
-__ZN24WebDatabaseTrackerClientC1Ev
-__ZN15WebChromeClientC2EP7WebView
-__ZN20WebContextMenuClientC2EP7WebView
-__ZN15WebEditorClientC2EP7WebView
-__ZN13WebDragClientC2EP7WebView
-__ZN18WebInspectorClientC2EP7WebView
-+[WebFrameBridge initialize]
--[WebFrameBridge initMainFrameWithPage:frameName:frameView:]
--[WebFrameBridge finishInitializingWithPage:frameName:frameView:ownerElement:]
+__ZN24WebDatabaseTrackerClientC2Ev
+__ZL47WebKitInitializeApplicationCachePathIfNecessaryv
+WKAppVersionCheckLessThan
+__ZN15WebChromeClientC1EP7WebView
+__ZN20WebContextMenuClientC1EP7WebView
+__ZN15WebEditorClientC1EP7WebView
+__ZN13WebDragClientC1EP7WebView
+__ZN18WebInspectorClientC1EP7WebView
+-[WebView preferences]
+-[WebPreferences(WebPrivate) _localStorageDatabasePath]
+-[WebPreferences _stringValueForKey:]
++[WebFrame(WebInternal) _createMainFrameWithPage:frameName:frameView:]
++[WebFrame(WebInternal) _createFrameWithPage:frameName:frameView:ownerElement:]
__Z3kitPN7WebCore4PageE
--[WebFrame(WebInternal) _initWithWebFrameView:webView:bridge:]
+-[WebFrame(WebInternal) _initWithWebFrameView:webView:]
-[WebFramePrivate setWebFrameView:]
-[WebFrameView(WebInternal) _setWebFrame:]
-__ZN20WebFrameLoaderClientC2EP8WebFrame
+__ZN20WebFrameLoaderClientC1EP8WebFrame
__ZN20WebFrameLoaderClient20createDocumentLoaderERKN7WebCore15ResourceRequestERKNS0_14SubstituteDataE
-__ZN20WebDocumentLoaderMacC2ERKN7WebCore15ResourceRequestERKNS0_14SubstituteDataE
+__ZN20WebDocumentLoaderMacC1ERKN7WebCore15ResourceRequestERKNS0_14SubstituteDataE
-[WebDataSource(WebInternal) _initWithDocumentLoader:]
+[WebDataSourcePrivate initialize]
__Z10getWebViewP8WebFrame
@@ -88,16 +124,16 @@ __ZN20WebFrameLoaderClient25setMainFrameDocumentReadyEb
__ZN20WebFrameLoaderClient17setCopiesOnScrollEv
__ZN20WebFrameLoaderClient31prepareForDataSourceReplacementEv
-[WebFrame(WebInternal) _dataSource]
--[WebFrame(WebInternal) _frameLoader]
__ZN20WebFrameLoaderClient31transitionToCommittedForNewPageEv
__ZNK20WebDocumentLoaderMac10dataSourceEv
-[WebDataSource(WebPrivate) _responseMIMEType]
-[WebDataSource response]
--[WebDataSource(WebFileInternal) _MIMETypeOfResponse:]
+[WebFrameView(WebInternal) _viewClassForMIMEType:]
+[WebView(WebPrivate) _viewClass:andRepresentationClass:forMIMEType:]
-[NSDictionary(WebNSDictionaryExtras) _webkit_objectForMIMEType:]
+[WebHTMLView(WebPrivate) unsupportedTextMIMETypes]
+-[WebView removePluginInstanceViewsFor:]
+-[WebView(WebPrivate) _usesDocumentViews]
-[WebFrameView(WebInternal) _makeDocumentViewForDataSource:]
-[WebDataSource representation]
-[WebHTMLView initWithFrame:]
@@ -108,31 +144,26 @@ __ZNK20WebDocumentLoaderMac10dataSourceEv
-[WebFrame webView]
__Z4coreP7WebView
-[WebView(WebPrivate) page]
--[WebDynamicScrollBarsView setSuppressLayout:]
+-[WebDynamicScrollBarsView(WebInternal) setSuppressLayout:]
-[WebHTMLView viewWillMoveToSuperview:]
-[WebHTMLView removeSuperviewObservers]
-[WebHTMLView setNeedsDisplay:]
-[WebHTMLView visibleRect]
-[WebClipView hasAdditionalClip]
+-[WebFrame(WebInternal) _getVisibleRect:]
-[WebHTMLView viewDidMoveToSuperview]
--[WebHTMLView(WebHTMLViewFileInternal) _updateTextSizeMultiplier]
--[WebHTMLView(WebHTMLViewFileInternal) _bridge]
--[WebHTMLView(WebHTMLViewFileInternal) _webView]
-[WebHTMLView addSuperviewObservers]
-[WebHTMLView isFlipped]
--[WebDynamicScrollBarsView reflectScrolledClipView:]
--[WebHTMLView respondsToSelector:]
--[WebFrameView(WebInternal) _marginHeight]
--[WebFrameView(WebInternal) _marginWidth]
--[WebFrame(WebInternal) _updateBackground]
+-[WebDynamicScrollBarsView(WebInternal) reflectScrolledClipView:]
+-[WebFrame(WebInternal) _updateBackgroundAndUpdatesWhileOffscreen]
-[WebView drawsBackground]
-[WebView(WebPrivate) backgroundColor]
--[WebFrameBridge webFrame]
+__Z3kitPN7WebCore5FrameE
-[WebFrame frameView]
-[WebFrameView documentView]
--[WebDynamicScrollBarsView horizontalScrollingMode]
--[WebDynamicScrollBarsView setScrollingMode:]
--[WebDynamicScrollBarsView setScrollingMode:andLock:]
+-[WebView shouldUpdateWhileOffscreen]
+-[WebFrameView(WebInternal) _install]
+-[WebDynamicScrollBarsView(WebInternal) scrollingModes:vertical:]
-[WebHTMLView setDataSource:]
-[WebPluginController setDataSource:]
-[WebHTMLView addMouseMovedObserver]
@@ -141,12 +172,12 @@ __Z4coreP7WebView
-[WebDataSource(WebInternal) _webView]
-[WebDataSource webFrame]
-[WebView mainFrame]
-__Z3kitPN7WebCore5FrameE
+-[WebHTMLView(WebHTMLViewFileInternal) _webView]
-[WebView(WebPrivate) _dashboardBehavior:]
__ZN15WebEditorClient23clearUndoRedoOperationsEv
__ZN15WebChromeClient16setStatusbarTextERKN7WebCore6StringE
__Z14CallUIDelegateP7WebViewP13objc_selectorP11objc_object
-__Z12CallDelegateP7WebViewP11objc_objectP13objc_selectorS2_
+__ZL12CallDelegateP7WebViewP11objc_objectP13objc_selectorS2_
__ZN20WebFrameLoaderClient15finishedLoadingEPN7WebCore14DocumentLoaderE
-[WebDataSource(WebInternal) _finishedLoading]
__ZN20WebFrameLoaderClient18frameLoadCompletedEv
@@ -156,26 +187,27 @@ __ZN20WebFrameLoaderClient21forceLayoutForNonHTMLEv
+[WebFrameView(WebInternal) _canShowMIMETypeAsHTML:]
__ZNK20WebFrameLoaderClient17overrideMediaTypeEv
-[WebView mediaStyle]
--[WebView textSizeMultiplier]
+__ZNK15WebChromeClient19contentsSizeChangedEPN7WebCore5FrameERKNS0_7IntSizeE
+-[WebView _realZoomMultiplierIsTextOnly]
+-[WebView _realZoomMultiplier]
+-[WebView _setZoomMultiplier:isTextOnly:]
+-[WebView(WebPendingPublic) scheduleInRunLoop:forMode:]
-[WebView(AllWebViews) _addToAllWebViewsSet]
-[WebView setGroupName:]
--[WebView _registerDraggedTypes]
+-[WebView(WebPrivate) _registerDraggedTypes]
+[NSPasteboard(WebExtras) _web_dragTypesForURL]
-+[WebView(WebPrivate) _scriptDebuggerEnabled]
--[WebView preferences]
-[WebIconDatabase(WebInternal) _resetCachedWebPreferences:]
+[WebView(WebFileInternal) _preferencesChangedNotification:]
-[WebPreferences cacheModel]
+[WebView(WebFileInternal) _didSetCacheModel]
+[WebView(WebFileInternal) _setCacheModel:]
-_WKCopyFoundationCacheDirectory
-_WebMemorySize
-_initCapabilities
-_WebVolumeFreeSize
+WKCopyFoundationCacheDirectory
+WebMemorySize
+initCapabilities
+WebVolumeFreeSize
-[WebView(WebPrivate) _preferencesChangedNotification:]
-[WebPreferences(WebPrivate) _useSiteSpecificSpoofing]
-[WebPreferences cursiveFontFamily]
--[WebPreferences _stringValueForKey:]
-[WebPreferences defaultFixedFontSize]
-[WebPreferences defaultFontSize]
-[WebPreferences defaultTextEncodingName]
@@ -189,6 +221,8 @@ _WebVolumeFreeSize
-[WebPreferences minimumFontSize]
-[WebPreferences minimumLogicalFontSize]
-[WebPreferences arePlugInsEnabled]
+-[WebPreferences(WebPrivate) databasesEnabled]
+-[WebPreferences(WebPrivate) localStorageEnabled]
-[WebPreferences sansSerifFontFamily]
-[WebPreferences serifFontFamily]
-[WebPreferences standardFontFamily]
@@ -198,26 +232,32 @@ _WebVolumeFreeSize
-[WebPreferences(WebPrivate) shrinksStandaloneImagesToFit]
-[WebPreferences(WebPrivate) editableLinkBehavior]
__Z4core26WebKitEditableLinkBehavior
+-[WebPreferences(WebPrivate) textDirectionSubmenuInclusionBehavior]
+__Z4core40WebTextDirectionSubmenuInclusionBehavior
-[WebPreferences(WebPrivate) isDOMPasteAllowed]
-[WebView(WebPrivate) usesPageCache]
-[WebPreferences usesPageCache]
-[WebPreferences(WebPrivate) showsURLsInToolTips]
-[WebPreferences(WebPrivate) developerExtrasEnabled]
-[WebPreferences(WebPrivate) authorAndUserStylesEnabled]
+-[WebPreferences(WebPrivate) applicationChromeModeEnabled]
-[WebPreferences userStyleSheetEnabled]
-[WebView(WebPrivate) _needsAdobeFrameReloadingQuirk]
-_WKAppVersionCheckLessThan
-[WebView(WebPrivate) _needsKeyboardEventDisambiguationQuirks]
+-[WebPreferences(WebPrivate) webArchiveDebugModeEnabled]
+-[WebPreferences(WebPrivate) offlineWebApplicationCacheEnabled]
+-[WebPreferences(WebPrivate) zoomsTextOnly]
-[WebView setMaintainsBackForwardList:]
-[WebView setUIDelegate:]
+-[WebView(WebPrivate) setMemoryCacheDelegateCallsEnabled:]
-[WebView backForwardList]
__Z3kitPN7WebCore15BackForwardListE
-__Z16backForwardListsv
+__ZL16backForwardListsv
+__ZN3WTF7HashMapIPN7WebCore15BackForwardListEP18WebBackForwardListNS_7PtrHashIS3_EENS_10HashTraitsIS3_EENS8_IS5_EEE3setERKS3_RKS5_
+[WebBackForwardList initialize]
-[WebBackForwardList(WebBackForwardListInternal) initWithBackForwardList:]
__Z4coreP18WebBackForwardList
-__ZNK3WTF7HashMapIPN7WebCore15BackForwardListEP18WebBackForwardListNS_7PtrHashIS3_EENS_10HashTraitsIS3_EENS8_IS5_EEE3getERKS3_
-__ZN3WTF9HashTableIiSt4pairIiiENS_18PairFirstExtractorIS2_EENS_7IntHashIiEENS_14PairHashTraitsINS_10HashTraitsIiEES9_EES9_E47removeAndInvalidateWithoutEntryConsistencyCheckEPS2_
+__ZN3WTF9HashTableIPN7WebCore15BackForwardListESt4pairIS3_P18WebBackForwardListENS_18PairFirstExtractorIS7_EENS_7PtrHashIS3_EENS_14PairHashTraitsINS_10HashTraitsIS3_EENSD_IS6_EEEESE_E6expandEv
-[WebBackForwardList setCapacity:]
-[WebView setFrameLoadDelegate:]
-[WebView(WebPrivate) _cacheFrameLoadDelegateImplementations]
@@ -230,30 +270,22 @@ __ZN3WTF9HashTableIiSt4pairIiiENS_18PairFirstExtractorIS2_EENS_7IntHashIiEENS_14
-[WebView setApplicationNameForUserAgent:]
-[WebView setHostWindow:]
-[WebView(WebPrivate) _setFormDelegate:]
-+[WebStringTruncator initialize]
-+[WebStringTruncator centerTruncateString:toWidth:withFont:]
-__Z14fontFromNSFontP6NSFont
-_WKGetCGFontFromNSFont
-_WKGetNSFontATSUFontId
-_WKGetATSStyleGroup
-_WKGetFontMetrics
-_WKInitializeGlyphVector
-_WKConvertCharToGlyphs
-_WKGetGlyphVectorNumGlyphs
-_WKGetGlyphVectorFirstRecord
-_WKGetGlyphVectorRecordSize
-_WKClearGlyphVector
-_WKGetGlyphTransformedAdvances
+-[WebView setShouldUpdateWhileOffscreen:]
-[WebIconDatabase defaultIconWithSize:]
+-[WebView viewWillMoveToSuperview:]
+-[WebView removeSizeObservers]
+-[WebView viewDidMoveToSuperview]
+-[WebView addSizeObservers]
-[WebFrameView setFrameSize:]
--[WebFrameView webFrame]
+-[WebView(WebPrivate) isFlipped]
-[WebFrame provisionalDataSource]
-[WebFrame dataSource]
-[WebView viewWillMoveToWindow:]
-_WKSetNSWindowShouldPostEventNotifications
+WKSetNSWindowShouldPostEventNotifications
+-[WebView removeWindowObservers]
-[WebHTMLView viewWillMoveToWindow:]
-[WebHTMLView removeMouseMovedObserverUnconditionally]
-_WKMouseMovedNotification
+WKMouseMovedNotification
-[WebHTMLView removeWindowObservers]
-[WebHTMLView(WebHTMLViewFileInternal) _cancelUpdateMouseoverTimer]
-[WebHTMLView(WebHTMLViewFileInternal) _cancelUpdateFocusedAndActiveStateTimer]
@@ -262,59 +294,57 @@ _WKMouseMovedNotification
-[WebHTMLView viewDidMoveToWindow]
-[WebHTMLView(WebPrivate) _stopAutoscrollTimer]
-[WebHTMLView addWindowObservers]
+WKWindowWillOrderOnScreenNotification
-[WebHTMLView(WebPrivate) _frameOrBoundsChanged]
-[WebHTMLView setNeedsLayout:]
-[WebPluginController startAllPlugins]
+-[WebFrameView viewDidMoveToWindow]
+-[WebView viewDidMoveToWindow]
+-[WebView addWindowObservers]
+-[NSString(WebKitExtras) _web_widthWithFont:]
+canUseFastRenderer
+WKGetGlyphsForCharacters
+WKGetGlyphTransformedAdvances
-[WebIconDatabase iconForURL:withSize:]
-[WebIconDatabase iconForURL:withSize:cache:]
-[NSString(WebNSURLExtras) _webkit_isFileURL]
--[WebIconDatabase defaultIconForURL:withSize:]
+__Z13webGetNSImagePN7WebCore5ImageE7_NSSize
++[WebStringTruncator initialize]
++[WebStringTruncator centerTruncateString:toWidth:withFont:]
+__ZL14fontFromNSFontP6NSFont
-[WebView setNextKeyView:]
-[WebFrameView setNextKeyView:]
--[NSString(WebKitExtras) _webkit_hasCaseInsensitivePrefix:]
-+[NSURL(WebNSURLExtras) _web_URLWithUserTypedString:]
-+[NSURL(WebNSURLExtras) _web_URLWithUserTypedString:relativeToURL:]
--[NSString(WebKitExtras) _webkit_stringByTrimmingWhitespace]
-__Z12mapHostNamesP8NSStringa
-+[NSURL(WebNSURLExtras) _web_URLWithData:relativeToURL:]
--[NSURL(WebNSURLExtras) _webkit_canonicalize]
-_WKNSURLProtocolClassForRequest
--[NSURL(WebNSURLExtras) _web_originalDataAsString]
-+[NSURL(WebNSURLExtras) _web_URLWithDataAsString:]
-+[NSURL(WebNSURLExtras) _web_URLWithDataAsString:relativeToURL:]
-[NSView(WebExtras) _web_superviewOfClass:]
-[WebFrame loadRequest:]
__ZN20WebFrameLoaderClient9userAgentERKN7WebCore4KURLE
-[WebView(WebViewInternal) _userAgentForURL:]
--[WebView(WebViewInternal) _userAgentWithApplicationName:andWebKitVersion:]
++[WebView(WebPrivate) _standardUserAgentWithApplicationName:]
+[NSUserDefaults(WebNSUserDefaultsExtras) _webkit_preferredLanguageCode]
+[NSUserDefaults(WebNSUserDefaultsExtras) _webkit_ensureAndLockPreferredLanguageLock]
-_makeLock
+makeLock
-[NSString(WebNSUserDefaultsPrivate) _webkit_HTTPStyleLanguageCode]
-_WKCopyCFLocalizationPreferredName
+WKCopyCFLocalizationPreferredName
+[NSUserDefaults(WebNSUserDefaultsExtras) _webkit_addDefaultsChangeObserver]
-_addDefaultsChangeObserver
+addDefaultsChangeObserver
__ZN20WebFrameLoaderClient17cancelPolicyCheckEv
-__ZN20WebFrameLoaderClient39dispatchDecidePolicyForNavigationActionEMN7WebCore11FrameLoaderEFvNS0_12PolicyActionEERKNS0_16NavigationActionERKNS0_15ResourceRequestE
+__ZN20WebFrameLoaderClient39dispatchDecidePolicyForNavigationActionEMN7WebCore11FrameLoaderEFvNS0_12PolicyActionEERKNS0_16NavigationActionERKNS0_15ResourceRequestEN3WTF10PassRefPtrINS0_9FormStateEEE
-[WebView(WebPrivate) _policyDelegateForwarder]
+[WebDefaultPolicyDelegate sharedPolicyDelegate]
-[_WebSafeForwarder initWithTarget:defaultTarget:catchExceptions:]
__ZN20WebFrameLoaderClient19setUpPolicyListenerEMN7WebCore11FrameLoaderEFvNS0_12PolicyActionEE
+[WebFramePolicyListener initialize]
-[WebFramePolicyListener initWithWebCoreFrame:]
-_WKSupportsMultipartXMixedReplace
-__ZNK20WebFrameLoaderClient16actionDictionaryERKN7WebCore16NavigationActionE
+__ZNK20WebFrameLoaderClient16actionDictionaryERKN7WebCore16NavigationActionEN3WTF10PassRefPtrINS0_9FormStateEEE
-[_WebSafeForwarder methodSignatureForSelector:]
-[_WebSafeForwarder forwardInvocation:]
+[WebView(WebPrivate) _canHandleRequest:]
++[WebView(WebPrivate) _canHandleRequest:forMainFrame:]
-[WebFramePolicyListener use]
-[WebFramePolicyListener receivedPolicyDecision:]
__ZN20WebFrameLoaderClient21receivedPolicyDecisonEN7WebCore12PolicyActionE
__ZNK20WebFrameLoaderClient16canHandleRequestERKN7WebCore15ResourceRequestE
__ZN15WebChromeClient30canRunBeforeUnloadConfirmPanelEv
-[WebView UIDelegate]
-__ZN20WebFrameLoaderClient22clearArchivedResourcesEv
-__ZN3WTF9HashTableIiSt4pairIiNS_9RetainPtrI11WebResourceEEENS_18PairFirstExtractorIS5_EENS_7IntHashIiEENS_14PairHashTraitsINS_10HashTraitsIiEENSB_IS4_EEEESC_E47removeAndInvalidateWithoutEntryConsistencyCheckEPS5_
__ZN20WebFrameLoaderClient27willChangeEstimatedProgressEv
-[WebView(WebPrivate) _willChangeValueForKey:]
-[WebView(WebPrivate) observationInfo]
@@ -326,7 +356,7 @@ __ZN20WebFrameLoaderClient31dispatchDidStartProvisionalLoadEv
-[WebView(WebPrivate) _willChangeBackForwardKeys]
__Z42WebViewGetFrameLoadDelegateImplementationsP7WebView
__Z21CallFrameLoadDelegatePFP11objc_objectS0_P13objc_selectorzEP7WebViewS2_S0_
-__Z12CallDelegatePFP11objc_objectS0_P13objc_selectorzEP7WebViewS0_S2_S0_
+__ZL12CallDelegatePFP11objc_objectS0_P13objc_selectorzEP7WebViewS0_S2_S0_
-[WebDataSource isLoading]
-[WebDataSource request]
-[NSURL(WebNSURLExtras) _web_hostString]
@@ -337,84 +367,145 @@ __Z12CallDelegatePFP11objc_objectS0_P13objc_selectorzEP7WebViewS0_S2_S0_
-[NSString(WebNSURLExtras) _web_decodeHostName]
-[NSString(WebNSURLExtras) _web_mapHostNameWithRange:encode:makeString:]
-[WebDataSource unreachableURL]
--[NSString(WebKitExtras) _webkit_isCaseInsensitiveEqualToString:]
+-[WebView mainFrameURL]
+-[WebBackForwardList currentItem]
+__Z3kitPN7WebCore11HistoryItemE
__ZN20WebFrameLoaderClient32assignIdentifierToInitialRequestEmPN7WebCore14DocumentLoaderERKNS0_15ResourceRequestE
__Z45WebViewGetResourceLoadDelegateImplementationsP7WebView
+__ZL12CallDelegatePFP11objc_objectS0_P13objc_selectorzEP7WebViewS0_S2_S0_S0_
-[WebView(WebViewInternal) _addObject:forIdentifier:]
-__ZN3WTF9HashTableImSt4pairImNS_9RetainPtrIP11objc_objectEEENS_18PairFirstExtractorIS6_EENS_7IntHashImEENS_14PairHashTraitsINS_10HashTraitsImEENSC_IS5_EEEESD_E3addImS5_NS_17HashMapTranslatorILb1ES6_NS_18PairBaseHashTraitsISD_SE_EESF_SA_EEEES1_INS_17HashTableIteratorImS6_S8_SA_SF_SD_EEbERKT_RKT0_
-__ZN3WTF9HashTableImSt4pairImNS_9RetainPtrIP11objc_objectEEENS_18PairFirstExtractorIS6_EENS_7IntHashImEENS_14PairHashTraitsINS_10HashTraitsImEENSC_IS5_EEEESD_E47removeAndInvalidateWithoutEntryConsistencyCheckEPS6_
+__ZNK3WTF7HashMapImNS_9RetainPtrIP11objc_objectEENS_7IntHashImEENS_10HashTraitsImEENS7_IS4_EEE3getERKm
__ZN20WebFrameLoaderClient23dispatchWillSendRequestEPN7WebCore14DocumentLoaderEmRNS0_15ResourceRequestERKNS0_16ResourceResponseE
__ZN20WebDocumentLoaderMac17increaseLoadCountEm
__ZNK3WTF9HashTableImmNS_17IdentityExtractorImEENS_7IntHashImEENS_10HashTraitsImEES6_E8containsImNS_22IdentityHashTranslatorImmS4_EEEEbRKT_
__ZN3WTF7HashSetImNS_7IntHashImEENS_10HashTraitsImEEE3addERKm
-__ZN3WTF9HashTableImmNS_17IdentityExtractorImEENS_7IntHashImEENS_10HashTraitsImEES6_E3addImmNS_17HashSetTranslatorILb1EmS6_S6_S4_EEEESt4pairINS_17HashTableIteratorImmS2_S4_S6_S6_EEbERKT_RKT0_
-__ZN3WTF9HashTableImmNS_17IdentityExtractorImEENS_7IntHashImEENS_10HashTraitsImEES6_E6expandEv
+__ZN3WTF9HashTableImmNS_17IdentityExtractorImEENS_7IntHashImEENS_10HashTraitsImEES6_E47removeAndInvalidateWithoutEntryConsistencyCheckEPm
-[WebView(WebViewInternal) _objectForIdentifier:]
-__ZN3WTF7HashMapImNS_9RetainPtrIP11objc_objectEENS_7IntHashImEENS_10HashTraitsImEENS7_IS4_EEE3setERKmRKS4_
-__ZN3WTF23HashTableRefCounterBaseILb1ENS_9HashTableIPN7WebCore10StringImplESt4pairIS4_iENS_18PairFirstExtractorIS6_EENS2_15CaseFoldingHashENS_14PairHashTraitsINS_10HashTraitsIS4_EENSB_IiEEEESC_EENS_18PairBaseHashTraitsINSB_INS2_6StringEEESI_EEE6refAllERSF_
-__ZN3WTF9HashTableIPN7WebCore10StringImplESt4pairIS3_iENS_18PairFirstExtractorIS5_EENS1_15CaseFoldingHashENS_14PairHashTraitsINS_10HashTraitsIS3_EENSA_IiEEEESB_EC1ERKSE_
+__Z24CallResourceLoadDelegatePFP11objc_objectS0_P13objc_selectorzEP7WebViewS2_S0_S0_
+__ZL12CallDelegatePFP11objc_objectS0_P13objc_selectorzEP7WebViewS0_S2_S0_S0_S0_S0_
+__ZN3WTF9HashTableIN7WebCore12AtomicStringESt4pairIS2_NS1_6StringEENS_18PairFirstExtractorIS5_EENS1_15CaseFoldingHashENS_14PairHashTraitsINS_10HashTraitsIS2_EENSA_IS4_EEEESB_EaSERKSE_
+__ZN3WTF6VectorIN7WebCore6StringELm0EEaSERKS3_
+__ZN3WTF6VectorIN7WebCore6StringELm0EE6shrinkEm
__ZNK20WebFrameLoaderClient32representationExistsForURLSchemeERKN7WebCore6StringE
+[WebView(WebPrivate) _representationExistsForURLScheme:]
-_WKCreateNSURLConnectionDelegateProxy
+WKCreateNSURLConnectionDelegateProxy
-[WebFramePolicyListener dealloc]
+-[WebView(WebIBActions) canGoBack]
+-[WebView(WebIBActions) canGoForward]
-[WebFrameView isOpaque]
+-[WebHTMLView windowWillOrderOnScreen:]
+-[WebView(WebPrivate) viewWillDraw]
-[WebFrameView drawRect:]
-[WebHTMLView(WebPrivate) _recursiveDisplayAllDirtyWithLockFocus:visRect:]
-[WebHTMLView(WebPrivate) _setAsideSubviews]
-[WebHTMLView(WebPrivate) _restoreSubviews]
--[WebFrame(WebInternal) _viewWillMoveToHostWindow:]
-[WebHTMLView viewWillMoveToHostWindow:]
-[NSArray(WebHTMLView) _web_makePluginViewsPerformSelector:withObject:]
--[WebFrame(WebInternal) _viewDidMoveToHostWindow]
-[WebHTMLView viewDidMoveToHostWindow]
+-[WebDynamicScrollBarsView(WebInternal) updateScrollers]
++[WebView(WebFileInternal) _cacheModel]
+-[WebBackForwardList dealloc]
+__ZN3WTF9HashTableIPN7WebCore15BackForwardListESt4pairIS3_P18WebBackForwardListENS_18PairFirstExtractorIS7_EENS_7PtrHashIS3_EENS_14PairHashTraitsINS_10HashTraitsIS3_EENSD_IS6_EEEESE_E4findIS3_NS_22IdentityHashTranslatorIS3_S7_SB_EEEENS_17HashTableIteratorIS3_S7_S9_SB_SG_SE_EERKT_
-[WebPreferences(WebPrivate) setRespectStandardStyleKeyEquivalents:]
-[WebPreferences _setBoolValue:forKey:]
+-[NSMutableDictionary(WebNSDictionaryExtras) _webkit_setBool:forKey:]
++[NSUserDefaults(WebNSUserDefaultsExtras) _webkit_defaultsDidChange]
-[WebPreferences setPrivateBrowsingEnabled:]
-[WebPreferences(WebPrivate) setDOMPasteAllowed:]
-+[WebPreferences(WebPrivate) _setInitialDefaultTextEncodingToSystemEncoding]
-+[WebPreferences(WebPrivate) _systemCFStringEncoding]
-_WKGetWebDefaultCFStringEncoding
-+[NSUserDefaults(WebNSUserDefaultsExtras) _webkit_defaultsDidChange]
--[WebHistory init]
-+[WebHistoryPrivate initialize]
--[WebHistoryPrivate init]
--[WebHistory setHistoryAgeInDaysLimit:]
--[WebHistoryPrivate setHistoryAgeInDaysLimit:]
--[WebHistory setHistoryItemLimit:]
--[WebHistoryPrivate setHistoryItemLimit:]
--[WebHistory loadFromURL:error:]
--[WebHistoryPrivate loadFromURL:collectDiscardedItemsInto:error:]
--[WebHistoryPrivate _loadHistoryGutsFromURL:savedItemsCount:collectDiscardedItemsInto:error:]
--[WebHistoryPrivate historyItemLimit]
--[WebHistoryPrivate _ageLimitDate]
--[WebHistoryPrivate historyAgeInDaysLimit]
--[WebHistoryItem(WebInternal) initFromDictionaryRepresentation:]
--[NSDictionary(WebNSDictionaryExtras) _webkit_stringForKey:]
--[WebHistoryItem(WebInternal) initWithURLString:title:displayTitle:lastVisitedTimeInterval:]
--[WebHistoryItem(WebInternal) initWithWebCoreHistoryItem:]
-__Z19historyItemWrappersv
-__ZNK3WTF7HashMapIPN7WebCore11HistoryItemEP14WebHistoryItemNS_7PtrHashIS3_EENS_10HashTraitsIS3_EENS8_IS5_EEE3getERKS3_
--[NSDictionary(WebNSDictionaryExtras) _webkit_intForKey:]
--[NSDictionary(WebNSDictionaryExtras) _webkit_numberForKey:]
--[WebHistoryItem URLString]
--[WebHistoryItem lastVisitedTimeInterval]
--[WebHistoryPrivate addItem:]
--[WebHistoryPrivate _addItemToDateCaches:]
--[WebHistoryPrivate findKey:forDay:]
-__Z29timeIntervalForBeginningOfDayd
-__ZNK3WTF9HashTableIxSt4pairIxNS_9RetainPtrI14NSMutableArrayEEENS_18PairFirstExtractorIS5_EENS_7IntHashIyEENS_14PairHashTraitsINS_10HashTraitsIxEENSB_IS4_EEEESC_E8containsIxNS_22IdentityHashTranslatorIxS5_S9_EEEEbRKT_
-__ZNK3WTF7HashMapIxNS_9RetainPtrI14NSMutableArrayEENS_7IntHashIyEENS_10HashTraitsIxEENS6_IS3_EEE3getERKx
-__ZN3WTF9HashTableIxSt4pairIxNS_9RetainPtrI14NSMutableArrayEEENS_18PairFirstExtractorIS5_EENS_7IntHashIyEENS_14PairHashTraitsINS_10HashTraitsIxEENSB_IS4_EEEESC_E3addIxS4_NS_17HashMapTranslatorILb1ES5_NS_18PairBaseHashTraitsISC_SD_EESE_S9_EEEES1_INS_17HashTableIteratorIxS5_S7_S9_SE_SC_EEbERKT_RKT0_
-__ZN3WTF9HashTableIxSt4pairIxNS_9RetainPtrI14NSMutableArrayEEENS_18PairFirstExtractorIS5_EENS_7IntHashIyEENS_14PairHashTraitsINS_10HashTraitsIxEENSB_IS4_EEEESC_E47removeAndInvalidateWithoutEntryConsistencyCheckEPS5_
--[WebHistoryPrivate insertItem:forDateKey:]
-+[WebHistory setOptionalSharedHistory:]
--[_WebCoreHistoryProvider initWithHistory:]
-+[WebIconDatabase allowDatabaseCleanup]
--[WebBackForwardList dealloc]
-__ZN3WTF9HashTableIiSt4pairIiiENS_18PairFirstExtractorIS2_EENS_7IntHashIiEENS_14PairHashTraitsINS_10HashTraitsIiEES9_EES9_E4findIiNS_22IdentityHashTranslatorIiS2_S6_EEEENS_17HashTableIteratorIiS2_S4_S6_SA_S9_EERKT_
-__ZN20WebFrameLoaderClient31dispatchDecidePolicyForMIMETypeEMN7WebCore11FrameLoaderEFvNS0_12PolicyActionEERKNS0_6StringERKNS0_15ResourceRequestE
-+[WebView canShowMIMEType:]
+-[WebPreferences setCacheModel:]
+-[WebPreferences _setIntegerValue:forKey:]
+-[WebPreferences(WebPrivate) setAutomaticallyDetectsCacheModel:]
++[WebHistoryItem(WebPrivate) _releaseAllPendingPageCaches]
+-[WebView initWithFrame:]
+-[WebView initWithFrame:frameName:groupName:]
+__ZL32needsWebViewInitThreadWorkaroundv
+-[WebView stringByEvaluatingJavaScriptFromString:]
+-[WebFrame(WebInternal) _stringByEvaluatingJavaScriptFromString:]
+-[WebFrame(WebInternal) _stringByEvaluatingJavaScriptFromString:forceUserGesture:]
+__ZN20WebFrameLoaderClient19windowObjectClearedEv
+-[WebView(WebPendingPublic) scriptDebugDelegate]
+-[WebView dealloc]
+-[WebView close]
+-[WebView(WebPrivate) _close]
+-[WebPreferences(WebPrivate) fullDocumentTeardownEnabled]
+__ZN20WebFrameLoaderClient19detachedFromParent2Ev
+-[WebHTMLView(WebPrivate) close]
+-[WebHTMLView(WebPrivate) _clearLastHitViewIfSelf]
+-[WebPluginController destroyAllPlugins]
+-[WebPluginController _cancelOutstandingChecks]
+-[WebHTMLViewPrivate clear]
+-[WebPluginController dealloc]
+__ZN20WebDocumentLoaderMac15detachFromFrameEv
+__ZN20WebDocumentLoaderMac17releaseDataSourceEv
+-[WebDataSource dealloc]
+-[WebDataSourcePrivate dealloc]
+__ZN20WebDocumentLoaderMac16detachDataSourceEv
+__ZN20WebFrameLoaderClient19detachedFromParent3Ev
+-[WebDynamicScrollBarsView(WebInternal) setScrollBarsSuppressed:repaintOnUnsuppress:]
+-[WebView(AllWebViews) _removeFromAllWebViewsSet]
+-[WebView(WebPendingPublic) setScriptDebugDelegate:]
+-[WebView(WebPrivate) _detachScriptDebuggerFromAllFrames]
+-[WebFrame(WebInternal) _detachScriptDebugger]
+-[WebView removeDragCaret]
+__ZN15WebEditorClient13pageDestroyedEv
+__ZN15WebEditorClientD1Ev
+__ZN18WebInspectorClient18inspectorDestroyedEv
+__ZN20WebContextMenuClient20contextMenuDestroyedEv
+__ZN13WebDragClient23dragControllerDestroyedEv
+__ZN13WebDragClientD1Ev
+__ZN15WebChromeClient15chromeDestroyedEv
+-[WebView preferencesIdentifier]
+-[WebPreferences identifier]
++[WebPreferences(WebPrivate) _removeReferenceForIdentifier:]
+-[WebPreferences(WebPrivate) didRemoveFromWebView]
+-[WebView(WebPrivate) _closePluginDatabases]
+-[WebViewPrivate dealloc]
+-[WebViewPrivate .cxx_destruct]
+-[WebFrameView dealloc]
+-[WebFrameViewPrivate dealloc]
+-[WebHTMLView dealloc]
+-[WebHTMLViewPrivate dealloc]
+__ZN20WebFrameLoaderClient14shouldFallBackERKN7WebCore13ResourceErrorE
+__ZN20WebFrameLoaderClient20setMainDocumentErrorEPN7WebCore14DocumentLoaderERKNS0_13ResourceErrorE
+-[WebDataSource(WebInternal) _setMainDocumentError:]
+__ZN20WebFrameLoaderClient27dispatchDidLoadMainResourceEPN7WebCore14DocumentLoaderE
+__ZN20WebFrameLoaderClient30dispatchDidFailProvisionalLoadERKN7WebCore13ResourceErrorE
+-[WebView(WebPrivate) _didFailProvisionalLoadWithError:forFrame:]
+-[WebView(WebPrivate) _didChangeBackForwardKeys]
+__Z21CallFrameLoadDelegatePFP11objc_objectS0_P13objc_selectorzEP7WebViewS2_S0_S0_
+-[NSURL(WebNSURLExtras) _web_userVisibleString]
+__ZL10isHexDigitc
+__ZL13hexDigitValuec
+__ZL12mapHostNamesP8NSStringa
+__ZN3WTF6VectorItLm2048EE6shrinkEm
+-[WebFrame loadAlternateHTMLString:baseURL:forUnreachableURL:]
+-[WebFrame _loadHTMLString:baseURL:unreachableURL:]
+-[WebFrame _loadData:MIMEType:textEncodingName:baseURL:unreachableURL:]
+__ZN20WebFrameLoaderClient22dispatchDidFailLoadingEPN7WebCore14DocumentLoaderEmRKNS0_13ResourceErrorE
+__ZL12CallDelegatePFP11objc_objectS0_P13objc_selectorzEP7WebViewS0_S2_S0_S0_S0_
+-[WebView(WebViewInternal) _removeObjectForIdentifier:]
+__ZN3WTF9HashTableImSt4pairImNS_9RetainPtrIP11objc_objectEEENS_18PairFirstExtractorIS6_EENS_7IntHashImEENS_14PairHashTraitsINS_10HashTraitsImEENSC_IS5_EEEESD_E4findImNS_22IdentityHashTranslatorImS6_SA_EEEENS_17HashTableIteratorImS6_S8_SA_SF_SD_EERKT_
+__ZN3WTF9HashTableImSt4pairImNS_9RetainPtrIP11objc_objectEEENS_18PairFirstExtractorIS6_EENS_7IntHashImEENS_14PairHashTraitsINS_10HashTraitsImEENSC_IS5_EEEESD_E6expandEv
+__ZN20WebDocumentLoaderMac17decreaseLoadCountEm
+__ZN3WTF9HashTableImmNS_17IdentityExtractorImEENS_7IntHashImEENS_10HashTraitsImEES6_E4findImNS_22IdentityHashTranslatorImmS4_EEEENS_17HashTableIteratorImmS2_S4_S6_S6_EERKT_
+__ZN20WebDocumentLoaderMacD1Ev
+-[WebView estimatedProgress]
+-[WebIconDatabase(WebInternal) _iconForFileURL:withSize:]
+-[WebIconDatabase(WebInternal) _scaleIcon:toSize:]
+__ZL29_updateMouseoverTimerCallbackP16__CFRunLoopTimerPv
+-[WebHTMLView(WebPrivate) _updateMouseoverWithFakeEvent]
+-[WebHTMLView(WebPrivate) _updateMouseoverWithEvent:]
+-[WebHTMLView(WebPrivate) hitTest:]
+__ZL41_updateFocusedAndActiveStateTimerCallbackP16__CFRunLoopTimerPv
+-[WebHTMLView(WebPrivate) _updateFocusedAndActiveState]
+-[WebHTMLView(WebInternal) _frame]
+-[WebView _updateFocusedAndActiveStateForFrame:]
+__ZN20WebFrameLoaderClient20frameLoaderDestroyedEv
+-[WebFrame(WebInternal) _clearCoreFrame]
+-[WebFrame dealloc]
+-[WebFramePrivate dealloc]
__ZNK20WebFrameLoaderClient15canShowMIMETypeERKN7WebCore6StringE
++[WebView canShowMIMEType:]
__ZN20WebFrameLoaderClient26dispatchDidReceiveResponseEPN7WebCore14DocumentLoaderEmRKNS0_16ResourceResponseE
__ZN20WebFrameLoaderClient17dispatchWillCloseEv
__ZN20WebFrameLoaderClient18makeRepresentationEPN7WebCore14DocumentLoaderE
@@ -423,266 +514,301 @@ __ZN20WebFrameLoaderClient18makeRepresentationEPN7WebCore14DocumentLoaderE
-[WebHTMLRepresentation init]
-[WebDataSource(WebFileInternal) _setRepresentation:]
-[WebHTMLRepresentation setDataSource:]
--[WebFrame(WebInternal) _bridge]
-__ZN20WebDocumentLoaderMac15detachFromFrameEv
-__ZN20WebDocumentLoaderMac17releaseDataSourceEv
-__ZN20WebFrameLoaderClient34updateGlobalHistoryForStandardLoadERKN7WebCore4KURLE
+__Z26WKNotifyHistoryItemChangedv
+__ZN20WebFrameLoaderClient19updateGlobalHistoryEv
+[WebHistory optionalSharedHistory]
--[WebHistory addItemForURL:]
--[WebHistoryItem(WebPrivate) initWithURL:title:]
+-[WebHistory(WebInternal) _visitedURL:withTitle:method:wasFailure:]
+-[WebHistoryPrivate visitedURL:withTitle:]
-[WebHistoryItem initWithURLString:title:lastVisitedTimeInterval:]
--[WebHistoryItem(WebPrivate) _setLastVisitedTimeInterval:]
--[WebHistory addItem:]
--[WebHistoryPrivate removeItemForURLString:]
--[WebHistoryPrivate _removeItemFromDateCaches:]
-__ZN3WTF9HashTableIxSt4pairIxNS_9RetainPtrI14NSMutableArrayEEENS_18PairFirstExtractorIS5_EENS_7IntHashIyEENS_14PairHashTraitsINS_10HashTraitsIxEENSB_IS4_EEEESC_E4findIxNS_22IdentityHashTranslatorIxS5_S9_EEEENS_17HashTableIteratorIxS5_S7_S9_SE_SC_EERKT_
--[WebHistoryItem(WebInternal) _mergeAutoCompleteHints:]
--[WebHistoryItem dealloc]
+-[WebHistoryItem(WebInternal) initWithWebCoreHistoryItem:]
+__ZL19historyItemWrappersv
+__ZN3WTF9HashTableIPN7WebCore11HistoryItemESt4pairIS3_P14WebHistoryItemENS_18PairFirstExtractorIS7_EENS_7PtrHashIS3_EENS_14PairHashTraitsINS_10HashTraitsIS3_EENSD_IS6_EEEESE_E6expandEv
+-[WebHistoryItem(WebInternal) _setVisitCount:]
+-[WebHistoryPrivate addItemToDateCaches:]
+-[WebHistoryItem lastVisitedTimeInterval]
+-[WebHistoryPrivate findKey:forDay:]
+__ZNK3WTF9HashTableIxSt4pairIxNS_9RetainPtrI14NSMutableArrayEEENS_18PairFirstExtractorIS5_EENS_7IntHashIyEENS_14PairHashTraitsINS_10HashTraitsIxEENSB_IS4_EEEESC_E8containsIxNS_22IdentityHashTranslatorIxS5_S9_EEEEbRKT_
+__Z4coreP14WebHistoryItem
-[WebHistory _sendNotification:entries:]
-__Z26WKNotifyHistoryItemChangedv
--[WebDynamicScrollBarsView setScrollBarsSuppressed:repaintOnUnsuppress:]
--[WebDataSource dealloc]
--[WebDataSourcePrivate dealloc]
-__ZN20WebDocumentLoaderMac16detachDataSourceEv
+-[WebHistoryItem URLString]
+-[NSString(WebKitExtras) _webkit_hasCaseInsensitivePrefix:]
__ZNK20WebFrameLoaderClient11hasHTMLViewEv
__ZN20WebFrameLoaderClient13committedLoadEPN7WebCore14DocumentLoaderEPKci
-[WebDataSource(WebInternal) _receivedData:]
-[WebHTMLRepresentation receivedData:withDataSource:]
--[WebHTMLRepresentation _isDisplayingWebArchive]
+-[WebFrame(WebInternal) _receivedData:textEncodingName:]
+__ZNK7WebCore17FrameLoaderClient23shouldUsePluginDocumentERKNS_6StringE
__ZN20WebFrameLoaderClient21dispatchDidCommitLoadEv
-[WebView(WebPrivate) _didCommitLoadForFrame:]
-[WebDataSource pageTitle]
-[WebHTMLRepresentation title]
-[WebDataSource(WebInternal) _documentLoader]
--[WebBackForwardList currentItem]
-__Z3kitPN7WebCore11HistoryItemE
--[WebHistoryItem(WebPrivate) _transientPropertyForKey:]
+__ZN3WTF7HashMapIPN7WebCore11HistoryItemEP14WebHistoryItemNS_7PtrHashIS3_EENS_10HashTraitsIS3_EENS8_IS5_EEE3setERKS3_RKS5_
-[WebFrameView becomeFirstResponder]
-[WebHTMLView acceptsFirstResponder]
-[WebHTMLView becomeFirstResponder]
-[WebView(WebPrivate) _isPerformingProgrammaticFocus]
--[WebHTMLView(WebPrivate) _updateFocusedAndActiveState]
--[WebHTMLView(WebInternal) _frame]
-[WebHTMLView(WebInternal) _updateFontPanel]
-[WebHTMLView(WebPrivate) _canEdit]
--[WebHTMLView _arrowKeyDownEventSelectorIfPreprocessing]
--[NSURL(WebNSURLExtras) _web_userVisibleString]
--[NSURL(WebNSURLExtras) _web_originalData]
-__Z10isHexDigitc
-__Z13hexDigitValuec
-__ZN20WebFrameLoaderClient15willChangeTitleEPN7WebCore14DocumentLoaderE
-__ZN20WebFrameLoaderClient14didChangeTitleEPN7WebCore14DocumentLoaderE
-__ZN20WebFrameLoaderClient8setTitleERKN7WebCore6StringERKNS0_4KURLE
--[WebHistory itemForURL:]
+-[WebFrame(WebInternal) _addData:]
-[WebHistoryPrivate itemForURL:]
--[WebHistoryPrivate itemForURLString:]
-[WebHistoryItem(WebInternal) setTitle:]
__ZN20WebFrameLoaderClient23dispatchDidReceiveTitleERKN7WebCore6StringE
-__Z21CallFrameLoadDelegatePFP11objc_objectS0_P13objc_selectorzEP7WebViewS2_S0_S0_
-__ZN20WebFrameLoaderClient22dispatchDidFailLoadingEPN7WebCore14DocumentLoaderEmRKNS0_13ResourceErrorE
+-[WebHTMLView dataSourceUpdated:]
+__ZN20WebFrameLoaderClient39postProgressEstimateChangedNotificationEv
+__ZN20WebFrameLoaderClient31dispatchDidReceiveContentLengthEPN7WebCore14DocumentLoaderEmi
+__Z24CallResourceLoadDelegatePFP11objc_objectS0_P13objc_selectorzEP7WebViewS2_S0_iS0_
+__ZL12CallDelegatePFP11objc_objectS0_P13objc_selectorzEP7WebViewS0_S2_S0_iS0_
+-[WebHTMLRepresentation finishedLoadingWithDataSource:]
+-[WebHTMLRepresentation _isDisplayingWebArchive]
+-[WebView(WebViewEditing) isEditable]
+__ZN20WebFrameLoaderClient29dispatchDidFinishDocumentLoadEv
+__ZN20WebFrameLoaderClient24dispatchDidFinishLoadingEPN7WebCore14DocumentLoaderEm
+-[WebHistoryPrivate insertItem:forDateKey:]
+__ZN3WTF7HashMapIxNS_9RetainPtrI14NSMutableArrayEENS_7IntHashIyEENS_10HashTraitsIxEENS6_IS3_EEE3setERKxRKS3_
__ZN20WebFrameLoaderClient29dispatchDidHandleOnloadEventsEv
--[WebDynamicScrollBarsView verticalScrollingMode]
--[WebDynamicScrollBarsView setVerticalScrollingMode:]
--[WebDynamicScrollBarsView setVerticalScrollingMode:andLock:]
--[WebDynamicScrollBarsView updateScrollers]
--[WebDynamicScrollBarsView setHorizontalScrollingMode:]
--[WebDynamicScrollBarsView setHorizontalScrollingMode:andLock:]
+-[WebDynamicScrollBarsView(WebInternal) setScrollingModes:vertical:andLock:]
__ZN15WebEditorClient10isEditableEv
+-[WebView(WebPendingPublic) isHoverFeedbackSuspended]
+__ZN15WebChromeClient23mouseDidMoveOverElementERKN7WebCore13HitTestResultEj
++[WebElementDictionary initialize]
+-[WebElementDictionary initWithHitTestResult:]
++[WebElementDictionary initializeLookupTable]
+__ZL12addLookupKeyP8NSStringP13objc_selector
+-[WebView(WebPrivate) _mouseDidMoveOverElement:modifierFlags:]
+__Z14CallUIDelegateP7WebViewP13objc_selectorP11objc_objectj
+__ZL12CallDelegateP7WebViewP11objc_objectP13objc_selectorS2_j
+-[WebElementDictionary objectForKey:]
+-[WebElementDictionary _absoluteLinkURL]
+-[WebElementDictionary dealloc]
+__ZN15WebChromeClient10setToolTipERKN7WebCore6StringE
+-[WebHTMLView(WebPrivate) _setToolTip:]
+-[WebView(WebPrivate) _globalHistoryItem]
+-[WebHistoryItem originalURLString]
+-[WebHistory orderedLastVisitedDays]
+-[WebHistoryPrivate orderedLastVisitedDays]
+__ZN3WTF6VectorIiLm0EE15reserveCapacityEm
+__ZSt16__introsort_loopIPiiEvT_S1_T0_
+__ZSt22__final_insertion_sortIPiEvT_S1_
+__ZSt16__insertion_sortIPiEvT_S1_
+__ZN3WTF6VectorIiLm0EE6shrinkEm
+-[WebHistory orderedItemsLastVisitedOnDay:]
+-[WebHistoryPrivate orderedItemsLastVisitedOnDay:]
+-[WebHistoryItem title]
+-[WebHTMLView shouldDelayWindowOrderingForEvent:]
+-[WebHTMLView(WebHTMLViewFileInternal) _hitViewForEvent:]
+-[WebHTMLView _isSelectionEvent:]
+-[WebHTMLView(WebDocumentInternalProtocols) elementAtPoint:allowShadowContent:]
+-[WebElementDictionary _isSelected]
+-[WebHTMLView needsPanelToBecomeKey]
+-[WebHTMLView _windowChangedKeyState]
+-[WebHTMLView windowDidBecomeKey:]
+-[WebHTMLView acceptsFirstMouse:]
+-[WebHTMLView(WebHTMLViewFileInternal) _setMouseDownEvent:]
+__ZL9setCursorP8NSWindowP13objc_selector8_NSPoint
+-[NSWindow(BorderViewAccess) _web_borderView]
+-[WebElementDictionary _domNode]
+__Z3kitPN7WebCore4NodeE
+-[WebHTMLView mouseMovedNotification:]
+-[WebBackForwardList forwardListCount]
+-[WebBackForwardList backListCount]
+-[WebBackForwardList itemAtIndex:]
+-[WebView(WebPendingPublic) shouldClose]
+-[WebWindowWatcher windowWillClose:]
+-[WebView _windowWillClose:]
+-[WebView shouldCloseWithWindow]
+-[WebHTMLView windowWillClose:]
+-[WebHTMLView windowDidResignKey:]
+-[WebHTMLView removeMouseMovedObserver]
+-[WebView(WebPrivate) _isClosed]
+-[WebView(WebPrivate) _clearUndoRedoOperations]
+__ZN20WebFrameLoaderClient19saveViewStateToItemEPN7WebCore11HistoryItemE
+-[WebHTMLRepresentation dealloc]
+-[WebHistoryItem dealloc]
+__ZN3WTF9HashTableIPN7WebCore11HistoryItemESt4pairIS3_P14WebHistoryItemENS_18PairFirstExtractorIS7_EENS_7PtrHashIS3_EENS_14PairHashTraitsINS_10HashTraitsIS3_EENSD_IS6_EEEESE_E4findIS3_NS_22IdentityHashTranslatorIS3_S7_SB_EEEENS_17HashTableIteratorIS3_S7_S9_SB_SG_SE_EERKT_
+-[WebHistory saveToURL:error:]
+-[WebHistoryPrivate saveToURL:error:]
+-[WebHistoryPrivate saveHistoryGuts:URL:error:]
+-[WebHistoryPrivate arrayRepresentation]
+-[WebHistoryItem(WebPrivate) dictionaryRepresentation]
++[WebView(WebFileInternal) _preferencesRemovedNotification:]
++[WebView(WebFileInternal) _maxCacheModelInAnyInstance]
+-[WebHistoryPrivate historyItemLimit]
+-[WebHistoryPrivate ageLimitDate]
+-[WebHistoryPrivate historyAgeInDaysLimit]
+-[WebHistoryItem(WebInternal) initFromDictionaryRepresentation:]
+-[NSDictionary(WebNSDictionaryExtras) _webkit_stringForKey:]
+-[WebHistoryItem(WebInternal) initWithURLString:title:displayTitle:lastVisitedTimeInterval:]
+-[NSDictionary(WebNSDictionaryExtras) _webkit_intForKey:]
+-[NSDictionary(WebNSDictionaryExtras) _webkit_numberForKey:]
+-[NSDictionary(WebNSDictionaryExtras) _webkit_boolForKey:]
+-[WebHistoryPrivate addItem:]
+-[WebHistory itemForURL:]
+-[WebHistory(WebPrivate) allItems]
+-[WebHistoryPrivate allItems]
+-[WebHistoryItem(WebPrivate) visitCount]
++[NSURL(WebNSURLExtras) _web_URLWithUserTypedString:]
++[NSURL(WebNSURLExtras) _web_URLWithUserTypedString:relativeToURL:]
+-[WebHistoryItem(WebInternal) _visitedWithTitle:]
+-[WebHistoryPrivate removeItemFromDateCaches:]
+__ZN3WTF9HashTableIxSt4pairIxNS_9RetainPtrI14NSMutableArrayEEENS_18PairFirstExtractorIS5_EENS_7IntHashIyEENS_14PairHashTraitsINS_10HashTraitsIxEENSB_IS4_EEEESC_E4findIxNS_22IdentityHashTranslatorIxS5_S9_EEEENS_17HashTableIteratorIxS5_S7_S9_SE_SC_EERKT_
-[WebHTMLView layout]
-[WebHTMLView layoutToMinimumPageWidth:maximumPageWidth:adjustingViewSize:]
-[WebHTMLView reapplyStyles]
--[WebDataSource(WebInternal) _bridge]
-__ZN20WebFrameLoaderClient22dispatchDidFirstLayoutEv
-__ZN20WebFrameLoaderClient21dispatchDidFinishLoadEv
--[WebView(WebPrivate) _didFinishLoadForFrame:]
--[WebView(WebPrivate) _didChangeBackForwardKeys]
--[WebFrame DOMDocument]
-__Z3kitPN7WebCore8DocumentE
-__ZN20WebFrameLoaderClient32postProgressFinishedNotificationEv
-[WebHTMLView(WebPrivate) viewWillDraw]
-[WebHTMLView(WebInternal) _web_layoutIfNeededRecursive]
-[WebHTMLView(WebInternal) _layoutIfNeeded]
+-[WebFrame(WebInternal) _needsLayout]
-[NSView(WebHTMLViewFileInternal) _web_addDescendantWebHTMLViewsToArray:]
-[WebHTMLView isOpaque]
-[WebHTMLView drawRect:]
+-[WebView(WebPrivate) _mustDrawUnionedRect:singleRects:count:]
-[WebHTMLView drawSingleRect:]
-[WebClipView setAdditionalClip:]
-[WebHTMLView(WebPrivate) _transparentBackground]
--[WebHistoryItem originalURLString]
--[WebFrame(WebPrivate) _isFrameSet]
--[WebHTMLView(WebDocumentPrivateProtocols) string]
--[WebHTMLView(WebHTMLViewFileInternal) _documentRange]
--[DOMDocument(WebDOMDocumentOperationsPrivate) _documentRange]
--[DOMDocument(WebDOMDocumentOperationsPrivate) _createRangeWithNode:]
--[WebHTMLView _windowChangedKeyState]
--[WebHTMLView updateCell:]
--[WebHTMLView windowDidBecomeKey:]
--[WebHTMLView(WebNSTextInputSupport) inputContext]
--[WebHTMLView(WebNSTextInputSupport) validAttributesForMarkedText]
-__Z9setCursorP8NSWindowP13objc_selector8_NSPoint
--[NSWindow(BorderViewAccess) _web_borderView]
--[WebHTMLView nextResponder]
--[WebHTMLView mouseMovedNotification:]
--[NSView(WebExtras) _web_dragShouldBeginFromMouseDown:withExpiration:xHysteresis:yHysteresis:]
--[NSString(WebNSURLExtras) _webkit_scriptIfJavaScriptURL]
--[NSString(WebNSURLExtras) _webkit_isJavaScriptURL]
-__ZNK20WebFrameLoaderClient12canCachePageEv
-__ZN20WebFrameLoaderClient19windowObjectClearedEv
--[WebFrameBridge windowObjectCleared]
--[WebView(WebPendingPublic) scriptDebugDelegate]
-__ZN20WebFrameLoaderClient28savePlatformDataToCachedPageEPN7WebCore10CachedPageE
--[WebHistoryItem hash]
-__ZNK20WebFrameLoaderClient25didPerformFirstNavigationEv
--[WebPreferences(WebPrivate) automaticallyDetectsCacheModel]
-__ZN20WebFrameLoaderClient19saveViewStateToItemEPN7WebCore11HistoryItemE
--[WebHTMLView resignFirstResponder]
--[WebHTMLView maintainsInactiveSelection]
--[WebView(WebViewEditing) maintainsInactiveSelection]
--[WebHTMLView(WebDocumentPrivateProtocols) deselectAll]
--[WebHTMLView clearFocus]
+-[WebFrame(WebInternal) _drawRect:contentsOnly:]
+-[WebView(WebPrivate) _UIDelegateForwarder]
++[WebDefaultUIDelegate sharedUIDelegate]
+-[WebView currentNodeHighlight]
+-[WebClipView resetAdditionalClip]
+-[WebHTMLView(WebPrivate) _recursiveDisplayRectIfNeededIgnoringOpacity:isVisibleRect:rectIsVisibleRectForView:topView:]
+__ZN15WebChromeClient20populateVisitedLinksEv
+-[WebHistory(WebInternal) _addVisitedLinksToPageGroup:]
+-[WebHistoryPrivate addVisitedLinksToPageGroup:]
+__ZN3WTF6VectorItLm512EE6shrinkEm
+WKSetUpFontCache
+__ZN20WebFrameLoaderClient38dispatchDidFirstVisuallyNonEmptyLayoutEv
+WKCGContextGetShouldSmoothFonts
+WKSetCGFontRenderingMode
+__ZNK20WebFrameLoaderClient29generatedMIMETypeForURLSchemeERKN7WebCore6StringE
+__ZN20WebFrameLoaderClient31dispatchDecidePolicyForMIMETypeEMN7WebCore11FrameLoaderEFvNS0_12PolicyActionEERKNS0_6StringERKNS0_15ResourceRequestE
+-[WebHistoryItem(WebPrivate) _lastVisitWasHTTPNonGet]
+-[WebHistoryItem(WebPrivate) lastVisitWasFailure]
+-[WebHistory removeItems:]
+-[WebHistoryPrivate removeItems:]
+-[WebHistoryPrivate removeItem:]
+-[WebHistoryPrivate removeItemForURLString:]
++[WebView(WebPrivate) _shouldUseFontSmoothing]
++[WebView(WebPrivate) _setShouldUseFontSmoothing:]
++[WebIconDatabase(WebPrivate) _checkIntegrityBeforeOpening]
+-[WebView(WebPrivate) setDefersCallbacks:]
++[WebPreferences(WebPrivate) _setInitialDefaultTextEncodingToSystemEncoding]
++[WebPreferences(WebPrivate) _systemCFStringEncoding]
+WKGetWebDefaultCFStringEncoding
++[WebIconDatabase allowDatabaseCleanup]
+-[WebIconDatabase defaultIconForURL:withSize:]
__ZNK20WebFrameLoaderClient17willCacheResponseEPN7WebCore14DocumentLoaderEmP19NSCachedURLResponse
+__ZN20WebFrameLoaderClient15willChangeTitleEPN7WebCore14DocumentLoaderE
+__ZN20WebFrameLoaderClient14didChangeTitleEPN7WebCore14DocumentLoaderE
+__ZN20WebFrameLoaderClient8setTitleERKN7WebCore6StringERKNS0_4KURLE
++[NSError(WebKitExtras) _webkit_errorWithDomain:code:URL:]
+-[NSError(WebKitExtras) _webkit_initWithDomain:code:URL:]
__ZN21WebIconDatabaseClient28dispatchDidAddIconForPageURLERKN7WebCore6StringE
-[WebIconDatabase(WebInternal) _sendNotificationForURL:]
-[NSNotificationCenter(WebNSNotificationCenterExtras) postNotificationOnMainThreadWithName:object:userInfo:]
-[NSNotificationCenter(WebNSNotificationCenterExtras) postNotificationOnMainThreadWithName:object:userInfo:waitUntilDone:]
-__ZN20WebFrameLoaderClient27registerForIconNotificationEb
+__ZN20WebFrameLoaderClient22dispatchDidReceiveIconEv
+-[WebView(WebViewInternal) _dispatchDidReceiveIconFromWebFrame:]
-[WebView(WebViewInternal) _registerForIconNotification:]
--[WebBasePluginPackage isNativeLibraryData:]
--[WebBasePluginPackage getPluginInfoFromPLists]
+__ZN20WebFrameLoaderClient19dispatchDidFailLoadERKN7WebCore13ResourceErrorE
+-[WebView(WebPrivate) _didFailLoadWithError:forFrame:]
+-[WebFrame DOMDocument]
+__Z3kitPN7WebCore8DocumentE
+__ZN20WebFrameLoaderClient32postProgressFinishedNotificationEv
++[NSNotificationCenter(WebNSNotificationCenterExtras) _postNotificationName:]
+-[WebNetscapePluginPackage getPluginInfoFromResources]
+-[WebNetscapePluginPackage openResourceFile]
-[WebNetscapePluginPackage stringForStringListID:andIndex:]
+[NSString(WebKitExtras) _web_encodingForResource:]
-[WebNetscapePluginPackage closeResourceFile:]
+-[WebNetscapePluginPackage(Internal) _unloadWithShutdown:]
-[WebBasePluginPackage pListForPath:createFile:]
+-[WebPluginPackage load]
-[WebBasePluginPackage load]
+-[WebBasePluginPackage unload]
++[WebBasePluginPackage preferredLocalizationName]
-[WebPluginDatabase(Internal) _addPlugin:]
-[WebBasePluginPackage path]
-[WebBasePluginPackage wasAddedToPluginDatabase:]
-[WebBasePluginPackage MIMETypeEnumerator]
-[WebPluginDatabase pluginForMIMEType:]
-[WebPluginDatabase pluginForKey:withEnumeratorSelector:]
+__ZL14checkCandidatePP20WebBasePluginPackageS1_
-[WebNetscapePluginPackage executableType]
-_checkCandidate
-[WebBasePluginPackage isQuickTimePlugIn]
-[WebBasePluginPackage bundle]
-[WebBasePluginPackage isJavaPlugIn]
+[WebHTMLView(WebPrivate) supportedImageMIMETypes]
+[WebHTMLRepresentation supportedImageMIMETypes]
__ZN3WTF7HashSetIN7WebCore6StringENS1_10StringHashENS_10HashTraitsIS2_EEE3addERKS2_
-__ZN3WTF9HashTableIPN7WebCore10StringImplES3_NS_17IdentityExtractorIS3_EENS1_10StringHashENS_10HashTraitsIS3_EES8_E3addINS1_6StringESB_NS_17HashSetTranslatorILb0ESB_NS7_ISB_EES8_S6_EEEESt4pairINS_17HashTableIteratorIS3_S3_S5_S6_S8_S8_EEbERKT_RKT0_
-__ZN3WTF9HashTableIPN7WebCore10StringImplES3_NS_17IdentityExtractorIS3_EENS1_10StringHashENS_10HashTraitsIS3_EES8_E6expandEv
-__ZN3WTF9HashTableIPN7WebCore10StringImplES3_NS_17IdentityExtractorIS3_EENS1_10StringHashENS_10HashTraitsIS3_EES8_E4findIS3_NS_22IdentityHashTranslatorIS3_S3_S6_EEEENS_17HashTableIteratorIS3_S3_S5_S6_S8_S8_EERKT_
+__ZN3WTF9HashTableIN7WebCore6StringES2_NS_17IdentityExtractorIS2_EENS1_10StringHashENS_10HashTraitsIS2_EES7_E6expandEv
+__ZN3WTF9HashTableIN7WebCore6StringES2_NS_17IdentityExtractorIS2_EENS1_10StringHashENS_10HashTraitsIS2_EES7_E4findIS2_NS_22IdentityHashTranslatorIS2_S2_S5_EEEENS_17HashTableIteratorIS2_S2_S4_S5_S7_S7_EERKT_
+-[WebBasePluginPackage versionNumber]
-[WebPluginDatabase plugins]
-[WebBasePluginPackage name]
-[WebBasePluginPackage pluginDescription]
-[WebBasePluginPackage extensionsForMIMEType:]
-[WebBasePluginPackage descriptionForMIMEType:]
--[WebView estimatedProgress]
-_WKSetNSURLRequestShouldContentSniff
--[WebHistoryItem isEqual:]
-__ZN20WebFrameLoaderClient17objectContentTypeERKN7WebCore4KURLERKNS0_6StringE
--[WebFrameBridge determineObjectFromMIMEType:URL:]
--[WebFrameBridge webView]
--[WebView _pluginForMIMEType:]
-__ZN20WebFrameLoaderClient12createPluginERKN7WebCore7IntSizeEPNS0_7ElementERKNS0_4KURLERKN3WTF6VectorINS0_6StringELm0EEESE_RKSB_b
-__Z7nsArrayRKN3WTF6VectorIN7WebCore6StringELm0EEE
--[WebFrameBridge viewForPluginWithFrame:URL:attributeNames:attributeValues:MIMEType:DOMElement:loadManually:]
-+[WebBaseNetscapePluginView initialize]
-_WKSendUserChangeNotifications
--[WebBaseNetscapePluginView initWithFrame:pluginPackage:URL:baseURL:MIMEType:attributeKeys:attributeValues:loadManually:DOMElement:]
--[WebNetscapePluginPackage load]
--[WebNetscapePluginPackage _applyDjVuWorkaround]
--[WebBaseNetscapePluginView setPluginPackage:]
--[WebNetscapePluginPackage NPP_New]
--[WebNetscapePluginPackage NPP_Destroy]
--[WebNetscapePluginPackage NPP_SetWindow]
--[WebNetscapePluginPackage NPP_NewStream]
--[WebNetscapePluginPackage NPP_WriteReady]
--[WebNetscapePluginPackage NPP_Write]
--[WebNetscapePluginPackage NPP_StreamAsFile]
--[WebNetscapePluginPackage NPP_DestroyStream]
--[WebNetscapePluginPackage NPP_HandleEvent]
--[WebNetscapePluginPackage NPP_URLNotify]
--[WebNetscapePluginPackage NPP_GetValue]
--[WebNetscapePluginPackage NPP_SetValue]
--[WebNetscapePluginPackage NPP_Print]
--[WebBaseNetscapePluginView setMIMEType:]
--[WebBaseNetscapePluginView setBaseURL:]
--[WebBaseNetscapePluginView setAttributeKeys:andValues:]
--[WebBaseNetscapePluginView setMode:]
+__ZN20WebFrameLoaderClient21dispatchDidFinishLoadEv
+-[WebView(WebPrivate) _didFinishLoadForFrame:]
+-[WebHistoryItem(WebPrivate) _transientPropertyForKey:]
+-[WebHTMLView(WebDocumentPrivateProtocols) selectionView]
+-[WebHTMLView(WebPrivate) _recursive:displayRectIgnoringOpacity:inContext:topView:]
+-[WebHTMLView(WebNSTextInputSupport) validAttributesForMarkedText]
+-[WebFrame(WebPrivate) _isFrameSet]
+-[WebHTMLView(WebDocumentPrivateProtocols) string]
+-[WebHTMLView(WebHTMLViewFileInternal) _documentRange]
+-[DOMDocument(WebDOMDocumentOperationsPrivate) _documentRange]
+-[DOMDocument(WebDOMDocumentOperationsPrivate) _createRangeWithNode:]
+-[WebFrame(WebInternal) _stringForRange:]
+-[NSEvent(WebExtras) _web_isOptionTabKeyEvent]
+-[WebFrame(WebPrivate) _isDisplayingStandaloneImage]
+-[WebView(WebPendingPublic) markAllMatchesForText:caseSensitive:highlight:limit:]
+-[WebHTMLView(WebDocumentInternalProtocols) setMarkedTextMatchesAreHighlighted:]
+-[WebHTMLView(WebDocumentInternalProtocols) markAllMatchesForText:caseSensitive:limit:]
+__ZL14incrementFrameP8WebFrameaa
+-[WebView(WebPendingPublic) unmarkAllTextMatches]
+-[WebHTMLView(WebDocumentInternalProtocols) unmarkAllTextMatches]
+-[WebDynamicScrollBarsView setAllowsHorizontalScrolling:]
++[NSPasteboard(WebExtras) _web_setFindPasteboardString:withOwner:]
+__ZN20WebFrameLoaderClient50dispatchDidReceiveServerRedirectForProvisionalLoadEv
+__ZNK20WebFrameLoaderClient12canCachePageEv
+__ZN20WebFrameLoaderClient29savePlatformDataToCachedFrameEPN7WebCore11CachedFrameE
+__ZNK20WebFrameLoaderClient25didPerformFirstNavigationEv
+-[WebPreferences(WebPrivate) automaticallyDetectsCacheModel]
+WKGetFontInLanguageForRange
+WKDrawBezeledTextFieldCell
+-[WebHTMLView(WebPrivate) addTrackingRect:owner:userData:assumeInside:]
+-[WebHTMLView(WebPrivate) _sendToolTipMouseEntered]
+-[WebHTMLView(WebPrivate) _sendToolTipMouseExited]
+-[WebElementDictionary _webFrame]
+-[DOMDocument(WebDOMDocumentOperations) webFrame]
+__Z4coreP11DOMDocument
+-[WebElementDictionary _targetWebFrame]
+-[NSURL(WebNSURLExtras) _webkit_URLByRemovingFragment]
+-[NSURL(WebNSURLExtras) _webkit_URLByRemovingComponent:]
+-[WebHTMLView mouseDown:]
+__ZN15WebChromeClient14firstResponderEv
+-[WebHTMLView mouseUp:]
+WKSetNSURLConnectionDefersCallbacks
+haltTimerFired
+resumeTimerFired
+-[WebHTMLView(WebPrivate) _removeTrackingRects:count:]
+-[WebHTMLView(WebPrivate) _addTrackingRect:owner:userData:assumeInside:useTrackingNum:]
+__ZN20WebFrameLoaderClient11createFrameERKN7WebCore4KURLERKNS0_6StringEPNS0_21HTMLFrameOwnerElementES6_bii
++[WebFrame(WebInternal) _createSubframeWithOwnerElement:frameName:frameView:]
-[WebHTMLView addSubview:]
--[WebBaseNetscapePluginView viewWillMoveToSuperview:]
--[WebBaseNetscapePluginView visibleRect]
--[WebBaseNetscapePluginView isFlipped]
--[WebBaseNetscapePluginView viewWillMoveToWindow:]
--[WebBaseNetscapePluginView tellQuickTimeToChill]
--[WebBaseNetscapePluginView removeTrackingRect]
--[WebBaseNetscapePluginView removeWindowObservers]
--[WebBaseNetscapePluginView setHasFocus:]
--[WebBaseNetscapePluginView viewDidMoveToWindow]
--[WebBaseNetscapePluginView resetTrackingRect]
--[WebBaseNetscapePluginView start]
--[WebBaseNetscapePluginView canStart]
--[WebBaseNetscapePluginView webView]
--[WebBaseNetscapePluginView webFrame]
--[WebBaseNetscapePluginView dataSource]
-__Z4coreP10DOMElement
--[WebNetscapePluginPackage open]
--[WebBaseNetscapePluginView(Internal) _createPlugin]
-+[WebBaseNetscapePluginView setCurrentPluginView:]
-_NPN_UserAgent
-_pluginViewForInstance
-+[WebBaseNetscapePluginView currentPluginView]
--[WebBaseNetscapePluginView(WebNPPCallbacks) userAgent]
--[WebView userAgentForURL:]
-_NPN_GetValue
--[WebBaseNetscapePluginView(WebNPPCallbacks) getVariable:value:]
-_NPN_SetValue
--[WebBaseNetscapePluginView(WebNPPCallbacks) setVariable:value:]
-_NPN_InvalidateRect
--[WebBaseNetscapePluginView(WebNPPCallbacks) invalidateRect:]
--[WebBaseNetscapePluginView updateAndSetWindow]
--[WebBaseNetscapePluginView saveAndSetNewPortState]
--[WebBaseNetscapePluginView saveAndSetNewPortStateForUpdate:]
--[WebBaseNetscapePluginView currentWindow]
--[WebBaseNetscapePluginView superviewsHaveSuperviews]
--[WebBaseNetscapePluginView(WebNPPCallbacks) isOpaque]
-__ZN3WTF6VectorI6CGRectLm16EE6resizeEm
--[WebBaseNetscapePluginView setWindowIfNecessary]
--[WebBaseNetscapePluginView isNewWindowEqualToOldWindow]
--[WebBaseNetscapePluginView willCallPlugInFunction]
--[WebBaseNetscapePluginView didCallPlugInFunction]
--[WebBaseNetscapePluginView restorePortState:]
--[WebBaseNetscapePluginView addWindowObservers]
--[WebBaseNetscapePluginView sendActivateEvent:]
--[WebBaseNetscapePluginView getCarbonEvent:]
-+[WebBaseNetscapePluginView getCarbonEvent:]
--[WebBaseNetscapePluginView sendEvent:]
-_WKSetNSURLConnectionDefersCallbacks
-__ZN20WebFrameLoaderClient16setDefersLoadingEb
-__ZNK20WebFrameLoaderClient34deliverArchivedResourcesAfterDelayEv
--[WebBaseNetscapePluginView restartNullEvents]
--[WebBaseNetscapePluginView didStart]
--[NSURL(WebNSURLExtras) _web_isEmpty]
--[NSMutableURLRequest(WebNSURLRequestExtras) _web_setHTTPReferrer:]
--[WebBaseNetscapePluginView(WebNPPCallbacks) loadRequest:inTarget:withNotifyData:sendNotification:]
--[NSURL(WebNSURLExtras) _webkit_scriptIfJavaScriptURL]
-+[WebBaseNetscapePluginStream initialize]
-+[WebNetscapePluginStream initialize]
--[WebNetscapePluginStream initWithRequest:plugin:notifyData:sendNotification:]
--[WebBaseNetscapePluginStream initWithRequestURL:plugin:notifyData:sendNotification:]
--[WebBaseNetscapePluginStream setRequestURL:]
--[WebBaseNetscapePluginStream setPlugin:]
--[WebBaseNetscapePluginView pluginPackage]
-__Z7streamsv
-__ZN3WTF7HashMapIP9_NPStreamP4_NPPNS_7PtrHashIS2_EENS_10HashTraitsIS2_EENS7_IS4_EEE3addERKS2_RKS4_
-__ZN3WTF9HashTableIiSt4pairIiiENS_18PairFirstExtractorIS2_EENS_7IntHashIiEENS_14PairHashTraitsINS_10HashTraitsIiEES9_EES9_E3addIPN7WebCore11HistoryItemEP14WebHistoryItemNS_17HashMapTranslatorILb1ES1_ISF_SH_ENS_18PairBaseHashTraitsINS8_ISF_EENS8_ISH_EEEESA_NS_7PtrHashISF_EEEEEES1_INS_17HashTableIteratorIiS2_S4_S6_SA_S9_EEbERKT_RKT0_
--[WebNetscapePluginStream start]
--[WebBaseNetscapePluginView stopNullEvents]
+[WebPluginController isPlugInView:]
--[WebBaseNetscapePluginView renewGState]
--[WebBaseNetscapePluginView(Internal) _viewHasMoved]
--[WebFrameBridge firstResponder]
+-[WebFrame parentFrame]
+-[WebClipView additionalClip]
+-[WebHTMLView willRemoveSubview:]
__ZN15WebEditorClient19setInputMethodStateEb
+__ZN15WebEditorClient25shouldChangeSelectedRangeEPN7WebCore5RangeES2_NS0_9EAffinityEb
+__Z3kitPN7WebCore5RangeE
+-[WebView(WebViewEditing) _shouldChangeSelectedDOMRange:toDOMRange:affinity:stillSelecting:]
+-[WebView(WebPrivate) _editingDelegateForwarder]
++[WebDefaultEditingDelegate sharedEditingDelegate]
+-[WebDefaultEditingDelegate webView:shouldChangeSelectedDOMRange:toDOMRange:affinity:stillSelecting:]
__ZN15WebEditorClient32isContinuousSpellCheckingEnabledEv
-[WebView(WebViewEditing) isContinuousSpellCheckingEnabled]
-[WebView(WebFileInternal) _continuousCheckingAllowed]
@@ -691,107 +817,55 @@ __ZN15WebEditorClient24isGrammarCheckingEnabledEv
__ZN15WebEditorClient25respondToChangedSelectionEv
-[WebView selectedFrame]
-[WebView(WebFileInternal) _focusedFrame]
-__Z19containingFrameViewP6NSView
+__ZL19containingFrameViewP6NSView
-[WebHTMLView(WebInternal) _selectionChanged]
-[WebHTMLView(WebNSTextInputSupport) _updateSelectionForInputManager]
--[WebClipView additionalClip]
--[WebBaseNetscapePluginView drawRect:]
--[WebBaseNetscapePluginView sendUpdateEvent]
-__ZN3WTF6VectorI6CGRectLm16EE6shrinkEm
-__ZN20WebFrameLoaderClient22dispatchDidReceiveIconEv
--[WebBaseNetscapePluginView sendNullEvent]
-__ZN35WebNetscapePlugInStreamLoaderClient18didReceiveResponseEPN7WebCore26NetscapePlugInStreamLoaderERKNS0_16ResourceResponseE
--[WebBaseNetscapePluginStream startStreamWithResponse:]
-_WKGetNSURLResponseLastModifiedDate
--[WebBaseNetscapePluginStream startStreamResponseURL:expectedContentLength:lastModifiedDate:MIMEType:headers:]
--[WebBaseNetscapePluginStream setResponseURL:]
--[WebBaseNetscapePluginStream setMIMEType:]
--[NSURL(WebNSURLExtras) _web_URLCString]
-__ZN35WebNetscapePlugInStreamLoaderClient14didReceiveDataEPN7WebCore26NetscapePlugInStreamLoaderEPKci
--[WebBaseNetscapePluginStream receivedData:]
--[WebBaseNetscapePluginStream _deliverData]
-__ZN35WebNetscapePlugInStreamLoaderClient16didFinishLoadingEPN7WebCore26NetscapePlugInStreamLoaderE
--[WebBaseNetscapePluginStream finishedLoading]
--[WebBaseNetscapePluginStream _destroyStreamWithReason:]
--[WebBaseNetscapePluginStream _destroyStream]
--[WebBaseNetscapePluginView disconnectStream:]
--[WebNetscapePluginStream dealloc]
-__ZN35WebNetscapePlugInStreamLoaderClientD1Ev
--[WebBaseNetscapePluginStream dealloc]
-__ZN20WebFrameLoaderClient14cancelledErrorERKN7WebCore15ResourceRequestE
-+[NSError(WebKitExtras) _webKitErrorWithDomain:code:URL:]
-+[NSError(WebKitExtras) _registerWebKitErrors]
-_registerErrors
-+[NSError(WebKitExtras) _webkit_addErrorsWithCodesAndDescriptions:inDomain:]
-+[NSError(WebKitExtras) _webkit_errorWithDomain:code:URL:]
--[NSError(WebKitExtras) _webkit_initWithDomain:code:URL:]
-__ZN20WebFrameLoaderClient20setMainDocumentErrorEPN7WebCore14DocumentLoaderERKNS0_13ResourceErrorE
--[WebDataSource(WebInternal) _setMainDocumentError:]
-__ZN20WebFrameLoaderClient24cancelPendingArchiveLoadEPN7WebCore14ResourceLoaderE
-__ZN15WebEditorClient22textFieldDidEndEditingEPN7WebCore7ElementE
-__Z16CallFormDelegateP7WebViewP13objc_selectorP11objc_objectS4_
--[WebView hostWindow]
--[WebBaseNetscapePluginView stop]
--[WebBaseNetscapePluginView(Internal) _destroyPlugin]
--[WebNetscapePluginPackage close]
--[WebBaseNetscapePluginView removeKeyEventHandler]
--[WebHTMLView willRemoveSubview:]
--[WebBaseNetscapePluginView dealloc]
--[WebBaseNetscapePluginView fini]
--[WebHTMLView dealloc]
--[WebHTMLView(WebPrivate) close]
--[WebHTMLView(WebPrivate) _clearLastHitViewIfSelf]
--[WebPluginController destroyAllPlugins]
--[WebPluginController _cancelOutstandingChecks]
--[WebHTMLViewPrivate clear]
--[WebPluginController dealloc]
--[WebHTMLRepresentation dealloc]
--[WebHTMLRepresentationPrivate dealloc]
--[WebHTMLViewPrivate dealloc]
-__ZN20WebFrameLoaderClient11createFrameERKN7WebCore4KURLERKNS0_6StringEPNS0_21HTMLFrameOwnerElementES6_bii
--[WebFrameBridge createChildFrameNamed:withURL:referrer:ownerElement:allowsScrolling:marginWidth:marginHeight:]
--[WebFrameView setAllowsScrolling:]
--[WebDynamicScrollBarsView setAllowsScrolling:]
--[WebFrameView(WebInternal) _setMarginWidth:]
--[WebFrameView(WebInternal) _setMarginHeight:]
--[WebFrameBridge initSubframeWithOwnerElement:frameName:frameView:]
--[WebFrame(WebInternal) _addChild:]
--[WebFrame(WebInternal) _loadURL:referrer:intoChild:]
--[WebFrame name]
--[WebDataSource(WebInternal) _popSubframeArchiveWithName:]
--[WebFrame parentFrame]
-_WKGetFontInLanguageForRange
-_WKDrawFocusRing
-__Z41_updateFocusedAndActiveStateTimerCallbackP16__CFRunLoopTimerPv
--[WebHTMLView(WebHTMLViewFileInternal) _frameView]
--[WebHTMLView keyDown:]
+__ZN15WebEditorClient33isSelectTrailingWhitespaceEnabledEv
+-[WebView(WebPrivate) isSelectTrailingWhitespaceEnabled]
++[WebHTMLView(WebPrivate) _postFlagsChangedEvent:]
+-[WebHTMLView flagsChanged:]
__ZN15WebEditorClient24handleInputMethodKeydownEPN7WebCore13KeyboardEventE
-[WebHTMLView(WebInternal) _interceptEditingKeyEvent:shouldSaveCommand:]
--[WebHTMLView(WebNSTextInputSupport) hasMarkedText]
--[WebHTMLView(WebNSTextInputSupport) insertText:]
-__ZN3WTF6VectorIN7WebCore15KeypressCommandELm0EE14expandCapacityEmPKS2_
-__ZN3WTF6VectorIN7WebCore15KeypressCommandELm0EE14expandCapacityEm
-__ZN3WTF6VectorIN7WebCore15KeypressCommandELm0EE15reserveCapacityEm
__ZN15WebEditorClient27doTextFieldCommandFromEventEPN7WebCore7ElementEPNS0_13KeyboardEventE
__ZN15WebEditorClient19handleKeyboardEventEPN7WebCore13KeyboardEventE
+-[WebHTMLView validateUserInterfaceItem:]
+-[WebHTMLView validateUserInterfaceItemWithoutDelegate:]
-[WebHTMLView coreCommandBySelector:]
-__ZN15WebEditorClient16shouldInsertTextEN7WebCore6StringEPNS0_5RangeENS0_18EditorInsertActionE
--[WebView(WebPrivate) _editingDelegateForwarder]
-+[WebDefaultEditingDelegate sharedEditingDelegate]
+__ZL3kitN7WebCore8TriStateE
+__Z30CallUIDelegateReturningBooleanaP7WebViewP13objc_selectorP11objc_objecta
+__ZL28CallDelegateReturningBooleanaP7WebViewP11objc_objectP13objc_selectorS2_a
+-[WebHTMLView performKeyEquivalent:]
+-[WebHTMLView _handleStyleKeyEquivalent:]
+-[WebPreferences(WebPrivate) respectStandardStyleKeyEquivalents]
+-[WebHTMLView(WebNSTextInputSupport) doCommandBySelector:]
+-[WebHTMLView copy:]
+-[WebHTMLView executeCoreCommandBySelector:]
+-[WebHTMLView callDelegateDoCommandBySelectorIfNeeded:]
+-[WebDefaultEditingDelegate webView:doCommandBySelector:]
+__ZN15WebEditorClient24smartInsertDeleteEnabledEv
+-[WebView(WebViewEditing) smartInsertDeleteEnabled]
+-[WebView textSizeMultiplier]
+__ZN15WebEditorClient33didSetSelectionTypesForPasteboardEv
+-[WebDefaultEditingDelegate webView:didSetSelectionTypesForPasteboard:]
+__ZN15WebEditorClient29didWriteSelectionToPasteboardEv
+-[WebDefaultEditingDelegate webView:didWriteSelectionToPasteboard:]
+-[WebHTMLView keyUp:]
+__ZN15WebEditorClient22textFieldDidEndEditingEPN7WebCore7ElementE
+__Z16CallFormDelegateP7WebViewP13objc_selectorP11objc_objectS4_
+WKDrawFocusRing
+-[WebHTMLView(WebInternal) paste:]
+__ZN15WebEditorClient16shouldInsertTextERKN7WebCore6StringEPNS0_5RangeENS0_18EditorInsertActionE
__Z3kitN7WebCore18EditorInsertActionE
-__Z3kitPN7WebCore5RangeE
-[WebDefaultEditingDelegate webView:shouldInsertText:replacingDOMRange:givenAction:]
__ZN15WebEditorClient24textFieldDidBeginEditingEPN7WebCore7ElementE
-[WebHTMLRepresentation formForElement:]
+__ZL26inputElementFromDOMElementP10DOMElement
+__Z3kitPN7WebCore11HTMLElementE
-[WebHTMLRepresentation controlsInForm:]
+__ZL25formElementFromDOMElementP10DOMElement
-[WebHTMLRepresentation elementIsPassword:]
-[WebHTMLRepresentation elementDoesAutoComplete:]
__ZN15WebEditorClient24textDidChangeInTextFieldEPN7WebCore7ElementE
--[DOMDocument(WebDOMDocumentOperations) webFrame]
--[DOMNode(WebDOMNodeOperations) _bridge]
-__ZN15WebEditorClient25shouldChangeSelectedRangeEPN7WebCore5RangeES2_NS0_9EAffinityEb
--[WebView(WebViewEditing) _shouldChangeSelectedDOMRange:toDOMRange:affinity:stillSelecting:]
--[WebDefaultEditingDelegate webView:shouldChangeSelectedDOMRange:toDOMRange:affinity:stillSelecting:]
__ZN15WebEditorClient22registerCommandForUndoEN3WTF10PassRefPtrIN7WebCore11EditCommandEEE
__ZN15WebEditorClient28registerCommandForUndoOrRedoEN3WTF10PassRefPtrIN7WebCore11EditCommandEEEb
-[WebView(WebViewEditing) undoManager]
@@ -799,341 +873,542 @@ __ZN15WebEditorClient28registerCommandForUndoOrRedoEN3WTF10PassRefPtrIN7WebCore1
+[WebEditCommand commandWithEditCommand:]
-[WebEditCommand initWithEditCommand:]
__ZN15WebEditorClient24respondToChangedContentsEv
--[WebHTMLView keyUp:]
-__ZN15WebEditorClient21checkSpellingOfStringEPKtiPiS2_
-__ZN15WebEditorClient23spellCheckerDocumentTagEv
--[WebView(WebViewEditing) spellCheckerDocumentTag]
+__ZNK15WebChromeClient18scrollRectIntoViewERKN7WebCore7IntRectEPKNS0_10ScrollViewE
-[WebHTMLRepresentation matchLabels:againstElement:]
+__Z4coreP10DOMElement
-[WebHTMLRepresentation searchForLabels:beforeElement:]
--[WebHTMLView(WebNSTextInputSupport) doCommandBySelector:]
--[WebDefaultEditingDelegate webView:doCommandBySelector:]
-__ZN15WebEditorClient17shouldDeleteRangeEPN7WebCore5RangeE
--[WebDefaultEditingDelegate webView:shouldDeleteDOMRange:]
-__ZN15WebEditorClient28textWillBeDeletedInTextFieldEPN7WebCore7ElementE
+-[WebHTMLView keyDown:]
+__ZN3WTF6VectorIN7WebCore15KeypressCommandELm0EE14expandCapacityEmPKS2_
+__ZN3WTF6VectorIN7WebCore15KeypressCommandELm0EE14expandCapacityEm
+__ZN3WTF6VectorIN7WebCore15KeypressCommandELm0EE15reserveCapacityEm
__Z32CallFormDelegateReturningBooleanaP7WebViewP13objc_selectorP11objc_objectS2_S4_
--[WebHistoryItem title]
-+[WebHTMLView(WebPrivate) _postFlagsChangedEvent:]
--[WebHTMLView flagsChanged:]
--[WebHistory saveToURL:error:]
--[WebHistoryPrivate saveToURL:error:]
--[WebHistoryPrivate _saveHistoryGuts:URL:error:]
--[WebHistoryPrivate arrayRepresentation]
-__ZN3WTF6VectorIiLm0EE15reserveCapacityEm
-__ZSt16__introsort_loopIPiiEvT_S1_T0_
-__ZSt22__final_insertion_sortIPiEvT_S1_
-__ZSt16__insertion_sortIPiEvT_S1_
--[WebHistoryItem(WebPrivate) dictionaryRepresentation]
-__ZN3WTF6VectorIiLm0EE6shrinkEm
-_WKSetPatternPhaseInUserSpace
--[WebElementDictionary _domNode]
-__Z3kitPN7WebCore4NodeE
+__ZN15WebEditorClient21checkSpellingOfStringEPKtiPiS2_
+__ZN15WebEditorClient23spellCheckerDocumentTagEv
+-[WebView(WebViewEditing) spellCheckerDocumentTag]
+-[NSView(WebExtras) _web_dragShouldBeginFromMouseDown:withExpiration:]
+-[NSView(WebExtras) _web_dragShouldBeginFromMouseDown:withExpiration:xHysteresis:yHysteresis:]
+-[WebEditCommand dealloc]
+__ZN26WebCachedFramePlatformData5clearEv
+-[WebHTMLView(WebInternal) closeIfNotCurrentView]
+-[WebHTMLView(WebPrivate) removeTrackingRect:]
+__ZN26WebCachedFramePlatformDataD1Ev
+-[NSString(WebNSURLExtras) _webkit_scriptIfJavaScriptURL]
+-[NSString(WebNSURLExtras) _webkit_isJavaScriptURL]
+-[NSString(WebNSURLExtras) _web_isUserVisibleURL]
+__ZNK15WebChromeClient17windowResizerRectEv
+-[WebViewFactory inputElementAltText]
++[WebStringTruncator centerTruncateString:toWidth:]
+__ZL15defaultMenuFontv
+-[WebHTMLView(WebHTMLViewFileInternal) _frameView]
__ZN20WebFrameLoaderClient22dispatchWillSubmitFormEMN7WebCore11FrameLoaderEFvNS0_12PolicyActionEEN3WTF10PassRefPtrINS0_9FormStateEEE
-[WebView(WebPrivate) _formDelegate]
-__Z3kitPN7WebCore11HTMLElementE
__Z16CallFormDelegateP7WebViewP13objc_selectorP11objc_objectS4_S4_S4_S4_
--[WebHTMLRepresentation elementWithName:inForm:]
-[WebFramePolicyListener continue]
-__ZN15WebChromeClient5focusEv
--[WebEditCommand dealloc]
--[WebFrame(WebPrivate) _isDescendantOfFrame:]
--[WebHTMLView(WebDocumentInternalProtocols) elementAtPoint:allowShadowContent:]
--[WebElementDictionary _webFrame]
--[WebElementDictionary _targetWebFrame]
--[NSURL(WebNSURLExtras) _webkit_URLByRemovingFragment]
--[WebHTMLView shouldDelayWindowOrderingForEvent:]
--[WebHTMLView(WebHTMLViewFileInternal) _hitViewForEvent:]
--[WebHTMLView _isSelectionEvent:]
--[WebElementDictionary _isSelected]
--[WebHTMLView mouseDown:]
--[WebHTMLView(WebHTMLViewFileInternal) _setMouseDownEvent:]
--[WebHTMLView mouseUp:]
+-[WebHTMLView menuForEvent:]
+-[WebViewFactory contextMenuItemTagOpenLink]
+-[WebViewFactory contextMenuItemTagOpenLinkInNewWindow]
+-[WebViewFactory contextMenuItemTagDownloadLinkToDisk]
+-[WebViewFactory contextMenuItemTagCopyLinkToClipboard]
+-[WebViewFactory contextMenuItemTagOpenImageInNewWindow]
+-[WebViewFactory contextMenuItemTagDownloadImageToDisk]
+-[WebViewFactory contextMenuItemTagCopyImageToClipboard]
+-[WebViewFactory contextMenuItemTagSearchInSpotlight]
+-[WebViewFactory contextMenuItemTagLookUpInDictionary]
+-[WebViewFactory contextMenuItemTagSearchWeb]
+-[WebViewFactory contextMenuItemTagCopy]
+-[WebViewFactory contextMenuItemTagGoBack]
+-[WebViewFactory contextMenuItemTagGoForward]
+-[WebViewFactory contextMenuItemTagStop]
+-[WebViewFactory contextMenuItemTagReload]
+-[WebViewFactory contextMenuItemTagOpenFrameInNewWindow]
+-[WebViewFactory contextMenuItemTagNoGuessesFound]
+-[WebViewFactory contextMenuItemTagIgnoreSpelling]
+-[WebViewFactory contextMenuItemTagLearnSpelling]
+-[WebViewFactory contextMenuItemTagIgnoreGrammar]
+-[WebViewFactory contextMenuItemTagCut]
+-[WebViewFactory contextMenuItemTagPaste]
+__ZN20WebContextMenuClient29getCustomMenuFromDefaultItemsEPN7WebCore11ContextMenuE
+__ZL19isPreVersion3Clientv
+__ZL28isPreInspectElementTagClientv
+__Z14CallUIDelegateP7WebViewP13objc_selectorP11objc_objectS4_
+__ZL12CallDelegateP7WebViewP11objc_objectP13objc_selectorS2_S2_
+-[WebDataSource(WebPrivate) _fileWrapperForURL:]
+-[WebDataSource subresourceForURL:]
+-[WebView(WebPrivate) _cachedResponseForURL:]
+-[WebView userAgentForURL:]
+-[NSMutableURLRequest(WebNSURLRequestExtras) _web_setHTTPUserAgent:]
+-[WebElementDictionary _absoluteImageURL]
+-[WebHTMLView accessibilityAttributeValue:]
+-[WebFrame(WebInternal) _accessibilityTree]
+-[WebView(WebIBActions) validateUserInterfaceItem:]
+-[WebView(WebIBActions) validateUserInterfaceItemWithoutDelegate:]
+__ZN13WebDragClient28dragSourceActionMaskForPointERKN7WebCore8IntPointE
+-[WebDefaultUIDelegate webView:dragSourceActionMaskForPoint:]
+__ZN15WebEditorClient17userVisibleStringEP5NSURL
+-[WebViewFactory unregisterUniqueIdForUIElement:]
+WKUnregisterUniqueIdForElement
+-[WebFrame childFrames]
+-[WebHistoryItem alternateTitle]
+-[WebHistoryItem setAlternateTitle:]
+-[WebView(WebPendingPublic) canResetPageZoom]
+-[WebView _canResetZoom:]
+-[WebView _zoomMultiplier:]
+-[WebView(WebIBActions) canMakeTextStandardSize]
+-[WebView(WebPendingPublic) canZoomPageIn]
+-[WebView _canZoomIn:]
+-[WebView(WebPendingPublic) canZoomPageOut]
+-[WebView _canZoomOut:]
+-[WebHTMLRepresentation canProvideDocumentSource]
+-[WebFrame(WebInternal) _canProvideDocumentSource]
+__ZN20WebFrameLoaderClient17objectContentTypeERKN7WebCore4KURLERKNS0_6StringE
+WKSetNSURLRequestShouldContentSniff
+-[WebIconDatabase(WebInternal) _applicationWillTerminate:]
++[WebView _applicationWillTerminate]
+-[WebView(WebPrivate) _closeWithFastTeardown]
++[WebPluginDatabase closeSharedDatabase]
+-[WebPluginDatabase close]
+-[WebPluginDatabase(Internal) _removePlugin:]
++[WebView(WebPrivate) _unregisterViewClassAndRepresentationClassForMIMEType:]
+-[WebBasePluginPackage wasRemovedFromPluginDatabase:]
+-[WebNetscapePluginPackage wasRemovedFromPluginDatabase:]
+-[NSString(WebKitExtras) _web_drawAtPoint:font:textColor:]
+-[WebView supportsTextEncoding]
+-[WebIconDatabase(WebInternal) _iconsBySplittingRepresentationsOfIcon:]
+-[WebIconDatabase(WebInternal) _iconFromDictionary:forSize:cache:]
+-[WebHTMLView updateCell:]
+-[WebHTMLView resignFirstResponder]
+-[WebHTMLView maintainsInactiveSelection]
+-[WebView(WebViewEditing) maintainsInactiveSelection]
+-[WebHTMLView(WebDocumentPrivateProtocols) deselectAll]
+-[WebHTMLView clearFocus]
++[WebCoreStatistics setShouldPrintExceptions:]
++[WebKitStatistics webViewCount]
++[WebKitStatistics frameCount]
++[WebKitStatistics dataSourceCount]
++[WebKitStatistics viewCount]
++[WebKitStatistics HTMLRepresentationCount]
++[WebKitStatistics bridgeCount]
++[WebCoreStatistics javaScriptProtectedGlobalObjectsCount]
+WKDrawBezeledTextArea
__ZN20WebFrameLoaderClient33dispatchWillPerformClientRedirectERKN7WebCore4KURLEdd
__Z21CallFrameLoadDelegatePFP11objc_objectS0_P13objc_selectorzEP7WebViewS2_S0_dS0_S0_
-__Z12CallDelegatePFP11objc_objectS0_P13objc_selectorzEP7WebViewS0_S2_S0_dS0_S0_
+__ZL12CallDelegatePFP11objc_objectS0_P13objc_selectorzEP7WebViewS0_S2_S0_dS0_S0_
__ZN20WebFrameLoaderClient31dispatchDidCancelClientRedirectEv
-+[WebStringTruncator centerTruncateString:toWidth:]
-__Z15defaultMenuFontv
--[WebViewFactory pluginSupportsMIMEType:]
--[WebHTMLView(WebPrivate) addTrackingRect:owner:userData:assumeInside:]
--[WebHTMLView(WebPrivate) _sendToolTipMouseEntered]
--[WebHTMLView(WebPrivate) _sendToolTipMouseExited]
--[WebHTMLView(WebPrivate) removeTrackingRect:]
--[WebHTMLView mouseDragged:]
--[WebViewFactory bridgeForView:]
--[WebBaseNetscapePluginView createPluginScriptableObject]
--[WebBaseNetscapePluginView isStarted]
-_NPN_MemFree
--[WebBaseNetscapePluginView mouseEntered:]
--[WebBaseNetscapePluginView getCarbonEvent:withEvent:]
-_WKConvertNSEventToCarbonEvent
--[WebBaseNetscapePluginView modifiersForEvent:]
-_NPN_GetURLNotify
--[WebBaseNetscapePluginView(WebNPPCallbacks) getURLNotify:target:notifyData:]
--[WebBaseNetscapePluginView(WebNPPCallbacks) requestWithURLCString:]
--[NSString(WebKitExtras) _web_stringByStrippingReturnCharacters]
--[WebBaseNetscapePluginView mouseExited:]
--[WebHTMLView scrollWheel:]
-_WKGetWheelEventDeltas
--[WebClipView scrollWheel:]
--[WebDynamicScrollBarsView scrollWheel:]
--[WebDynamicScrollBarsView allowsVerticalScrolling]
--[WebHTMLView performKeyEquivalent:]
--[WebHTMLView _handleStyleKeyEquivalent:]
--[WebPreferences(WebPrivate) respectStandardStyleKeyEquivalents]
--[WebBaseNetscapePluginView acceptsFirstResponder]
--[WebFrameBridge makeFirstResponder:]
--[WebView(WebPrivate) _pushPerformingProgrammaticFocus]
--[WebBaseNetscapePluginView becomeFirstResponder]
--[WebBaseNetscapePluginView installKeyEventHandler]
--[WebView(WebPrivate) _popPerformingProgrammaticFocus]
--[WebBaseNetscapePluginView mouseDown:]
--[WebBaseNetscapePluginView mouseUp:]
--[WebBaseNetscapePluginView mouseDragged:]
--[WebBaseNetscapePluginView resignFirstResponder]
--[WebHTMLView(WebPrivate) _removeTrackingRects:count:]
--[WebHTMLView(WebPrivate) _addTrackingRect:owner:userData:assumeInside:useTrackingNum:]
-__ZN20WebFrameLoaderClient19detachedFromParent2Ev
-__ZN20WebFrameLoaderClient19detachedFromParent3Ev
--[WebFrameBridge close]
-__ZN20WebFrameLoaderClient19detachedFromParent4Ev
--[WebFrameBridge dealloc]
--[WebFrameBridge fini]
-__ZN20WebFrameLoaderClient20frameLoaderDestroyedEv
--[WebFrame dealloc]
--[WebFramePrivate dealloc]
--[WebFrameView dealloc]
--[WebFrameViewPrivate dealloc]
--[WebNetscapePluginStream stop]
--[WebBaseNetscapePluginStream cancelLoadAndDestroyStreamWithError:]
--[WebNetscapePluginStream cancelLoadWithError:]
-__ZN35WebNetscapePlugInStreamLoaderClient7didFailEPN7WebCore26NetscapePlugInStreamLoaderERKNS0_13ResourceErrorE
--[WebBaseNetscapePluginStream destroyStreamWithError:]
-+[WebBaseNetscapePluginStream reasonForError:]
-_NPN_GetURL
--[WebBaseNetscapePluginView(WebNPPCallbacks) getURL:target:]
--[NSString(WebNSURLExtras) _webkit_stringByReplacingValidPercentEscapes]
--[WebFrame findFrameNamed:]
--[WebPluginRequest initWithRequest:frameName:notifyData:sendNotification:didStartFromUserGesture:]
--[WebBaseNetscapePluginView(WebNPPCallbacks) loadPluginRequest:]
--[WebPluginRequest request]
--[WebPluginRequest frameName]
--[WebBaseNetscapePluginView(WebNPPCallbacks) evaluateJavaScriptPluginRequest:]
--[WebPluginRequest isCurrentEventUserGesture]
--[WebPluginRequest sendNotification]
--[WebPluginRequest dealloc]
-[WebViewFactory defaultLanguageCode]
--[WebDynamicScrollBarsView autoforwardsScrollWheelEvents]
-__ZN20WebFrameLoaderClient14shouldFallBackERKN7WebCore13ResourceErrorE
-__ZN20WebFrameLoaderClient30dispatchDidFailProvisionalLoadERKN7WebCore13ResourceErrorE
--[WebView(WebPrivate) _didFailProvisionalLoadWithError:forFrame:]
--[WebHistoryItem alternateTitle]
--[WebHistoryItem setAlternateTitle:]
--[WebHTMLView(WebPrivate) view:stringForToolTip:point:userData:]
--[WebHTMLView windowDidResignKey:]
--[WebHTMLView removeMouseMovedObserver]
--[WebBaseNetscapePluginView windowResignedKey:]
--[WebBaseNetscapePluginView windowBecameKey:]
--[WebView(WebIBActions) goBack:]
--[WebView goBack]
-__ZNK20WebFrameLoaderClient21shouldGoToHistoryItemEPN7WebCore11HistoryItemE
--[WebHistoryItem(WebPrivate) URL]
-__ZN20WebFrameLoaderClient16restoreViewStateEv
--[WebWindowWatcher windowWillClose:]
--[WebHTMLView needsPanelToBecomeKey]
--[WebHTMLView acceptsFirstMouse:]
-__ZN20WebFrameLoaderClient50dispatchDidReceiveServerRedirectForProvisionalLoadEv
+-[WebViewFactory pluginsInfo]
++[WebPluginDatabase sharedDatabase]
+-[WebPluginDatabase init]
++[WebPluginDatabase(Internal) _defaultPlugInPaths]
+-[WebPluginDatabase setPlugInPaths:]
+-[WebPluginDatabase refresh]
+-[WebPluginDatabase(Internal) _scanForNewPlugins]
+-[WebPluginDatabase(Internal) _plugInPaths]
++[WebBasePluginPackage initialize]
++[WebBasePluginPackage pluginWithPath:]
+-[WebPluginPackage initWithPath:]
+-[WebBasePluginPackage initWithPath:]
+-[WebBasePluginPackage pathByResolvingSymlinksAndAliasesInPath:]
+-[WebBasePluginPackage dealloc]
++[WebNetscapePluginPackage initialize]
+WebLMGetCurApRefNum
+WebLMSetCurApRefNum
+-[WebNetscapePluginPackage initWithPath:]
+-[WebNetscapePluginPackage _initWithPath:]
+-[WebBasePluginPackage isNativeLibraryData:]
+__ZN3WTF6VectorIhLm512EE6shrinkEm
+-[WebBasePluginPackage getPluginInfoFromPLists]
+-[WebBasePluginPackage getPluginInfoFromBundleAndMIMEDictionary:]
+-[NSArray(WebPluginExtensions) _web_lowercaseStrings]
+-[WebBasePluginPackage setMIMEToExtensionsDictionary:]
+-[WebBasePluginPackage setMIMEToDescriptionDictionary:]
+-[WebBasePluginPackage filename]
+-[WebBasePluginPackage setName:]
+-[WebBasePluginPackage setPluginDescription:]
__ZN15WebChromeClient19addMessageToConsoleERKN7WebCore6StringEjS3_
-__ZN13WebDragClient28dragSourceActionMaskForPointERKN7WebCore8IntPointE
--[WebDefaultUIDelegate webView:dragSourceActionMaskForPoint:]
--[WebFrameBridge willPopupMenu:]
-_WKPopupMenu
--[WebHTMLView _accessibilityParentForSubview:]
--[WebHTMLView accessibilityAttributeValue:]
--[WebClipView _focusRingVisibleRect]
--[WebFrameBridge window]
--[WebViewFactory accessibilityHandleFocusChanged]
-_WKAccessibilityHandleFocusChanged
--[WebViewFactory unregisterUniqueIdForUIElement:]
-_WKUnregisterUniqueIdForElement
-__ZN25WebCachedPagePlatformData5clearEv
--[WebHTMLView(WebInternal) closeIfNotCurrentView]
-_WKGetFontInLanguageForCharacter
-__ZN20WebFrameLoaderClient35dispatchDidChangeLocationWithinPageEv
-__ZN20WebFrameLoaderClient13didFinishLoadEv
--[WebView(WebPendingPublic) shouldClose]
--[WebView _windowWillClose:]
--[WebView shouldCloseWithWindow]
--[WebHTMLView windowWillClose:]
--[WebView(WebPrivate) _isClosed]
--[WebView close]
--[WebFrame childFrames]
--[WebView(WebPrivate) _clearUndoRedoOperations]
--[WebView(WebPrivate) _close]
--[WebView(AllWebViews) _removeFromAllWebViewsSet]
--[WebView(WebPendingPublic) setScriptDebugDelegate:]
--[WebView(WebPrivate) _detachScriptDebuggerFromAllFrames]
--[WebView removeDragCaret]
-__ZN15WebEditorClient13pageDestroyedEv
-__ZN18WebInspectorClient18inspectorDestroyedEv
-__ZN20WebContextMenuClient20contextMenuDestroyedEv
-__ZN13WebDragClient23dragControllerDestroyedEv
-__ZN15WebChromeClient15chromeDestroyedEv
--[WebView preferencesIdentifier]
--[WebPreferences identifier]
-+[WebPreferences(WebPrivate) _removeReferenceForIdentifier:]
--[WebPreferences(WebPrivate) didRemoveFromWebView]
-+[WebView(WebFileInternal) _preferencesRemovedNotification:]
-+[WebView(WebFileInternal) _cacheModel]
-+[WebView(WebFileInternal) _maxCacheModelInAnyInstance]
--[WebView dealloc]
--[WebViewPrivate dealloc]
-__ZN20WebFrameLoaderClient38dispatchDidLoadResourceFromMemoryCacheEPN7WebCore14DocumentLoaderERKNS0_15ResourceRequestERKNS0_16ResourceResponseEi
-__Z24CallResourceLoadDelegatePFP11objc_objectS0_P13objc_selectorzEP7WebViewS2_S0_S0_S0_S0_
-__Z12CallDelegatePFP11objc_objectS0_P13objc_selectorzEP7WebViewS0_S2_S0_S0_S0_S0_
--[WebViewFactory inputElementAltText]
-__ZN20WebFrameLoaderClient35transitionToCommittedFromCachedPageEPN7WebCore10CachedPageE
-__ZN20WebFrameLoaderClient11forceLayoutEv
--[WebHTMLView setNeedsToApplyStyles:]
-_WKDrawBezeledTextArea
-__ZN15WebEditorClient23textDidChangeInTextAreaEPN7WebCore7ElementE
--[WebPreferences setJavaScriptCanOpenWindowsAutomatically:]
--[NSMutableDictionary(WebNSDictionaryExtras) _webkit_setBool:forKey:]
-__ZN20WebFrameLoaderClient28updateGlobalHistoryForReloadERKN7WebCore4KURLE
--[WebHistory setLastVisitedTimeInterval:forItem:]
--[WebHistoryPrivate setLastVisitedTimeInterval:forItem:]
--[WebDynamicScrollBarsView allowsHorizontalScrolling]
-__ZN15WebChromeClient10windowRectEv
-__ZN15WebChromeClient11scaleFactorEv
-__ZN15WebChromeClient11canRunModalEv
-__ZN20WebFrameLoaderClient19dispatchDidFailLoadERKN7WebCore13ResourceErrorE
--[WebView(WebPrivate) _didFailLoadWithError:forFrame:]
+__ZN20WebFrameLoaderClient22dispatchDidFirstLayoutEv
+__ZN15WebChromeClient7repaintERKN7WebCore7IntRectEbbb
+-[WebView(WebIBActions) stopLoading:]
+-[WebFrame stopLoading]
+__ZN15WebChromeClient24disableSuddenTerminationEv
+__ZN15WebChromeClient23enableSuddenTerminationEv
+-[WebHTMLView mouseDragged:]
+__ZN15WebChromeClient18formStateDidChangeEPKN7WebCore4NodeE
__ZN15WebChromeClient12createWindowEPN7WebCore5FrameERKNS0_16FrameLoadRequestERKNS0_14WindowFeaturesE
-__Z14CallUIDelegateP7WebViewP13objc_selectorP11objc_objectS4_
-__Z12CallDelegateP7WebViewP11objc_objectP13objc_selectorS2_S2_
--[WebBaseNetscapePluginView preferencesHaveChanged:]
__ZN15WebChromeClient18setToolbarsVisibleEb
--[WebView becomeFirstResponder]
--[WebFrameView acceptsFirstResponder]
__ZN15WebChromeClient19setStatusbarVisibleEb
__ZN15WebChromeClient20setScrollbarsVisibleEb
+-[WebFrameView setAllowsScrolling:]
__ZN15WebChromeClient17setMenubarVisibleEb
__ZN15WebChromeClient12setResizableEb
+__ZN15WebChromeClient10windowRectEv
__ZN15WebChromeClient8pageRectEv
__ZN15WebChromeClient13setWindowRectERKN7WebCore9FloatRectE
__ZN15WebChromeClient4showEv
--[WebFramePolicyListener invalidate]
-__ZN20WebFrameLoaderClient29interruptForPolicyChangeErrorERKN7WebCore15ResourceRequestE
--[WebFramePolicyListener ignore]
-+[NSObject(WebScripting) isKeyExcludedFromWebScript:]
--[WebIconDatabase iconURLForURL:]
--[WebHistoryItem(WebPrivate) RSSFeedReferrer]
--[WebView(WebIBActions) reload:]
--[WebFrame reload]
-__ZN15WebChromeClient7unfocusEv
--[WebDefaultUIDelegate webViewUnfocus:]
+__ZN15WebChromeClient18makeFirstResponderEP11NSResponder
+-[WebView(WebPrivate) _pushPerformingProgrammaticFocus]
+-[WebView(WebPrivate) _popPerformingProgrammaticFocus]
+-[WebPreferences setJavaScriptCanOpenWindowsAutomatically:]
+__ZL32applyHostNameFunctionToURLStringP8NSStringPFvS0_8_NSRangePvES2_
+__ZL29collectRangesThatNeedEncodingP8NSString8_NSRangePv
+__ZL28collectRangesThatNeedMappingP8NSString8_NSRangePva
+-[NSString(WebNSURLExtras) _web_hostNameNeedsEncodingWithRange:]
+-[WebView _pluginForMIMEType:]
+__ZN20WebFrameLoaderClient12createPluginERKN7WebCore7IntSizeEPNS0_7ElementERKNS0_4KURLERKN3WTF6VectorINS0_6StringELm0EEESE_RKSB_b
+__ZL23netscapePluginViewClassv
++[WebBaseNetscapePluginView initialize]
+WKSendUserChangeNotifications
++[WebNetscapePluginDocumentView initialize]
+-[WebBaseNetscapePluginView .cxx_construct]
+-[WebNetscapePluginDocumentView .cxx_construct]
+__Z3kitPN7WebCore7ElementE
+__ZL3kitRKN3WTF6VectorIN7WebCore6StringELm0EEE
+-[WebNetscapePluginDocumentView initWithFrame:pluginPackage:URL:baseURL:MIMEType:attributeKeys:attributeValues:loadManually:DOMElement:]
+-[WebBaseNetscapePluginView initWithFrame:pluginPackage:URL:baseURL:MIMEType:attributeKeys:attributeValues:loadManually:DOMElement:]
+-[WebNetscapePluginDocumentView setAttributeKeys:andValues:]
+-[WebNetscapePluginPackage load]
+-[WebNetscapePluginPackage _applyDjVuWorkaround]
+__ZNK7WebCore6Widget11isFrameViewEv
+-[WebBaseNetscapePluginView renewGState]
+__ZN7WebCore6Widget16setParentVisibleEb
+-[WebBaseNetscapePluginView viewWillMoveToSuperview:]
+-[WebBaseNetscapePluginView visibleRect]
+-[WebBaseNetscapePluginView isFlipped]
+-[WebBaseNetscapePluginView viewWillMoveToWindow:]
+-[WebBaseNetscapePluginView removeTrackingRect]
+-[WebBaseNetscapePluginView removeWindowObservers]
+-[WebBaseNetscapePluginView setHasFocus:]
+-[WebBaseNetscapePluginView viewDidMoveToWindow]
+-[WebBaseNetscapePluginView resetTrackingRect]
+-[WebBaseNetscapePluginView start]
+-[WebBaseNetscapePluginView webView]
+-[WebBaseNetscapePluginView webFrame]
+-[WebBaseNetscapePluginView dataSource]
+-[WebNetscapePluginDocumentView createPlugin]
+-[WebNetscapePluginPackage open]
+-[WebNetscapePluginDocumentView(Internal) _createPlugin]
++[WebNetscapePluginDocumentView setCurrentPluginView:]
+-[WebNetscapePluginPackage pluginFuncs]
+NPN_UserAgent
+__Z21pluginViewForInstanceP4_NPP
++[WebNetscapePluginDocumentView currentPluginView]
+-[WebNetscapePluginDocumentView(WebNPPCallbacks) userAgent]
+NPN_GetValue
+-[WebNetscapePluginDocumentView(WebNPPCallbacks) getVariable:value:]
+NPN_SetValue
+-[WebNetscapePluginDocumentView(WebNPPCallbacks) setVariable:value:]
+__ZN29WebNetscapePluginEventHandler6createEP29WebNetscapePluginDocumentView
+-[WebNetscapePluginDocumentView eventModel]
+__ZN35WebNetscapePluginEventHandlerCarbonC1EP29WebNetscapePluginDocumentView
+-[WebView addPluginInstanceView:]
+-[WebPluginDatabase addPluginInstanceView:]
+-[WebNetscapePluginDocumentView updateAndSetWindow]
+-[WebNetscapePluginDocumentView saveAndSetNewPortState]
+-[WebNetscapePluginDocumentView saveAndSetNewPortStateForUpdate:]
+-[WebBaseNetscapePluginView currentWindow]
+-[WebNetscapePluginDocumentView superviewsHaveSuperviews]
+__ZN35WebNetscapePluginEventHandlerCarbon14platformWindowEP8NSWindow
+-[WebNetscapePluginDocumentView(WebNPPCallbacks) isOpaque]
+__ZN3WTF6VectorI6CGRectLm16EE6resizeEm
+-[WebNetscapePluginDocumentView setWindowIfNecessary]
+-[WebNetscapePluginDocumentView isNewWindowEqualToOldWindow]
+-[WebNetscapePluginDocumentView willCallPlugInFunction]
+-[WebNetscapePluginDocumentView didCallPlugInFunction]
+-[WebNetscapePluginDocumentView restorePortState:]
+-[WebBaseNetscapePluginView addWindowObservers]
+-[WebBaseNetscapePluginView sendActivateEvent:]
+-[WebNetscapePluginDocumentView windowFocusChanged:]
+__ZN35WebNetscapePluginEventHandlerCarbon18windowFocusChangedEb
+__ZL14getCarbonEventP11EventRecord
+__ZN35WebNetscapePluginEventHandlerCarbon9sendEventEP11EventRecord
+-[WebNetscapePluginDocumentView sendEvent:isDrawRect:]
+-[WebBaseNetscapePluginView restartTimers]
+-[WebNetscapePluginDocumentView stopTimers]
+-[WebBaseNetscapePluginView stopTimers]
+__ZN35WebNetscapePluginEventHandlerCarbon10stopTimersEv
+-[WebNetscapePluginDocumentView startTimers]
+-[WebBaseNetscapePluginView startTimers]
+__ZN35WebNetscapePluginEventHandlerCarbon11startTimersEb
+-[WebNetscapePluginDocumentView loadStream]
+-[NSURL(WebNSURLExtras) _web_isEmpty]
+-[NSMutableURLRequest(WebNSURLRequestExtras) _web_setHTTPReferrer:]
+-[WebNetscapePluginDocumentView(WebNPPCallbacks) loadRequest:inTarget:withNotifyData:sendNotification:]
+-[NSURL(WebNSURLExtras) _webkit_scriptIfJavaScriptURL]
+__ZN23WebNetscapePluginStreamC1EP12NSURLRequestP4_NPPbPv
+__ZN23WebNetscapePluginStream9setPluginEP4_NPP
+-[WebBaseNetscapePluginView pluginPackage]
+__ZL7streamsv
+__ZN3WTF7HashMapIP9_NPStreamP4_NPPNS_7PtrHashIS2_EENS_10HashTraitsIS2_EENS7_IS4_EEE3addERKS2_RKS4_
+__ZN3WTF9HashTableIP9_NPStreamSt4pairIS2_P4_NPPENS_18PairFirstExtractorIS6_EENS_7PtrHashIS2_EENS_14PairHashTraitsINS_10HashTraitsIS2_EENSC_IS5_EEEESD_E6expandEv
+__ZN3WTF7HashSetINS_6RefPtrI23WebNetscapePluginStreamEENS_7PtrHashIS3_EENS_10HashTraitsIS3_EEE3addERKS3_
+__ZN3WTF9HashTableINS_6RefPtrI23WebNetscapePluginStreamEES3_NS_17IdentityExtractorIS3_EENS_7PtrHashIS3_EENS_10HashTraitsIS3_EES9_E6expandEv
+__ZN23WebNetscapePluginStream5startEv
+NPN_InvalidateRect
+-[WebNetscapePluginDocumentView(WebNPPCallbacks) invalidateRect:]
+-[WebNetscapePluginDocumentView drawRect:]
+-[WebNetscapePluginDocumentView sendDrawRectEvent:]
+__ZN35WebNetscapePluginEventHandlerCarbon8drawRectERK7_NSRect
+__ZN3WTF6VectorI6CGRectLm16EE6shrinkEm
+__ZN35WebNetscapePluginEventHandlerCarbon19nullEventTimerFiredEP16__CFRunLoopTimerPv
+__ZN35WebNetscapePluginEventHandlerCarbon13sendNullEventEv
+__ZN23WebNetscapePluginStream18didReceiveResponseEPN7WebCore26NetscapePlugInStreamLoaderERKNS0_16ResourceResponseE
+WKGetNSURLResponseLastModifiedDate
+__ZN23WebNetscapePluginStream11startStreamEP5NSURLxP6NSDateP8NSStringP6NSData
+-[NSURL(WebNSURLExtras) _web_URLCString]
+__ZNK23WebNetscapePluginStream15wantsAllStreamsEv
+__ZN23WebNetscapePluginStream14didReceiveDataEPN7WebCore26NetscapePlugInStreamLoaderEPKci
+__ZN23WebNetscapePluginStream11deliverDataEv
+__ZN23WebNetscapePluginStream16didFinishLoadingEPN7WebCore26NetscapePlugInStreamLoaderE
+__ZN23WebNetscapePluginStream23destroyStreamWithReasonEs
+__ZN23WebNetscapePluginStream13destroyStreamEv
+-[WebNetscapePluginDocumentView disconnectStream:]
+__ZN3WTF9HashTableINS_6RefPtrI23WebNetscapePluginStreamEES3_NS_17IdentityExtractorIS3_EENS_7PtrHashIS3_EENS_10HashTraitsIS3_EES9_E4findIS3_NS_22IdentityHashTranslatorIS3_S3_S7_EEEENS_17HashTableIteratorIS3_S3_S5_S7_S9_S9_EERKT_
+__ZN3WTF9HashTableIP9_NPStreamSt4pairIS2_P4_NPPENS_18PairFirstExtractorIS6_EENS_7PtrHashIS2_EENS_14PairHashTraitsINS_10HashTraitsIS2_EENSC_IS5_EEEESD_E4findIS2_NS_22IdentityHashTranslatorIS2_S6_SA_EEEENS_17HashTableIteratorIS2_S6_S8_SA_SF_SD_EERKT_
+-[WebBaseNetscapePluginView preferencesHaveChanged:]
+-[WebBaseNetscapePluginView windowResignedKey:]
+NPN_GetURLNotify
+-[WebNetscapePluginDocumentView(WebNPPCallbacks) getURLNotify:target:notifyData:]
+-[WebBaseNetscapePluginView requestWithURLCString:]
+-[NSString(WebKitExtras) _web_stringByStrippingReturnCharacters]
+-[NSURL(WebNSURLExtras) _webkit_URLByRemovingResourceSpecifier]
+NPN_PostURLNotify
+-[WebNetscapePluginDocumentView(WebNPPCallbacks) postURLNotify:target:len:buf:file:notifyData:]
+-[WebNetscapePluginDocumentView(WebNPPCallbacks) _postURL:target:len:buf:file:notifyData:sendNotification:allowHeaders:]
+-[NSData(WebNSDataExtras) _web_startsWithBlankLine]
+-[NSData(WebNSDataExtras) _web_locationAfterFirstBlankLine]
+-[NSData(WebNSDataExtras) _webkit_parseRFC822HeaderFields]
+-[NSString(WebNSDataExtrasInternal) _web_capitalizeRFC822HeaderFieldName]
+-[WebNetscapePluginDocumentView createPluginScriptableObject]
+NPN_MemFree
+__ZN15WebChromeClient11scaleFactorEv
+-[WebPluginDatabase removePluginInstanceViewsFor:]
+-[WebViewFactory imageTitleForFilename:width:height:]
+WKGetMIMETypeForExtension
+-[WebView _pluginForExtension:]
+-[WebPluginDatabase pluginForExtension:]
+-[WebBasePluginPackage extensionEnumerator]
+-[WebBasePluginPackage MIMETypeForExtension:]
__ZN15WebChromeClient15closeWindowSoonEv
-[WebView(WebPrivate) _closeWindow]
-[WebBaseNetscapePluginView windowWillClose:]
--[WebFrameBridge valueForKey:keys:values:]
+-[WebBaseNetscapePluginView stop]
+-[WebNetscapePluginDocumentView shouldStop]
+-[WebView removePluginInstanceView:]
+-[WebPluginDatabase removePluginInstanceView:]
+-[WebNetscapePluginDocumentView destroyPlugin]
+__ZN3WTF6VectorINS_6RefPtrI23WebNetscapePluginStreamEELm0EE6resizeEm
+-[WebNetscapePluginDocumentView(Internal) _destroyPlugin]
+-[WebNetscapePluginPackage close]
+__ZN35WebNetscapePluginEventHandlerCarbonD1Ev
+__ZN20NetscapePluginWidgetD1Ev
+-[WebPluginDatabase destroyAllPluginInstanceViews]
+-[WebPluginDatabase dealloc]
+-[WebNetscapePluginDocumentView dealloc]
+-[WebNetscapePluginDocumentView fini]
+-[WebBaseNetscapePluginView dealloc]
+-[WebNetscapePluginDocumentView .cxx_destruct]
+-[WebBaseNetscapePluginView .cxx_destruct]
+__ZN20WebFrameLoaderClient21fileDoesNotExistErrorERKN7WebCore16ResourceResponseE
++[NSError(WebKitExtras) _webKitErrorWithDomain:code:URL:]
++[NSError(WebKitExtras) _registerWebKitErrors]
+registerErrors
++[NSError(WebKitExtras) _webkit_addErrorsWithCodesAndDescriptions:inDomain:]
+__ZN23WebNetscapePluginStream7didFailEPN7WebCore26NetscapePlugInStreamLoaderERKNS0_13ResourceErrorE
+__ZN23WebNetscapePluginStream22destroyStreamWithErrorEP7NSError
+__ZN23WebNetscapePluginStream14reasonForErrorEP7NSError
+__ZN20WebFrameLoaderClient14cancelledErrorERKN7WebCore15ResourceRequestE
+__ZSt25__unguarded_linear_insertIPiiEvT_T0_
+-[WebHistoryItem(WebInternal) _mergeAutoCompleteHints:]
+-[WebHistoryItem(WebPrivate) URL]
+__ZN20WebFrameLoaderClient27registerForIconNotificationEb
+-[WebView(WebViewInternal) _receivedIconChangedNotification:]
+-[WebView(WebPendingPublic) canMarkAllTextMatches]
+-[WebView(WebPendingPublic) searchFor:direction:caseSensitive:wrap:startInSelection:]
+-[WebView(WebFileInternal) _selectedOrMainFrame]
+-[WebFrame(WebInternal) _findFrameWithSelection]
+-[WebFrame(WebInternal) _hasSelection]
+-[WebHTMLView(WebDocumentPrivateProtocols) searchFor:direction:caseSensitive:wrap:startInSelection:]
+-[WebFrameView(WebPrivate) _contentView]
+-[WebView(WebPendingPublic) rectsForTextMatches]
+-[WebHTMLView(WebDocumentInternalProtocols) rectsForTextMatches]
+__ZN3WTF6VectorIN7WebCore7IntRectELm0EE6shrinkEm
+-[WebHTMLView(WebDocumentPrivateProtocols) selectionRect]
+-[WebHTMLView(WebPrivate) _hasSelection]
+-[WebHTMLView(WebDocumentPrivateProtocols) selectionTextRects]
+__ZN3WTF6VectorIN7WebCore9FloatRectELm0EE6shrinkEm
+-[WebHTMLView(WebDocumentPrivateProtocols) selectionImageForcingBlackText:]
+-[WebHTMLView(WebDocumentPrivateProtocols) selectedString]
+-[WebFrame(WebInternal) _selectedString]
+-[WebHTMLView(WebPrivate) view:stringForToolTip:point:userData:]
+-[WebHTMLView scrollWheel:]
+WKGetWheelEventDeltas
+-[WebClipView scrollWheel:]
+-[WebDynamicScrollBarsView(WebInternal) scrollWheel:]
+-[WebDynamicScrollBarsView(WebInternal) allowsVerticalScrolling]
+-[WebDynamicScrollBarsView(WebInternal) autoforwardsScrollWheelEvents]
+-[WebDynamicScrollBarsView(WebInternal) allowsHorizontalScrolling]
+-[WebView(WebIBActions) goBack:]
+-[WebView goBack]
+__ZNK20WebFrameLoaderClient21shouldGoToHistoryItemEPN7WebCore11HistoryItemE
+__ZN20WebFrameLoaderClient16restoreViewStateEv
+__ZN15WebChromeClient13willPopUpMenuEP6NSMenu
+WKPopupMenu
+-[WebHTMLView _accessibilityParentForSubview:]
+-[WebDynamicScrollBarsView(WebInternal) accessibilityIsIgnored]
+-[WebClipView _focusRingVisibleRect]
+__ZL10pluginViewP8WebFrameP16WebPluginPackageP7NSArrayS4_P5NSURLP10DOMElementa
+-[WebPluginPackage viewFactory]
++[WebPluginController plugInViewWithArguments:fromPluginPackage:]
+-[WebPluginController webFrame]
+-[WebView(WebPrivate) defersCallbacks]
+-[WebPluginController addPlugin:]
++[NSObject(WebScripting) isKeyExcludedFromWebScript:]
++[NSObject(WebScripting) isSelectorExcludedFromWebScript:]
+__ZN20WebFrameLoaderClient35dispatchDidChangeLocationWithinPageEv
+__ZN20WebFrameLoaderClient13didFinishLoadEv
+__ZN7WebCore6Widget11handleEventEPNS_5EventE
+-[WebView hostWindow]
+-[WebView acceptsFirstResponder]
+-[WebFrameView acceptsFirstResponder]
+-[WebView becomeFirstResponder]
+__ZL14parameterValueRKN3WTF6VectorIN7WebCore6StringELm0EEES5_RKS2_
-[NSError(WebKitExtras) _initWithPluginErrorCode:contentURL:pluginPageURL:pluginName:MIMEType:]
-[WebNullPluginView initWithFrame:error:DOMElement:]
-[WebNullPluginView viewDidMoveToWindow]
-[WebNullPluginView reportFailure]
--[WebFrameBridge getAppletInView:]
--[WebFrameBridge pollForAppletInView:]
+-[NSURL(WebNSURLExtras) _web_URLWithLowercasedScheme]
+-[WebFramePolicyListener ignore]
+__ZN20WebFrameLoaderClient36transitionToCommittedFromCachedFrameEPN7WebCore11CachedFrameE
+__ZN20WebFrameLoaderClient11forceLayoutEv
+-[WebHTMLView setNeedsToApplyStyles:]
-[WebNullPluginView dealloc]
-__ZN20WebFrameLoaderClient21fileDoesNotExistErrorERKN7WebCore16ResourceResponseE
-__ZN20WebFrameLoaderClient38dispatchDecidePolicyForNewWindowActionEMN7WebCore11FrameLoaderEFvNS0_12PolicyActionEERKNS0_16NavigationActionERKNS0_15ResourceRequestERKNS0_6StringE
+__ZN15WebChromeClient5focusEv
+-[WebFramePolicyListener download]
+__ZN20WebFrameLoaderClient8downloadEPN7WebCore14ResourceHandleERKNS0_15ResourceRequestES5_RKNS0_16ResourceResponseE
+-[WebDownload _initWithLoadingConnection:request:response:delegate:proxy:]
+-[WebDownload _setRealDelegate:]
+-[WebDownloadInternal setRealDelegate:]
+-[WebDownload init]
+-[WebDownloadInternal respondsToSelector:]
+-[WebDownloadInternal downloadDidBegin:]
+-[WebDownloadInternal download:didReceiveResponse:]
+__ZNK20WebFrameLoaderClient25setOriginalURLForDownloadEP11WebDownloadRKN7WebCore15ResourceRequestE
+__ZN20WebFrameLoaderClient29interruptForPolicyChangeErrorERKN7WebCore15ResourceRequestE
+-[WebDownloadInternal download:decideDestinationWithSuggestedFilename:]
+-[NSFileManager(WebNSFileManagerExtras) _webkit_setMetadataURL:referrer:atPath:]
+WKSetMetadataURL
+-[WebDownloadInternal download:didCreateDestination:]
+-[WebDownloadInternal download:didReceiveDataOfLength:]
++[WebStringTruncator widthOfString:font:]
+-[WebDownloadInternal downloadDidFinish:]
+-[WebDownload dealloc]
+-[WebDownloadInternal dealloc]
+-[WebHTMLRepresentation elementWithName:inForm:]
+-[WebViewFactory accessibilityHandleFocusChanged]
+WKAccessibilityHandleFocusChanged
+-[WebHTMLView(WebNSTextInputSupport) hasMarkedText]
+-[WebHTMLView(WebNSTextInputSupport) insertText:]
+__ZN20NetscapePluginWidget11handleEventEPN7WebCore5EventE
+-[WebNetscapePluginDocumentView handleMouseMoved:]
+__ZN35WebNetscapePluginEventHandlerCarbon10mouseMovedEP7NSEvent
+-[WebBaseNetscapePluginView acceptsFirstResponder]
+-[WebBaseNetscapePluginView becomeFirstResponder]
+-[WebNetscapePluginDocumentView focusChanged]
+__ZN35WebNetscapePluginEventHandlerCarbon12focusChangedEb
+__ZN35WebNetscapePluginEventHandlerCarbon22installKeyEventHandlerEv
+-[WebNetscapePluginDocumentView mouseDown:]
+__ZN35WebNetscapePluginEventHandlerCarbon9mouseDownEP7NSEvent
+__ZL14getCarbonEventP11EventRecordP7NSEvent
+WKConvertNSEventToCarbonEvent
+-[WebNetscapePluginDocumentView inputContext]
+-[WebNetscapePluginDocumentView mouseDragged:]
+__ZN35WebNetscapePluginEventHandlerCarbon12mouseDraggedEP7NSEvent
+-[WebNetscapePluginDocumentView mouseUp:]
+__ZN35WebNetscapePluginEventHandlerCarbon7mouseUpEP7NSEvent
+-[WebNetscapePluginDocumentView scrollWheel:]
+__ZN35WebNetscapePluginEventHandlerCarbon11scrollWheelEP7NSEvent
+-[WebNetscapePluginDocumentView mouseExited:]
+__ZN35WebNetscapePluginEventHandlerCarbon11mouseExitedEP7NSEvent
+-[WebBaseNetscapePluginView resignFirstResponder]
+__ZN35WebNetscapePluginEventHandlerCarbon21removeKeyEventHandlerEv
+-[WebNetscapePluginDocumentView mouseEntered:]
+__ZN35WebNetscapePluginEventHandlerCarbon12mouseEnteredEP7NSEvent
+__ZN15WebEditorClient17shouldDeleteRangeEPN7WebCore5RangeE
+-[WebDefaultEditingDelegate webView:shouldDeleteDOMRange:]
+__ZN15WebEditorClient28textWillBeDeletedInTextFieldEPN7WebCore7ElementE
+WKSetPatternPhaseInUserSpace
+NPN_GetURL
+-[WebNetscapePluginDocumentView(WebNPPCallbacks) getURL:target:]
+-[WebPluginRequest initWithRequest:frameName:notifyData:sendNotification:didStartFromUserGesture:]
+-[WebNetscapePluginDocumentView(WebNPPCallbacks) loadPluginRequest:]
+-[WebPluginRequest request]
+-[WebPluginRequest frameName]
+-[WebPluginRequest sendNotification]
+-[WebPluginRequest dealloc]
+-[WebNetscapePluginDocumentView flagsChanged:]
+__ZN35WebNetscapePluginEventHandlerCarbon12flagsChangedEP7NSEvent
+-[WebNetscapePluginDocumentView keyDown:]
+__ZN35WebNetscapePluginEventHandlerCarbon7keyDownEP7NSEvent
+WKSendKeyEventToTSM
+__ZN35WebNetscapePluginEventHandlerCarbon15TSMEventHandlerEP25OpaqueEventHandlerCallRefP14OpaqueEventRefPv
+-[WebNetscapePluginDocumentView keyUp:]
+__ZN35WebNetscapePluginEventHandlerCarbon5keyUpEP7NSEvent
+__ZN3WTF6VectorINS_6RefPtrI23WebNetscapePluginStreamEELm0EE14expandCapacityEm
+__ZN3WTF6VectorINS_6RefPtrI23WebNetscapePluginStreamEELm0EE15reserveCapacityEm
+__ZN23WebNetscapePluginStream4stopEv
+__ZN23WebNetscapePluginStream35cancelLoadAndDestroyStreamWithErrorEP7NSError
+__ZN23WebNetscapePluginStream19cancelLoadWithErrorEP7NSError
+__ZN3WTF6VectorINS_6RefPtrI23WebNetscapePluginStreamEELm0EE6shrinkEm
+-[WebBaseNetscapePluginView windowBecameKey:]
+__ZN15WebEditorClient23textDidChangeInTextAreaEPN7WebCore7ElementE
+__ZN15WebChromeClient14keyboardUIModeEv
+-[WebView(WebViewInternal) _keyboardUIMode]
+-[WebView(WebViewInternal) _retrieveKeyboardUIModeFromPreferences:]
+-[WebPreferences tabsToLinks]
+__ZNK15WebChromeClient11tabsToLinksEv
+-[NSString(WebNSURLExtras) _webkit_stringByReplacingValidPercentEscapes]
+-[WebFrame findFrameNamed:]
+-[WebNetscapePluginDocumentView(WebNPPCallbacks) evaluateJavaScriptPluginRequest:]
+-[WebPluginRequest isCurrentEventUserGesture]
+__ZN15WebChromeClient16statusbarVisibleEv
+__Z30CallUIDelegateReturningBooleanaP7WebViewP13objc_selector
+__ZL28CallDelegateReturningBooleanaP7WebViewP11objc_objectP13objc_selector
+-[WebFrame(WebPrivate) _isDescendantOfFrame:]
+__ZN15WebEditorClient18shouldBeginEditingEPN7WebCore5RangeE
+-[WebDefaultEditingDelegate webView:shouldBeginEditingInDOMRange:]
+__ZN15WebEditorClient15didBeginEditingEv
+__ZN15WebEditorClient16shouldEndEditingEPN7WebCore5RangeE
+-[WebDefaultEditingDelegate webView:shouldEndEditingInDOMRange:]
+__ZN15WebEditorClient13didEndEditingEv
+__ZN15WebEditorClient25shouldShowDeleteInterfaceEPN7WebCore11HTMLElementE
+-[WebDefaultEditingDelegate webView:shouldShowDeleteInterfaceForElement:]
+__ZN15WebChromeClient20runJavaScriptConfirmEPN7WebCore5FrameERKNS0_6StringE
+__Z30CallUIDelegateReturningBooleanaP7WebViewP13objc_selectorP11objc_objectS4_
+__ZL28CallDelegateReturningBooleanaP7WebViewP11objc_objectP13objc_selectorS2_S2_
+__ZN20WebFrameLoaderClient38dispatchDecidePolicyForNewWindowActionEMN7WebCore11FrameLoaderEFvNS0_12PolicyActionEERKNS0_16NavigationActionERKNS0_15ResourceRequestEN3WTF10PassRefPtrINS0_9FormStateEEERKNS0_6StringE
__ZN20WebFrameLoaderClient18dispatchCreatePageEv
__ZN20WebFrameLoaderClient12dispatchShowEv
-__ZN3WTF6VectorI6CGRectLm16EE14expandCapacityEm
-__ZN3WTF6VectorI6CGRectLm16EE15reserveCapacityEm
--[WebViewFactory refreshPlugins:]
--[WebBackForwardList forwardItem]
--[WebBackForwardList backItem]
--[NSString(WebKitExtras) _web_drawAtPoint:font:textColor:]
-_canUseFastRenderer
--[NSEvent(WebExtras) _web_isOptionTabKeyEvent]
--[NSString(WebNSURLExtras) _webkit_rangeOfURLScheme]
--[WebFrame loadAlternateHTMLString:baseURL:forUnreachableURL:]
--[WebFrame _loadHTMLString:baseURL:unreachableURL:]
--[WebFrame _loadData:MIMEType:textEncodingName:baseURL:unreachableURL:]
--[WebBaseNetscapePluginStream _pluginCancelledConnectionError]
--[WebPluginRequest notifyData]
-__ZNK15WebChromeClient11tabsToLinksEv
--[WebPreferences tabsToLinks]
--[WebFrameBridge keyboardUIMode]
--[WebFrameBridge _retrieveKeyboardUIModeFromPreferences:]
--[WebFrameBridge _preferences]
-_WKGetMIMETypeForExtension
--[WebView _pluginForExtension:]
--[WebPluginDatabase pluginForExtension:]
--[WebBasePluginPackage extensionEnumerator]
--[WebBasePluginPackage MIMETypeForExtension:]
--[WebDataSource(WebPrivate) _mainDocumentError]
--[WebHTMLView validateUserInterfaceItem:]
--[WebHTMLView validateUserInterfaceItemWithoutDelegate:]
-__Z3kitN7WebCore8TriStateE
-__Z30CallUIDelegateReturningBooleanaP7WebViewP13objc_selectorP11objc_objecta
-__Z28CallDelegateReturningBooleanaP7WebViewP11objc_objectP13objc_selectorS2_a
--[WebFrame(WebPrivate) _isDisplayingStandaloneImage]
--[WebHTMLView(WebPrivate) _hasSelection]
--[WebHTMLView(WebPrivate) _isEditable]
--[WebView(WebIBActions) validateUserInterfaceItem:]
--[WebView(WebIBActions) validateUserInterfaceItemWithoutDelegate:]
--[WebHTMLView(WebInternal) isGrammarCheckingEnabled]
--[WebView(WebIBActions) canMakeTextLarger]
--[WebView(WebFileInternal) _performTextSizingSelector:withObject:onTrackingDocs:selForNonTrackingDocs:newScaleFactor:]
--[WebFrame(WebInternal) _documentViews]
--[WebHTMLView(WebTextSizing) _tracksCommonSizeFactor]
--[WebView(WebIBActions) canMakeTextStandardSize]
--[WebView(WebIBActions) canMakeTextSmaller]
--[WebHTMLRepresentation canProvideDocumentSource]
--[WebView supportsTextEncoding]
--[WebHTMLView(WebDocumentPrivateProtocols) supportsTextEncoding]
--[WebView customTextEncodingName]
--[WebView _mainFrameOverrideEncoding]
--[WebHistory orderedLastVisitedDays]
--[WebHistoryPrivate orderedLastVisitedDays]
--[WebHistory orderedItemsLastVisitedOnDay:]
--[WebHistoryPrivate orderedItemsLastVisitedOnDay:]
--[WebHistoryItem icon]
--[WebView(WebIBActions) goForward:]
--[WebView goForward]
+WKGetFontInLanguageForCharacter
__ZN13WebDragClient24declareAndWriteDragImageEP12NSPasteboardP10DOMElementP5NSURLP8NSStringPN7WebCore5FrameE
-__Z14getTopHTMLViewPN7WebCore5FrameE
+__ZL14getTopHTMLViewPN7WebCore5FrameE
-[DOMNode(WebDOMNodeOperations) webArchive]
-+[WebArchiver archiveNode:]
-+[WebArchiver _archiveWithMarkupString:fromFrame:nodes:]
--[WebResource initWithData:URL:MIMEType:textEncodingName:frameName:]
--[WebResource(WebResourcePrivate) _initWithData:URL:MIMEType:textEncodingName:frameName:response:copyData:]
--[WebResource init]
--[DOMHTMLImageElement(WebDOMHTMLImageElementOperationsPrivate) _subresourceURLs]
--[DOMNode(WebDOMNodeOperations) _URLsFromSelectors:]
--[DOMDocument(WebDOMDocumentOperations) URLWithAttributeString:]
--[WebDataSource subresourceForURL:]
--[WebResource(WebResourcePrivate) _initWithData:URL:response:MIMEType:]
--[WebArchive initWithMainResource:subresources:subframeArchives:]
--[WebArchive init]
+-[WebArchive(WebInternal) _initWithCoreLegacyWebArchive:]
++[WebArchivePrivate initialize]
+-[WebArchivePrivate initWithCoreArchive:]
-[NSPasteboard(WebExtras) _web_declareAndWriteDragImageForElement:URL:title:archive:source:]
+[NSPasteboard(WebExtras) _web_writableTypesForImageIncludingArchive:]
-__Z33_writableTypesForImageWithArchivev
-__Z36_writableTypesForImageWithoutArchivev
+__ZL33_writableTypesForImageWithArchivev
+__ZL36_writableTypesForImageWithoutArchivev
+[NSPasteboard(WebExtras) _web_writableTypesForURL]
-[NSPasteboard(WebExtras) _web_writeImage:element:URL:title:archive:types:source:]
-[NSPasteboard(WebExtras) _web_writeURL:andTitle:types:]
+[WebURLsWithTitles writeURLs:andTitles:toPasteboard:]
+[WebURLsWithTitles arrayWithIFURLsWithTitlesPboardType]
-__Z16imageFromElementP10DOMElement
-[WebHTMLView(WebInternal) setPromisedDragTIFFDataSource:]
-__Z18promisedDataClientv
-__ZN7WebCore20CachedResourceClient12imageChangedEPNS_11CachedImageE
+__ZL18promisedDataClientv
+__ZN7WebCore20CachedResourceClient12imageChangedEPNS_11CachedImageEPKNS_7IntRectE
__ZN7WebCore20CachedResourceClient14notifyFinishedEPNS_14CachedResourceE
-[WebArchive data]
--[WebArchive _propertyListRepresentation]
--[WebResource(WebResourcePrivate) _propertyListRepresentation]
-+[WebResource(WebResourcePrivate) _propertyListsFromResources:]
-_WKGetPreferredExtensionForMIMEType
+-[WebArchivePrivate coreArchive]
__ZN13WebDragClient27willPerformDragSourceActionEN7WebCore16DragSourceActionERKNS0_8IntPointEPNS0_9ClipboardE
-[WebDefaultUIDelegate webView:willPerformDragSourceAction:fromPoint:withPasteboard:]
__ZN13WebDragClient9startDragEN3WTF9RetainPtrI7NSImageEERKN7WebCore8IntPointES7_PNS4_9ClipboardEPNS4_5FrameEb
@@ -1150,223 +1425,96 @@ __ZNK19WebPasteboardHelper25insertablePasteboardTypesEv
-[WebView draggingUpdated:]
-[WebView _shouldAutoscrollForDraggingInfo:]
-[WebHTMLView draggedImage:movedTo:]
+-[WebFrame(WebInternal) _dragSourceMovedTo:]
-[WebView draggingExited:]
-[WebHTMLView draggedImage:endedAt:operation:]
+-[WebFrame(WebInternal) _dragSourceEndedAt:operation:]
-[WebArchive dealloc]
-[WebArchivePrivate dealloc]
--[WebResource dealloc]
--[WebResourcePrivate dealloc]
--[WebView acceptsFirstResponder]
--[WebHTMLRepresentation receivedError:withDataSource:]
--[WebFrameBridge imageTitleForFilename:size:]
--[WebFrameBridge pluginViewWithPackage:attributeNames:attributeValues:baseURL:DOMElement:loadManually:]
--[WebPluginPackage viewFactory]
-+[WebPluginController plugInViewWithArguments:fromPluginPackage:]
--[WebPluginController webFrame]
--[WebView(WebPrivate) defersCallbacks]
--[WebView(WebPrivate) setDefersCallbacks:]
--[WebPluginController addPlugin:]
-+[NSObject(WebScripting) isSelectorExcludedFromWebScript:]
--[WebPluginController destroyPlugin:]
--[WebIconDatabase(WebInternal) _applicationWillTerminate:]
-+[WebView _applicationWillTerminate]
+__ZN3WTF6VectorINS_6RefPtrIN7WebCore15ArchiveResourceEEELm0EE6shrinkEm
+-[WebHTMLView(WebPrivate) pasteboardChangedOwner:]
+__ZN20WebFrameLoaderClient22createJavaAppletWidgetERKN7WebCore7IntSizeEPNS0_7ElementERKNS0_4KURLERKN3WTF6VectorINS0_6StringELm0EEESE_
+__ZN20WebFrameLoaderClient10javaAppletEP6NSView
+-[WebPluginController webPlugInContainerShowStatus:]
+__ZN3WTF6VectorI6CGRectLm16EE14expandCapacityEm
+__ZN3WTF6VectorI6CGRectLm16EE15reserveCapacityEm
+-[WebIconDatabase iconURLForURL:]
+-[WebHistoryItem(WebPrivate) RSSFeedReferrer]
+__ZN15WebChromeClient7unfocusEv
+-[WebDefaultUIDelegate webViewUnfocus:]
+__ZN15WebChromeClient11canRunModalEv
+-[WebViewFactory refreshPlugins]
+__ZNK19WebPasteboardHelper17urlFromPasteboardEPK12NSPasteboardPN7WebCore6StringE
+-[NSPasteboard(WebExtras) _web_bestURL]
+-[WebView windowScriptObject]
+-[WebView(WebIBActions) reload:]
+-[WebFrame reload]
+-[WebFramePolicyListener invalidate]
+NPN_PushPopupsEnabledState
+NPN_PopPopupsEnabledState
+-[WebView(WebIBActions) goForward:]
+-[WebView goForward]
+__ZNK23WebNetscapePluginStream30pluginCancelledConnectionErrorEv
+-[WebBaseNetscapePluginView windowDidMiniaturize:]
+-[WebBaseNetscapePluginView windowDidDeminiaturize:]
-[WebHTMLView(WebPrivate) pasteboard:provideDataForType:]
-[WebHTMLView(WebInternal) promisedDragTIFFDataSource]
-[WebArchive initWithData:]
--[WebArchive _initWithPropertyList:]
--[WebResource(WebResourcePrivate) _initWithPropertyList:]
-+[WebResource(WebResourcePrivate) _resourcesFromPropertyLists:]
+-[WebArchivePrivate init]
+-[WebArchivePrivate setCoreArchive:]
-[NSPasteboard(WebExtras) _web_writePromisedRTFDFromArchive:containsImage:]
-[WebArchive subresources]
+-[WebResource(WebResourceInternal) _initWithCoreResource:]
++[WebResourcePrivate initialize]
+-[WebResourcePrivate initWithCoreResource:]
-[WebArchive mainResource]
-[WebResource MIMEType]
-[WebResource(WebResourcePrivate) _fileWrapperRepresentation]
+-[WebResource data]
+-[WebResource(WebResourcePrivate) _suggestedFilename]
-[NSPasteboard(WebExtras) _web_writeFileWrapperAsRTFDAttachment:]
-+[WebPluginDatabase closeSharedDatabase]
--[WebPluginDatabase close]
--[WebPluginDatabase(Internal) _removePlugin:]
-+[WebView(WebPrivate) _unregisterViewClassAndRepresentationClassForMIMEType:]
--[WebBasePluginPackage wasRemovedFromPluginDatabase:]
--[WebNetscapePluginPackage wasRemovedFromPluginDatabase:]
--[WebNetscapePluginPackage(Internal) _unloadWithShutdown:]
-___tcf_3
-___tcf_0
-___tcf_2
-_WKDrawBezeledTextFieldCell
--[WebView(WebPrivate) _UIDelegateForwarder]
-+[WebDefaultUIDelegate sharedUIDelegate]
--[WebClipView resetAdditionalClip]
--[WebView(WebIBActions) canGoBack]
--[WebView(WebIBActions) canGoForward]
--[WebHTMLView(WebPrivate) hitTest:]
-+[WebElementDictionary initialize]
--[WebElementDictionary initWithHitTestResult:]
-+[WebElementDictionary initializeLookupTable]
-__Z12addLookupKeyP8NSStringP13objc_selector
--[WebElementDictionary objectForKey:]
--[WebElementDictionary dealloc]
--[WebView(WebPendingPublic) isHoverFeedbackSuspended]
-__ZN15WebChromeClient23mouseDidMoveOverElementERKN7WebCore13HitTestResultEj
--[WebView(WebPrivate) _mouseDidMoveOverElement:modifierFlags:]
-__Z14CallUIDelegateP7WebViewP13objc_selectorP11objc_objectj
-__Z12CallDelegateP7WebViewP11objc_objectP13objc_selectorS2_j
--[WebElementDictionary _absoluteLinkURL]
-__ZN15WebChromeClient10setToolTipERKN7WebCore6StringE
--[WebHTMLView(WebPrivate) _setToolTip:]
-_WKCGContextGetShouldSmoothFonts
-_WKSetCGFontRenderingMode
-__Z29_updateMouseoverTimerCallbackP16__CFRunLoopTimerPv
--[WebHTMLView(WebPrivate) _updateMouseoverWithFakeEvent]
--[WebHTMLView(WebPrivate) _updateMouseoverWithEvent:]
--[WebIconDatabase(WebInternal) _iconForFileURL:withSize:]
--[WebIconDatabase(WebInternal) _iconsBySplittingRepresentationsOfIcon:]
--[WebIconDatabase(WebInternal) _iconFromDictionary:forSize:cache:]
--[WebHTMLView(WebPrivate) _recursiveDisplayRectIfNeededIgnoringOpacity:isVisibleRect:rectIsVisibleRectForView:topView:]
-__ZN20WebFrameLoaderClient29dispatchDidFinishDocumentLoadEv
-__ZN20WebFrameLoaderClient27dispatchDidLoadMainResourceEPN7WebCore14DocumentLoaderE
-+[WebScriptDebugServer listenerCount]
-__ZN20WebFrameLoaderClient24dispatchDidFinishLoadingEPN7WebCore14DocumentLoaderEm
--[WebView(WebViewInternal) _removeObjectForIdentifier:]
-__ZN3WTF9HashTableImSt4pairImNS_9RetainPtrIP11objc_objectEEENS_18PairFirstExtractorIS6_EENS_7IntHashImEENS_14PairHashTraitsINS_10HashTraitsImEENSC_IS5_EEEESD_E4findImNS_22IdentityHashTranslatorImS6_SA_EEEENS_17HashTableIteratorImS6_S8_SA_SF_SD_EERKT_
-__ZN20WebDocumentLoaderMac17decreaseLoadCountEm
-__ZN3WTF9HashTableImmNS_17IdentityExtractorImEENS_7IntHashImEENS_10HashTraitsImEES6_E4findImNS_22IdentityHashTranslatorImmS4_EEEENS_17HashTableIteratorImmS2_S4_S6_S6_EERKT_
-+[WebPluginDatabase sharedDatabase]
--[WebPluginDatabase init]
-+[WebPluginDatabase(Internal) _defaultPlugInPaths]
--[WebPluginDatabase setPlugInPaths:]
--[WebPluginDatabase refresh]
--[WebPluginDatabase(Internal) _scanForNewPlugins]
--[WebPluginDatabase(Internal) _plugInPaths]
-+[WebBasePluginPackage initialize]
-+[WebBasePluginPackage pluginWithPath:]
--[WebPluginPackage initWithPath:]
--[WebBasePluginPackage initWithPath:]
--[WebBasePluginPackage pathByResolvingSymlinksAndAliasesInPath:]
--[WebBasePluginPackage dealloc]
-+[WebNetscapePluginPackage initialize]
-_WebLMGetCurApRefNum
-_WebLMSetCurApRefNum
--[WebNetscapePluginPackage initWithPath:]
--[WebNetscapePluginPackage _initWithPath:]
--[WebBasePluginPackage getPluginInfoFromBundleAndMIMEDictionary:]
--[NSArray(WebPluginExtensions) _web_lowercaseStrings]
--[WebBasePluginPackage setMIMEToExtensionsDictionary:]
--[WebBasePluginPackage setMIMEToDescriptionDictionary:]
--[WebBasePluginPackage filename]
--[WebBasePluginPackage setName:]
--[WebBasePluginPackage setPluginDescription:]
--[WebNetscapePluginPackage getPluginInfoFromResources]
--[WebNetscapePluginPackage openResourceFile]
-+[WebBasePluginPackage preferredLocalizationName]
--[WebPluginPackage load]
-__Z13webGetNSImagePN7WebCore5ImageE7_NSSize
-+[NSNotificationCenter(WebNSNotificationCenterExtras) _postNotificationName:]
--[NSView(WebExtras) _web_dragShouldBeginFromMouseDown:withExpiration:]
--[NSString(WebNSURLExtras) _web_isUserVisibleURL]
--[NSString(WebNSURLExtras) _webkit_looksLikeAbsoluteURL]
--[WebHistoryItem(WebPrivate) visitCount]
--[WebDynamicScrollBarsView setAllowsHorizontalScrolling:]
--[WebView(WebViewInternal) _dispatchDidReceiveIconFromWebFrame:]
-__ZNK19WebPasteboardHelper17urlFromPasteboardEPK12NSPasteboardPN7WebCore6StringE
--[NSPasteboard(WebExtras) _web_bestURL]
-+[WebURLsWithTitles URLsFromPasteboard:]
-+[WebView(WebPrivate) canShowFile:]
-+[WebView(WebPrivate) _MIMETypeForFile:]
+-[WebResource dealloc]
+-[WebResourcePrivate dealloc]
+-[NSView(WebExtras) _web_parentWebFrameView]
+-[WebView(WebPrivate) _loadBackForwardListFromOtherView:]
+__ZL8hexDigiti
+__ZN15WebChromeClient18runJavaScriptAlertEPN7WebCore5FrameERKNS0_6StringE
-[WebIconDatabase releaseIconForURL:]
-[NSView(WebExtras) _web_dragOperationForDraggingInfo:]
--[WebHistory removeAllItems]
--[WebHistoryPrivate removeAllItems]
+-[WebElementDictionary _image]
+-[WebHistoryItem hash]
+-[NSEvent(WebExtras) _web_isDeleteKeyEvent]
+-[NSEvent(WebExtras) _web_isKeyEvent:]
+-[WebFrameView keyDown:]
+-[WebFrameView(WebFrameViewFileInternal) _web_frame]
+-[WebFrameView allowsScrolling]
+-[WebFrameView _scrollLineHorizontally:]
+-[WebFrameView _scrollOverflowInDirection:granularity:]
+-[WebFrameView(WebPrivate) _hasScrollBars]
+-[WebFrameView(WebPrivate) _largestChildWithScrollBars]
+-[WebDataSource(WebPrivate) _mainDocumentError]
+-[WebBackForwardList backListWithLimit:]
+__ZL15vectorToNSArrayRN3WTF6VectorINS_6RefPtrIN7WebCore11HistoryItemEEELm0EEE
+__ZN3WTF6VectorINS_6RefPtrIN7WebCore11HistoryItemEEELm0EE6shrinkEm
+-[WebHistoryItem(WebPrivate) targetItem]
+-[WebHistoryItem icon]
+-[WebView goToBackForwardItem:]
+-[WebViewFactory fileButtonChooseFileLabel]
+[WebCache empty]
-[WebBackForwardList pageCacheSize]
-[WebBackForwardList setPageCacheSize:]
-[WebView(WebPrivate) setUsesPageCache:]
--[WebIconDatabase(WebPendingPublic) removeAllIcons]
-__ZN21WebIconDatabaseClient25dispatchDidRemoveAllIconsEv
--[WebIconDatabase(WebInternal) _sendDidRemoveAllIconsNotification]
-__ZN21WebIconDatabaseClient13performImportEv
-__Z21importToWebCoreFormatv
-+[ThreadEnabler enableThreading]
-__Z20objectFromPathForKeyP8NSStringP11objc_object
--[ThreadEnabler threadEnablingSelector:]
--[NSString(WebKitExtras) _webkit_fixedCarbonPOSIXPath]
--[WebViewFactory pluginsInfo]
--[WebFrameView keyDown:]
-_NPN_PostURLNotify
--[WebBaseNetscapePluginView(WebNPPCallbacks) postURLNotify:target:len:buf:file:notifyData:]
--[WebBaseNetscapePluginView(WebNPPCallbacks) _postURL:target:len:buf:file:notifyData:sendNotification:allowHeaders:]
--[NSData(PluginExtras) _web_startsWithBlankLine]
--[NSData(PluginExtras) _web_locationAfterFirstBlankLine]
--[NSData(WebNSDataExtras) _webkit_parseRFC822HeaderFields]
--[NSString(WebNSDataExtrasInternal) _web_capitalizeRFC822HeaderFieldName]
-__ZN3WTF6VectorIN7WebCore15FormDataElementELm0EE6shrinkEm
-__ZN3WTF6VectorIcLm0EE6shrinkEm
--[NSString(WebKitExtras) _web_widthWithFont:]
--[WebView(WebViewInternal) _receivedIconChangedNotification:]
--[WebView mainFrameURL]
--[WebHTMLView menuForEvent:]
--[WebViewFactory contextMenuItemTagOpenLink]
--[WebViewFactory contextMenuItemTagOpenLinkInNewWindow]
--[WebViewFactory contextMenuItemTagDownloadLinkToDisk]
--[WebViewFactory contextMenuItemTagCopyLinkToClipboard]
--[WebViewFactory contextMenuItemTagOpenImageInNewWindow]
--[WebViewFactory contextMenuItemTagDownloadImageToDisk]
--[WebViewFactory contextMenuItemTagCopyImageToClipboard]
--[WebViewFactory contextMenuItemTagSearchInSpotlight]
--[WebViewFactory contextMenuItemTagLookUpInDictionary]
--[WebViewFactory contextMenuItemTagSearchWeb]
--[WebViewFactory contextMenuItemTagCopy]
--[WebViewFactory contextMenuItemTagGoBack]
--[WebViewFactory contextMenuItemTagGoForward]
--[WebViewFactory contextMenuItemTagStop]
--[WebViewFactory contextMenuItemTagReload]
--[WebViewFactory contextMenuItemTagOpenFrameInNewWindow]
--[WebViewFactory contextMenuItemTagNoGuessesFound]
--[WebViewFactory contextMenuItemTagIgnoreSpelling]
--[WebViewFactory contextMenuItemTagLearnSpelling]
--[WebViewFactory contextMenuItemTagIgnoreGrammar]
--[WebViewFactory contextMenuItemTagCut]
--[WebViewFactory contextMenuItemTagPaste]
-__ZN20WebContextMenuClient29getCustomMenuFromDefaultItemsEPN7WebCore11ContextMenuE
-__Z19isPreVersion3Clientv
-__Z28isPreInspectElementTagClientv
--[WebDataSource(WebPrivate) _fileWrapperForURL:]
--[WebView(WebPrivate) _cachedResponseForURL:]
--[NSMutableURLRequest(WebNSURLRequestExtras) _web_setHTTPUserAgent:]
--[WebElementDictionary _absoluteImageURL]
--[WebElementDictionary _image]
--[WebElementDictionary _titleDisplayString]
-__Z13NSStringOrNilN7WebCore6StringE
--[WebElementDictionary _textContent]
-__ZNK20WebFrameLoaderClient29generatedMIMETypeForURLSchemeERKN7WebCore6StringE
--[WebHistory removeItems:]
--[WebHistoryPrivate removeItems:]
--[WebHistoryPrivate removeItem:]
--[NSView(WebExtras) _web_parentWebFrameView]
--[WebHTMLView validRequestorForSendType:returnType:]
--[WebHTMLView(WebDocumentPrivateProtocols) pasteboardTypesForSelection]
--[WebHTMLView(WebInternal) _canSmartCopyOrDelete]
--[WebView(WebViewEditing) smartInsertDeleteEnabled]
--[WebBackForwardList containsItem:]
-__Z4coreP14WebHistoryItem
--[WebView goToBackForwardItem:]
--[WebFrame(WebInternal) _findFrameWithSelection]
--[WebFrame(WebInternal) _hasSelection]
--[WebView(WebIBActions) stopLoading:]
--[WebFrame stopLoading]
--[NSURL(WebNSURLExtras) _web_URLWithLowercasedScheme]
-+[NSPasteboard(WebExtras) _web_setFindPasteboardString:withOwner:]
--[WebView(WebPendingPublic) searchFor:direction:caseSensitive:wrap:startInSelection:]
--[WebView(WebFileInternal) _selectedOrMainFrame]
-__Z14incrementFrameP8WebFrameaa
--[WebHistory _itemForURLString:]
--[WebView(WebPendingPublic) canMarkAllTextMatches]
--[WebHistoryItem(WebPrivate) _lastVisitedDate]
+-[WebHTMLView namesOfPromisedFilesDroppedAtDestination:]
+-[NSFileManager(WebNSFileManagerExtras) _webkit_pathWithUniqueFilenameForPath:]
+-[NSString(WebKitExtras) _webkit_filenameByFixingIllegalCharacters]
+-[WebView _autoscrollForDraggingInfo:timeDelta:]
+WKSetPatternBaseCTM
-[WebView prepareForDragOperation:]
-[WebView performDragOperation:]
__ZN13WebDragClient32willPerformDragDestinationActionEN7WebCore21DragDestinationActionEPNS0_8DragDataE
-[WebDefaultUIDelegate webView:willPerformDragDestinationAction:forDraggingInfo:]
--[NSString(WebKitExtras) _webkit_filenameByFixingIllegalCharacters]
--[WebIconDatabase(WebInternal) _scaleIcon:toSize:]
+-[NSEvent(WebExtras) _web_isReturnOrEnterKeyEvent]
+-[WebHTMLRepresentation receivedError:withDataSource:]
-[WebPDFRepresentation setDataSource:]
-[WebPDFView initWithFrame:]
+[WebPDFView(FileInternal) _PDFPreviewViewClass]
@@ -1396,277 +1544,18 @@ __ZN13WebDragClient32willPerformDragDestinationActionEN7WebCore21DragDestination
-[WebPreferences(WebPrivate) PDFScaleFactor]
-[WebPreferences _floatValueForKey:]
-[WebPreferences(WebPrivate) PDFDisplayMode]
--[WebPDFView hitTest:]
-[WebPDFView string]
--[WebPDFView(FileInternal) _PDFDocumentViewMightHaveScrolled:]
--[NSView(WebExtras) _webView]
--[WebPDFView(FileInternal) _updatePreferencesSoon]
--[WebPDFView(FileInternal) _updatePreferences:]
--[WebPreferences(WebPrivate) setPDFScaleFactor:]
--[WebPreferences _setFloatValue:forKey:]
--[NSMutableDictionary(WebNSDictionaryExtras) _webkit_setFloat:forKey:]
--[WebPreferences(WebPrivate) setPDFDisplayMode:]
--[WebPreferences _setIntegerValue:forKey:]
--[WebPDFView PDFViewSavePDFToDownloadFolder:]
-__Z14CallUIDelegateP7WebViewP13objc_selectorP11objc_objecta
-__Z12CallDelegateP7WebViewP11objc_objectP13objc_selectorS2_a
--[NSFileManager(WebNSFileManagerExtras) _webkit_setMetadataURL:referrer:atPath:]
-_WKSetMetadataURL
--[WebPDFView PDFViewOpenPDFInNativeApplication:]
--[WebPDFView(FileInternal) _openWithFinder:]
--[WebPDFView(FileInternal) _path]
--[WebPDFView(FileInternal) _temporaryPDFDirectoryPath]
--[WebPDFView menuForEvent:]
--[WebPDFView(FileInternal) _menuItemsFromPDFKitForEvent:]
--[NSMutableArray(WebExtras) _webkit_removeUselessMenuItemSeparators]
--[WebPDFView elementAtPoint:]
--[WebPDFView(FileInternal) _pointIsInSelection:]
--[WebView(WebPrivate) _menuForElement:defaultItems:]
--[WebDefaultUIDelegate(WebContextMenu) webView:contextMenuItemsForElement:defaultMenuItems:]
--[WebDefaultUIDelegate(WebContextMenu) menuItemWithTag:target:representedObject:]
--[WebDefaultUIDelegate(WebContextMenu) appendDefaultItems:toArray:]
--[WebPDFRepresentation canProvideDocumentSource]
--[WebPDFView(FileInternal) _anyPDFTagsFoundInMenu:]
--[WebPDFView validateUserInterfaceItem:]
--[WebPDFView validateUserInterfaceItemWithoutDelegate:]
--[PDFPrefUpdatingProxy methodSignatureForSelector:]
--[WebPDFView(FileInternal) _PDFSubview]
--[PDFPrefUpdatingProxy forwardInvocation:]
--[WebPDFView viewState]
--[WebPDFView dealloc]
--[WebPDFView setViewState:]
--[NSMutableDictionary(WebNSDictionaryExtras) _webkit_setInt:forKey:]
--[WebPDFView deselectAll]
--[WebView(WebPendingPublic) markAllMatchesForText:caseSensitive:highlight:limit:]
--[WebPDFView setMarkedTextMatchesAreHighlighted:]
--[WebPDFView markAllMatchesForText:caseSensitive:limit:]
--[WebPDFView(FileInternal) _nextMatchFor:direction:caseSensitive:wrap:fromSelection:startInSelection:]
--[WebPDFView(FileInternal) _setTextMatches:]
--[WebPDFView searchFor:direction:caseSensitive:wrap:startInSelection:]
--[WebView(WebPendingPublic) unmarkAllTextMatches]
--[WebPDFView unmarkAllTextMatches]
--[WebView(WebViewEditingActions) scrollLineDown:]
--[WebView(WebViewEditingActions) _performResponderOperation:with:]
--[WebView(WebFileInternal) _responderForResponderOperations]
--[NSView(WebExtras) _web_firstResponderIsSelfOrDescendantView]
--[WebPDFView scrollLineDown:]
--[WebPDFView(FileInternal) _fakeKeyEventWithFunctionKey:]
--[WebHTMLView namesOfPromisedFilesDroppedAtDestination:]
--[NSFileManager(WebNSFileManagerExtras) _webkit_pathWithUniqueFilenameForPath:]
--[WebView _autoscrollForDraggingInfo:timeDelta:]
--[WebHTMLView(WebPrivate) pasteboardChangedOwner:]
--[_WebCoreHistoryProvider containsURL:length:]
--[WebHistory containsItemForURLString:]
--[WebHistoryPrivate containsItemForURLString:]
-_WKSetUpFontCache
--[WebHTMLView dataSourceUpdated:]
-__ZN20WebFrameLoaderClient39postProgressEstimateChangedNotificationEv
-__ZN20WebFrameLoaderClient31dispatchDidReceiveContentLengthEPN7WebCore14DocumentLoaderEmi
-__Z24CallResourceLoadDelegatePFP11objc_objectS0_P13objc_selectorzEP7WebViewS2_S0_iS0_
-__Z12CallDelegatePFP11objc_objectS0_P13objc_selectorzEP7WebViewS0_S2_S0_iS0_
--[WebHTMLRepresentation finishedLoadingWithDataSource:]
--[WebView(WebViewEditing) isEditable]
+-[WebPDFView selectionView]
+-[WebPDFView hitTest:]
++[WebURLsWithTitles URLsFromPasteboard:]
++[WebView(WebPrivate) canShowFile:]
++[WebView(WebPrivate) _MIMETypeForFile:]
-[WebBaseNetscapePluginView viewWillMoveToHostWindow:]
-[WebBaseNetscapePluginView viewDidMoveToHostWindow]
-__ZN20WebContextMenuClient11downloadURLERKN7WebCore4KURLE
--[WebView(WebPrivate) _downloadURL:]
--[WebDownload _initWithRequest:delegate:directory:]
--[WebDownload _setRealDelegate:]
--[WebDownloadInternal setRealDelegate:]
--[WebDownload initWithRequest:delegate:]
--[WebDownload init]
--[WebDownloadInternal respondsToSelector:]
--[WebDownloadInternal downloadDidBegin:]
--[WebDownloadInternal download:didReceiveResponse:]
--[WebDownloadInternal download:decideDestinationWithSuggestedFilename:]
--[WebDownloadInternal download:didCreateDestination:]
--[WebDownloadInternal download:didReceiveDataOfLength:]
--[WebDownloadInternal downloadDidFinish:]
--[WebDownload dealloc]
--[WebDownloadInternal dealloc]
--[WebFramePolicyListener download]
-__ZN20WebFrameLoaderClient8downloadEPN7WebCore14ResourceHandleERKNS0_15ResourceRequestES5_RKNS0_16ResourceResponseE
--[WebDownload _initWithLoadingConnection:request:response:delegate:proxy:]
-__ZNK20WebFrameLoaderClient25setOriginalURLForDownloadEP11WebDownloadRKN7WebCore15ResourceRequestE
-+[WebStringTruncator widthOfString:font:]
--[WebBackForwardList backListCount]
--[WebBackForwardList itemAtIndex:]
--[NSEvent(WebExtras) _web_isDeleteKeyEvent]
--[NSEvent(WebExtras) _web_isKeyEvent:]
--[WebBaseNetscapePluginView keyDown:]
-_WKSendKeyEventToTSM
-__Z15TSMEventHandlerP25OpaqueEventHandlerCallRefP14OpaqueEventRefPv
--[WebBaseNetscapePluginView keyUp:]
-__ZN20WebFrameLoaderClient22createJavaAppletWidgetERKN7WebCore7IntSizeEPNS0_7ElementERKNS0_4KURLERKN3WTF6VectorINS0_6StringELm0EEESE_
--[WebFrameBridge viewForJavaAppletWithFrame:attributeNames:attributeValues:baseURL:DOMElement:]
--[WebPluginController webPlugInContainerShowStatus:]
--[NSEvent(WebExtras) _web_isEscapeKeyEvent]
--[WebView(WebIBActions) makeTextSmaller:]
--[WebHTMLView(WebTextSizing) _makeTextSmaller:]
--[WebView(WebIBActions) makeTextStandardSize:]
--[WebHTMLView(WebTextSizing) _makeTextStandardSize:]
--[WebView(WebIBActions) makeTextLarger:]
--[WebHTMLView(WebTextSizing) _makeTextLarger:]
--[WebView initWithCoder:]
--[WebFrameView initWithCoder:]
--[WebPreferences initWithCoder:]
-+[WebPreferences(WebInternal) _concatenateKeyWithIBCreatorID:]
--[WebView setPreferences:]
--[WebPreferences setMinimumFontSize:]
--[WebHTMLRepresentation documentSource]
--[WebFrame loadData:MIMEType:textEncodingName:baseURL:]
--[WebView(WebViewInternal) _userVisibleBundleVersionFromFullVersion:]
--[WebDefaultPolicyDelegate webView:decidePolicyForNavigationAction:request:frame:decisionListener:]
-+[WebPreferences(WebPrivate) _checkLastReferenceForIdentifier:]
--[WebPreferences dealloc]
--[WebPreferencesPrivate dealloc]
--[WebBackForwardList backListWithLimit:]
-__Z15vectorToNSArrayRN3WTF6VectorINS_6RefPtrIN7WebCore11HistoryItemEEELm0EEE
-__ZN3WTF6VectorINS_6RefPtrIN7WebCore11HistoryItemEEELm0EE6shrinkEm
--[WebHistoryItem(WebPrivate) targetItem]
--[WebHTMLView(WebDocumentInternalProtocols) setMarkedTextMatchesAreHighlighted:]
--[WebHTMLView(WebDocumentInternalProtocols) markAllMatchesForText:caseSensitive:limit:]
--[WebHTMLView(WebDocumentPrivateProtocols) searchFor:direction:caseSensitive:wrap:startInSelection:]
--[WebHTMLView(WebDocumentInternalProtocols) unmarkAllTextMatches]
--[WebFrameView(WebPrivate) _contentView]
--[WebHTMLView(WebDocumentPrivateProtocols) selectionView]
--[WebView(WebPendingPublic) rectsForTextMatches]
--[WebHTMLView(WebDocumentInternalProtocols) rectsForTextMatches]
--[WebHTMLView(WebDocumentPrivateProtocols) selectionRect]
--[WebHTMLView(WebDocumentPrivateProtocols) selectionTextRects]
-__ZN3WTF6VectorIN7WebCore9FloatRectELm0EE6shrinkEm
--[WebHTMLView(WebDocumentPrivateProtocols) selectionImageForcingBlackText:]
--[WebHTMLView(WebDocumentPrivateProtocols) selectedString]
-__Z8hexDigiti
-__ZNK20WebFrameLoaderClient14willUseArchiveEPN7WebCore14ResourceLoaderERKNS0_15ResourceRequestERKNS0_4KURLE
-__ZNK20WebFrameLoaderClient22canUseArchivedResourceEP12NSURLRequest
--[WebDataSource(WebInternal) _archivedSubresourceForURL:]
-+[WebHistoryItem(WebPrivate) _releaseAllPendingPageCaches]
--[WebView initWithFrame:]
--[WebView stringByEvaluatingJavaScriptFromString:]
--[WebFrameView(WebPrivate) _hasScrollBars]
--[WebFrameView(WebPrivate) _largestChildWithScrollBars]
-__ZN15WebEditorClient17userVisibleStringEP5NSURL
-_WKGetExtensionsForMIMEType
-_WKSetPatternBaseCTM
--[DOMNode(WebDOMNodeOperations) _subresourceURLs]
--[DOMHTMLScriptElement(WebDOMHTMLScriptElementOperationsPrivate) _subresourceURLs]
--[DOMHTMLLinkElement(WebDOMHTMLLinkElementOperationsPrivate) _subresourceURLs]
--[DOMHTMLBodyElement(WebDOMHTMLBodyElementOperationsPrivate) _subresourceURLs]
--[DOMHTMLInputElement(WebDOMHTMLInputElementOperationsPrivate) _subresourceURLs]
-+[WebView(WebPrivate) _decodeData:]
--[WebPreferences userStyleSheetLocation]
--[WebPreferences setUserStyleSheetEnabled:]
--[WebPreferences(WebPrivate) setDeveloperExtrasEnabled:]
-__ZN18WebInspectorClient19inspectedURLChangedERKN7WebCore6StringE
-__ZNK18WebInspectorClient17updateWindowTitleEv
--[WebView(WebPrivate) inspector]
--[WebInspector initWithWebView:]
--[WebInspector show:]
-__ZN18WebInspectorClient10createPageEv
--[WebInspectorWindowController initWithInspectedWebView:]
--[WebInspectorWindowController init]
--[WebPreferences init]
--[WebPreferences setLoadsImagesAutomatically:]
--[WebPreferences(WebPrivate) setAuthorAndUserStylesEnabled:]
--[WebPreferences setJavaScriptEnabled:]
--[WebPreferences setAllowsAnimatedImages:]
--[WebPreferences setPlugInsEnabled:]
--[WebPreferences setJavaEnabled:]
--[WebPreferences setTabsToLinks:]
--[WebPreferences setMinimumLogicalFontSize:]
--[WebView setDrawsBackground:]
--[WebView(WebPrivate) setProhibitsMainFrameScrolling:]
--[WebInspectorWindowController webView]
--[WebDefaultPolicyDelegate webView:decidePolicyForMIMEType:request:frame:decisionListener:]
-__ZN18WebInspectorClient19localizedStringsURLEv
-__ZN18WebInspectorClient10showWindowEv
--[WebInspectorWindowController window]
-_WKNSWindowMakeBottomCornersSquare
--[WebInspectorWindowController showWindow:]
--[WebDefaultUIDelegate webViewFirstResponder:]
--[WebDefaultUIDelegate webView:didDrawRect:]
--[WebInspectorWindowController windowShouldClose:]
--[WebInspector showConsole:]
--[WebDefaultUIDelegate webView:makeFirstResponder:]
-__ZN18WebInspectorClient12attachWindowEv
--[WebInspectorWindowController attach]
--[WebInspectorWindowController close]
--[WebInspectorWindowController animationDidEnd:]
-__ZN18WebInspectorClient12detachWindowEv
--[WebInspectorWindowController detach]
--[WebView setShouldCloseWithWindow:]
--[WebFrame globalContext]
-__ZN15WebEditorClient18shouldBeginEditingEPN7WebCore5RangeE
--[WebDefaultEditingDelegate webView:shouldBeginEditingInDOMRange:]
-__ZN15WebEditorClient15didBeginEditingEv
-__ZN15WebEditorClient25shouldShowDeleteInterfaceEPN7WebCore11HTMLElementE
--[WebDefaultEditingDelegate webView:shouldShowDeleteInterfaceForElement:]
--[WebDefaultEditingDelegate undoManagerForWebView:]
-__ZN15WebEditorClient16shouldEndEditingEPN7WebCore5RangeE
--[WebDefaultEditingDelegate webView:shouldEndEditingInDOMRange:]
-__ZN15WebEditorClient13didEndEditingEv
--[WebView(WebFileInternal) _isLoading]
--[WebDefaultUIDelegate webView:didScrollDocumentInFrameView:]
--[WebFrameBridge setIsSelected:forView:]
--[WebViewFactory contextMenuItemTagInspectElement]
-__ZN18WebInspectorClient9highlightEPN7WebCore4NodeE
--[WebInspectorWindowController highlightAndScrollToNode:]
--[WebInspectorWindowController highlightNode:]
--[WebNodeHighlight initWithTargetView:]
--[WebNodeHighlight(FileInternal) _computeHighlightWindowFrame]
--[WebNodeHighlightView initWithWebNodeHighlight:]
--[WebNodeHighlightView setFractionFadedIn:]
--[WebNodeHighlight setDelegate:]
--[WebNodeHighlight attachHighlight]
--[WebNodeHighlightView drawRect:]
--[WebNodeHighlightView(FileInternal) _holes]
--[WebNodeHighlight highlightedNode]
--[WebNodeHighlight targetView]
--[NSView(WebExtras) _web_convertRect:toView:]
--[WebNodeHighlight show]
--[WebNodeHighlightView fractionFadedIn]
--[WebNodeHighlight setHighlightedNode:]
--[WebNodeHighlight highlightView]
--[WebNodeHighlightFadeInAnimation setCurrentProgress:]
--[WebNodeHighlight(FileInternal) _animateFadeIn:]
--[WebNodeHighlight animationDidEnd:]
--[WebNodeHighlight(FileInternal) _repositionHighlightWindow]
--[WebFrameView _goBack]
-__ZN18WebInspectorClient13hideHighlightEv
--[WebInspectorWindowController hideHighlight]
--[WebNodeHighlight hide]
--[WebInspector webViewClosed]
-__ZN18WebInspectorClient11closeWindowEv
--[WebNodeHighlight detachHighlight]
--[WebNodeHighlightView detachFromWebNodeHighlight]
--[WebNodeHighlight dealloc]
--[WebInspectorWindowController dealloc]
--[WebNodeHighlightView dealloc]
--[WebView customUserAgent]
-+[WebCoreStatistics setShouldPrintExceptions:]
-+[WebKitStatistics webViewCount]
-+[WebKitStatistics frameCount]
-+[WebKitStatistics dataSourceCount]
-+[WebKitStatistics viewCount]
-+[WebKitStatistics HTMLRepresentationCount]
-+[WebKitStatistics bridgeCount]
-+[WebCoreStatistics javaScriptProtectedGlobalObjectsCount]
-+[WebCoreStatistics statistics]
-+[WebCache statistics]
-+[WebCoreStatistics javaScriptObjectsCount]
-+[WebCoreStatistics javaScriptGlobalObjectsCount]
-+[WebCoreStatistics javaScriptProtectedObjectsCount]
-+[WebCoreStatistics javaScriptProtectedObjectTypeCounts]
-+[WebCoreStatistics iconPageURLMappingCount]
-+[WebCoreStatistics iconRetainedPageURLCount]
-+[WebCoreStatistics iconRecordCount]
-+[WebCoreStatistics iconsWithDataCount]
-+[WebCoreStatistics garbageCollectJavaScriptObjects]
--[WebHTMLView(WebPrivate) _hasInsertionPoint]
--[WebHTMLRepresentation canSaveAsWebArchive]
-+[WebView(WebPrivate) suggestedFileExtensionForMIMEType:]
--[WebHTMLRepresentation DOMDocument]
+__ZN13WebDragClient22createDragImageForLinkERN7WebCore4KURLERKNS0_6StringEPNS0_5FrameE
+-[WebHTMLView(WebPrivate) _dragImageForURL:withLabel:]
+-[NSString(WebKitExtras) _web_drawDoubledAtPoint:withTopColor:bottomColor:font:]
++[WebURLsWithTitles titlesFromPasteboard:]
-[WebFrameView documentViewShouldHandlePrint]
-[WebFrameView printOperationWithPrintInfo:]
-[WebFrameView canPrintHeadersAndFooters]
@@ -1678,25 +1567,92 @@ __ZN18WebInspectorClient11closeWindowEv
-[NSPrintOperation(WebKitExtras) _web_pageSetupScaleFactor]
-[WebView(WebViewPrintingPrivate) _headerHeight]
__Z28CallUIDelegateReturningFloatP7WebViewP13objc_selector
-__Z26CallDelegateReturningFloatP7WebViewP11objc_objectP13objc_selector
+__ZL26CallDelegateReturningFloatP7WebViewP11objc_objectP13objc_selector
-[WebView(WebViewPrintingPrivate) _footerHeight]
-[WebHTMLView _scaleFactorForPrintOperation:]
-[WebHTMLView(WebHTMLViewFileInternal) _calculatePrintHeight]
+-[WebFrame(WebInternal) _computePageRectsWithPrintWidthScaleFactor:printHeight:]
-[WebHTMLView _provideTotalScaleFactorForPrintOperation:]
-[WebHTMLView beginDocument]
-[WebHTMLView rectForPage:]
--[WebHTMLView endDocument]
--[WebHTMLView _endPrintMode]
-[WebHTMLView drawPageBorderWithSize:]
-[WebView(WebViewPrintingPrivate) _drawHeaderAndFooter]
-[WebView(WebViewPrintingPrivate) _drawHeaderInRect:]
__Z14CallUIDelegateP7WebViewP13objc_selector7_NSRect
-__Z12CallDelegateP7WebViewP11objc_objectP13objc_selector7_NSRect
+__ZL12CallDelegateP7WebViewP11objc_objectP13objc_selector7_NSRect
-[WebView(WebViewPrintingPrivate) _drawFooterInRect:]
-_NPN_MemAlloc
--[WebBaseNetscapePluginView fixWindowPort]
-_WKCGContextIsBitmapContext
-_WKCallDrawingNotification
+-[WebHTMLView endDocument]
+-[WebHTMLView _endPrintMode]
+-[WebFrameView _horizontalKeyboardScrollDistance]
+-[WebFrameView _scrollHorizontallyBy:]
+-[WebFrameView scrollToEndOfDocument:]
+-[WebFrameView _goForward]
+-[WebFrameView _goBack]
+-[WebHTMLView _wantsKeyDownForEvent:]
+-[WebHTMLView(WebPrivate) _isEditable]
+-[WebHTMLView(WebInternal) isGrammarCheckingEnabled]
+-[WebHTMLView(WebDocumentPrivateProtocols) supportsTextEncoding]
+-[WebView customTextEncodingName]
+-[WebView _mainFrameOverrideEncoding]
+__ZN20WebFrameLoaderClient38dispatchDidLoadResourceFromMemoryCacheEPN7WebCore14DocumentLoaderERKNS0_15ResourceRequestERKNS0_16ResourceResponseEi
+__ZL12CallDelegatePFP11objc_objectS0_P13objc_selectorzEP7WebViewS0_S2_S0_S0_iS0_
+-[NSString(WebNSURLExtras) _webkit_looksLikeAbsoluteURL]
+-[NSString(WebNSURLExtras) _webkit_rangeOfURLScheme]
+__ZN20WebContextMenuClient18lookUpInDictionaryEPN7WebCore5FrameE
+-[WebHTMLView(WebInternal) _lookUpInDictionaryFromMenu:]
+-[WebHTMLView(WebDocumentPrivateProtocols) selectedAttributedString]
+-[WebHTMLView(WebHTMLViewFileInternal) _selectedRange]
+-[WebHTMLView(WebDocumentPrivateProtocols) _attributeStringFromDOMRange:]
+-[WebView(WebPendingPublic) setHoverFeedbackSuspended:]
+-[WebHTMLView(WebInternal) _hoverFeedbackSuspendedChanged]
+-[WebView elementAtPoint:]
+-[WebView _elementAtWindowPoint:]
+-[WebHTMLView(WebDocumentInternalProtocols) elementAtPoint:]
+-[WebPreferences userStyleSheetLocation]
+-[WebView initWithCoder:]
+-[WebFrameView initWithCoder:]
+-[WebPreferences initWithCoder:]
++[WebPreferences(WebInternal) _concatenateKeyWithIBCreatorID:]
+-[WebView setPreferences:]
+-[WebPreferences setMinimumFontSize:]
+-[NSMutableDictionary(WebNSDictionaryExtras) _webkit_setInt:forKey:]
+-[WebHTMLRepresentation documentSource]
+-[WebFrame loadData:MIMEType:textEncodingName:baseURL:]
+-[WebDefaultPolicyDelegate webView:decidePolicyForNavigationAction:request:frame:decisionListener:]
+-[WebDefaultEditingDelegate undoManagerForWebView:]
++[WebPreferences(WebPrivate) _checkLastReferenceForIdentifier:]
+-[WebPreferences dealloc]
+-[WebPreferencesPrivate dealloc]
+-[WebHTMLRepresentation canSaveAsWebArchive]
+-[WebFrame(WebInternal) _canSaveAsWebArchive]
++[WebView(WebPrivate) suggestedFileExtensionForMIMEType:]
+WKGetPreferredExtensionForMIMEType
+__ZN3WTF6VectorINS_6RefPtrIN7WebCore7ArchiveEEELm0EE6shrinkEm
+-[WebNetscapePluginDocumentView(Internal) _printedPluginBitmap]
+-[WebPreferences setShouldPrintBackgrounds:]
+WKGetExtensionsForMIMEType
+-[WebHistoryItem(WebPrivate) _lastVisitedDate]
+-[WebPreferences init]
+-[WebPreferences(WebPrivate) setApplicationChromeModeEnabled:]
+-[WebPreferences setLoadsImagesAutomatically:]
+-[WebPreferences(WebPrivate) setAuthorAndUserStylesEnabled:]
+-[WebPreferences setJavaScriptEnabled:]
+-[WebPreferences setAllowsAnimatedImages:]
+-[WebPreferences setPlugInsEnabled:]
+-[WebPreferences setJavaEnabled:]
+-[WebPreferences setUserStyleSheetEnabled:]
+-[WebPreferences setTabsToLinks:]
+-[WebPreferences setMinimumLogicalFontSize:]
+-[WebHistoryItem(WebPrivate) _setTransientProperty:forKey:]
+-[WebHistoryItem(WebPrivate) _setLastVisitWasFailure:]
+-[WebBackForwardList backItem]
+-[WebFrame globalContext]
+-[WebFrame windowObject]
+WKAdvanceDefaultButtonPulseAnimation
+-[WKAppKitDrawDecoyWindow isKeyWindow]
+-[WebPDFView deselectAll]
+-[WebPDFView viewState]
+-[WebPDFView dealloc]
__ZN20WebFrameLoaderClient41dispatchDidReceiveAuthenticationChallengeEPN7WebCore14DocumentLoaderEmRKNS0_23AuthenticationChallengeE
+[WebPanelAuthenticationHandler sharedHandler]
-[WebPanelAuthenticationHandler init]
@@ -1712,22 +1668,27 @@ __ZN20WebFrameLoaderClient41dispatchDidReceiveAuthenticationChallengeEPN7WebCore
-[WebPanelAuthenticationHandler _authenticationDoneWithChallenge:result:]
-[WebAuthenticationPanel dealloc]
-[WebPanelAuthenticationHandler tryNextChallengeForWindow:]
+-[WebAuthenticationPanel cancel:]
++[WebStringTruncator rightTruncateString:toWidth:withFont:]
-[WebDownloadInternal download:shouldDecodeSourceDataOfMIMEType:]
-__ZN20WebFrameLoaderClient20redirectDataToPluginEPN7WebCore6WidgetE
--[WebFrameBridge redirectDataToPlugin:]
--[WebHTMLRepresentation _redirectDataToManualLoader:forPluginView:]
--[WebPluginController pluginView:receivedResponse:]
--[WebPluginController pluginView:receivedError:]
--[WebPluginController pluginView:receivedData:]
-__ZN15WebChromeClient12canTakeFocusEN7WebCore14FocusDirectionE
-__ZN15WebChromeClient9takeFocusEN7WebCore14FocusDirectionE
--[WebView(WebViewInternal) _becomingFirstResponderFromOutside]
+__ZN20WebFrameLoaderClient25pluginWillHandleLoadErrorERKN7WebCore16ResourceResponseE
+WKDrawMediaUIPart
+__Z24createCGImageRefFromDataPKhj
+__Z14drawMediaImageP9CGContext6CGRectP7CGImage
+WKDrawMediaSliderTrack
+WKQTMovieMaxTimeLoaded
+__ZN20WebContextMenuClient11downloadURLERKN7WebCore4KURLE
+-[WebView(WebPrivate) _downloadURL:]
+-[WebDownload _initWithRequest:delegate:directory:]
+-[WebDownload initWithRequest:delegate:]
+-[WebHTMLView validRequestorForSendType:returnType:]
+-[WebHTMLView(WebDocumentPrivateProtocols) pasteboardTypesForSelection]
+-[WebHTMLView(WebInternal) _canSmartCopyOrDelete]
-[WebPluginController _webPluginContainerCheckIfAllowedToLoadRequest:inFrame:resultObject:selector:]
+[WebPluginContainerCheck checkWithRequest:target:resultObject:selector:controller:]
-[WebPluginContainerCheck initWithRequest:target:resultObject:selector:controller:]
-[WebPluginContainerCheck start]
-[WebPluginContainerCheck _isForbiddenFileLoad]
--[WebPluginController bridge]
-[WebPluginContainerCheck _askPolicyDelegate]
-[WebPluginController webView]
-[WebPluginContainerCheck _actionInformationWithURL:]
@@ -1742,113 +1703,122 @@ __ZN15WebChromeClient9takeFocusEN7WebCore14FocusDirectionE
-[WebPolicyDecisionListener dealloc]
-[WebPolicyDecisionListenerPrivate dealloc]
-[WebPluginContainerCheck dealloc]
--[WebBaseNetscapePluginView(Internal) _redeliverStream]
--[WebBaseNetscapePluginView pluginView:receivedResponse:]
--[WebNetscapePluginStream initWithFrameLoader:]
--[WebBaseNetscapePluginView pluginView:receivedData:]
--[WebBaseNetscapePluginStream plugin]
--[WebBaseNetscapePluginView plugin]
--[WebBaseNetscapePluginView pluginViewFinishedLoading:]
-__ZN13WebDragClient22createDragImageForLinkERN7WebCore4KURLERKNS0_6StringEPNS0_5FrameE
--[WebHTMLView(WebPrivate) _dragImageForURL:withLabel:]
--[NSString(WebKitExtras) _web_drawDoubledAtPoint:withTopColor:bottomColor:font:]
--[WebViewFactory fileButtonChooseFileLabel]
--[WebViewFactory fileButtonNoFileSelectedLabel]
--[WebViewFactory submitButtonDefaultLabel]
-__ZN15WebChromeClient19runJavaScriptPromptEPN7WebCore5FrameERKNS0_6StringES5_RS3_
-__Z14CallUIDelegateP7WebViewP13objc_selectorP11objc_objectS4_S4_
-__Z12CallDelegateP7WebViewP11objc_objectP13objc_selectorS2_S2_S2_
--[WebJavaScriptTextInputPanel initWithPrompt:text:]
--[NSWindow(WebExtras) centerOverMainWindow]
--[WebJavaScriptTextInputPanel pressedOK:]
--[WebJavaScriptTextInputPanel text]
-__ZN15WebEditorClient26shouldMoveRangeAfterDeleteEPN7WebCore5RangeES2_
--[WebDefaultEditingDelegate webView:shouldMoveRangeAfterDelete:replacingRange:]
-__ZN15WebChromeClient18runJavaScriptAlertEPN7WebCore5FrameERKNS0_6StringE
-__ZN15WebChromeClient27runBeforeUnloadConfirmPanelERKN7WebCore6StringEPNS0_5FrameE
-__Z30CallUIDelegateReturningBooleanaP7WebViewP13objc_selectorP11objc_objectS4_
-__Z28CallDelegateReturningBooleanaP7WebViewP11objc_objectP13objc_selectorS2_S2_
-__ZN15WebEditorClient34updateSpellingUIWithMisspelledWordERKN7WebCore6StringE
-__ZN15WebEditorClient17getGuessesForWordERKN7WebCore6StringERN3WTF6VectorIS1_Lm0EEE
-__ZN3WTF6VectorIN7WebCore6StringELm0EE14expandCapacityEm
-__ZN3WTF6VectorIN7WebCore6StringELm0EE15reserveCapacityEm
--[WebViewFactory contextMenuItemTagSpellingMenu]
--[WebViewFactory contextMenuItemTagShowSpellingPanel:]
--[WebViewFactory contextMenuItemTagCheckSpelling]
--[WebViewFactory contextMenuItemTagCheckSpellingWhileTyping]
--[WebViewFactory contextMenuItemTagCheckGrammarWithSpelling]
-__ZN15WebEditorClient19spellingUIIsShowingEv
--[WebViewFactory contextMenuItemTagFontMenu]
--[WebViewFactory contextMenuItemTagShowFonts]
--[WebViewFactory contextMenuItemTagBold]
--[WebViewFactory contextMenuItemTagItalic]
--[WebViewFactory contextMenuItemTagUnderline]
--[WebViewFactory contextMenuItemTagOutline]
--[WebViewFactory contextMenuItemTagStyles]
--[WebViewFactory contextMenuItemTagShowColors]
--[WebViewFactory contextMenuItemTagSpeechMenu]
--[WebViewFactory contextMenuItemTagStartSpeaking]
--[WebViewFactory contextMenuItemTagStopSpeaking]
--[WebViewFactory contextMenuItemTagWritingDirectionMenu]
--[WebViewFactory contextMenuItemTagDefaultDirection]
--[WebViewFactory contextMenuItemTagLeftToRight]
--[WebViewFactory contextMenuItemTagRightToLeft]
-__ZN15WebEditorClient21toggleGrammarCheckingEv
--[WebView(WebViewGrammarChecking) toggleGrammarChecking:]
--[WebView(WebViewGrammarChecking) setGrammarCheckingEnabled:]
-__ZN15WebEditorClient20checkGrammarOfStringEPKtiRN3WTF6VectorIN7WebCore13GrammarDetailELm0EEEPiS8_
-__ZN3WTF6VectorIN7WebCore13GrammarDetailELm0EE14expandCapacityEmPKS2_
-__ZN3WTF6VectorIN7WebCore13GrammarDetailELm0EE14expandCapacityEm
-__ZN3WTF6VectorIN7WebCore13GrammarDetailELm0EE15reserveCapacityEm
-__ZN3WTF6VectorIN7WebCore6StringELm0EEC2ERKS3_
-__ZN3WTF6VectorIN7WebCore6StringELm0EE14expandCapacityEmPKS2_
-__ZN3WTF6VectorIN7WebCore6StringELm0EE6shrinkEm
--[WebHTMLView selectAll:]
--[WebHTMLView executeCoreCommandBySelector:]
--[WebHTMLView callDelegateDoCommandBySelectorIfNeeded:]
--[WebHTMLView showGuessPanel:]
--[WebHTMLView ignoreSpelling:]
--[WebHTMLView checkSpelling:]
-__ZN15WebEditorClient33updateSpellingUIWithGrammarStringERKN7WebCore6StringERKNS0_13GrammarDetailE
--[WebHTMLView changeSpelling:]
--[WebHTMLView _changeSpellingToWord:]
--[WebHTMLView(WebHTMLViewFileInternal) _shouldReplaceSelectionWithText:givenAction:]
--[WebHTMLView(WebHTMLViewFileInternal) _selectedRange]
--[WebHTMLView(WebHTMLViewFileInternal) _shouldInsertText:replacingDOMRange:givenAction:]
--[WebView windowScriptObject]
--[WebView setCustomTextEncodingName:]
+-[WebPluginController destroyPlugin:]
-[WebPreferences setStandardFontFamily:]
-[WebPreferences _setStringValue:forKey:]
-[WebPreferences setDefaultFontSize:]
+-[WebPreferences setFixedFontFamily:]
+-[WebPreferences setDefaultFixedFontSize:]
-[WebPreferences setDefaultTextEncodingName:]
+-[WebHTMLRepresentation currentForm]
+[WebDatabaseManager sharedWebDatabaseManager]
-[WebDatabaseManager origins]
--[WebFrameBridge runOpenPanelForFileButtonWithResultListener:]
-_WKCreateCustomCFReadStream
-_WKSignalCFReadStreamHasBytes
-_WKSignalCFReadStreamEnd
--[WebHTMLView copy:]
-__ZN15WebEditorClient24smartInsertDeleteEnabledEv
-__ZN15WebEditorClient33didSetSelectionTypesForPasteboardEv
--[WebDefaultEditingDelegate webView:didSetSelectionTypesForPasteboard:]
-__ZN15WebEditorClient24dataForArchivedSelectionEPN7WebCore5FrameE
-+[WebArchiver archiveSelectionInFrame:]
--[DOMHTMLTableCellElement(WebDOMHTMLTableCellElementOperationsPrivate) _subresourceURLs]
--[DOMHTMLTableCellElement(WebDOMHTMLTableCellElementOperationsPrivate) _web_background]
--[DOMHTMLTableElement(WebDOMHTMLTableElementOperationsPrivate) _subresourceURLs]
--[DOMHTMLTableElement(WebDOMHTMLTableElementOperationsPrivate) _web_background]
-__ZN15WebEditorClient29didWriteSelectionToPasteboardEv
--[WebDefaultEditingDelegate webView:didWriteSelectionToPasteboard:]
--[WebView(WebPendingPublic) setHoverFeedbackSuspended:]
--[WebHTMLView(WebInternal) _hoverFeedbackSuspendedChanged]
--[WebView elementAtPoint:]
--[WebView _elementAtWindowPoint:]
--[WebHTMLView(WebDocumentInternalProtocols) elementAtPoint:]
-+[WebIconDatabase(WebPrivate) _checkIntegrityBeforeOpening]
--[WebPDFRepresentation receivedError:withDataSource:]
+-[WebPreferences(WebPrivate) setDeveloperExtrasEnabled:]
+-[WebHTMLView(WebInternal) toggleGrammarChecking:]
+-[WebView(WebViewGrammarChecking) toggleGrammarChecking:]
+-[WebView(WebViewGrammarChecking) setGrammarCheckingEnabled:]
+__ZN18WebInspectorClient19inspectedURLChangedERKN7WebCore6StringE
+__ZNK18WebInspectorClient17updateWindowTitleEv
+-[WebView(WebPendingPublic) zoomPageIn:]
+-[WebView _zoomIn:isTextOnly:]
+-[WebView(WebPendingPublic) zoomPageOut:]
+-[WebView _zoomOut:isTextOnly:]
+-[WebPreferences(WebPrivate) setZoomsTextOnly:]
+-[WebView(WebIBActions) canMakeTextSmaller]
+-[WebView(WebIBActions) makeTextSmaller:]
+-[WebView(WebIBActions) canMakeTextLarger]
+-[WebView(WebIBActions) makeTextLarger:]
+-[WebView(WebPendingPublic) resetPageZoom:]
+-[WebView _resetZoom:isTextOnly:]
+-[WebView(WebIBActions) makeTextStandardSize:]
+-[WebView setCustomTextEncodingName:]
+-[WebView(WebPrivate) inspector]
+-[WebInspector initWithWebView:]
+-[WebInspector isDebuggingJavaScript]
+-[WebInspector isProfilingJavaScript]
+-[WebView customUserAgent]
+-[WebView setCustomUserAgent:]
+-[WebFrame reloadFromOrigin]
+-[WebView setShouldCloseWithWindow:]
+-[WebView(WebPrivate) setProhibitsMainFrameScrolling:]
+-[WebDefaultPolicyDelegate webView:decidePolicyForMIMEType:request:frame:decisionListener:]
+-[WebFrame(WebPrivate) _setIsDisconnected:]
+-[WebDefaultUIDelegate webViewFirstResponder:]
+-[WebDefaultUIDelegate webView:didDrawRect:]
+__ZN18WebInspectorClient11closeWindowEv
+-[WebView(WebIBActions) _responderValidateUserInterfaceItem:]
+-[WebView(WebFileInternal) _responderForResponderOperations]
+-[NSView(WebExtras) _web_firstResponderIsSelfOrDescendantView]
+-[WebViewFactory contextMenuItemTagInspectElement]
+__ZN18WebInspectorClient10createPageEv
+-[WebInspectorWindowController initWithInspectedWebView:]
+-[WebInspectorWindowController init]
+-[WebView setDrawsBackground:]
+-[WebInspectorWindowController webView]
+__ZN18WebInspectorClient19localizedStringsURLEv
+__ZN18WebInspectorClient13hideHighlightEv
+-[WebInspectorWindowController hideHighlight]
+__ZN18WebInspectorClient10showWindowEv
+-[WebInspectorWindowController window]
+WKNSWindowMakeBottomCornersSquare
+-[WebInspectorWindowController showWindow:]
+-[WebInspectorWindowController setAttachedWindowHeight:]
+__ZN18WebInspectorClient12attachWindowEv
+-[WebInspectorWindowController attach]
+__ZN18WebInspectorClient9highlightEPN7WebCore4NodeE
+-[WebInspectorWindowController highlightNode:]
+-[WebNodeHighlight initWithTargetView:inspectorController:]
+-[WebNodeHighlight(FileInternal) _computeHighlightWindowFrame]
+-[WebNodeHighlightView initWithWebNodeHighlight:]
+-[WebNodeHighlightView isFlipped]
+-[WebNodeHighlight setDelegate:]
+-[WebNodeHighlight attach]
+-[WebNodeHighlightView drawRect:]
+-[WebNodeHighlight inspectorController]
+-[WebInspectorWindowController didAttachWebNodeHighlight:]
+-[WebView setCurrentNodeHighlight:]
+-[WebView(WebPrivate) drawRect:]
+-[WebNodeHighlight targetView]
+-[WebNodeHighlight setNeedsUpdateInTargetViewRect:]
+-[WebNodeHighlight detach]
+-[WebInspectorWindowController willDetachWebNodeHighlight:]
+-[WebNodeHighlightView detachFromWebNodeHighlight]
+-[WebNodeHighlight dealloc]
+-[WebNodeHighlightView dealloc]
+-[WebDefaultUIDelegate webView:makeFirstResponder:]
+-[WebNodeHighlight highlightView]
+__ZN15WebEditorClient20checkGrammarOfStringEPKtiRN3WTF6VectorIN7WebCore13GrammarDetailELm0EEEPiS8_
+__ZN3WTF6VectorIN7WebCore13GrammarDetailELm0EE14expandCapacityEmPKS2_
+__ZN3WTF6VectorIN7WebCore13GrammarDetailELm0EE14expandCapacityEm
+__ZN3WTF6VectorIN7WebCore13GrammarDetailELm0EE15reserveCapacityEm
+__ZN3WTF6VectorIN7WebCore6StringELm0EEC1ERKS3_
+__ZN18WebInspectorClient12detachWindowEv
+-[WebInspectorWindowController detach]
+-[WebInspectorWindowController close]
+-[WebDefaultUIDelegate webViewFrame:]
+-[WebDefaultUIDelegate webView:setFrame:]
+-[WebDefaultUIDelegate webView:didScrollDocumentInFrameView:]
+-[WebDefaultUIDelegate webViewFocus:]
+-[WebInspectorWindowController windowShouldClose:]
+-[WebInspector webViewClosed]
+-[WebInspectorWindowController dealloc]
+-[WebHistory removeAllItems]
+-[WebHistoryPrivate removeAllItems]
+-[WebIconDatabase(WebPendingPublic) removeAllIcons]
+__ZN21WebIconDatabaseClient25dispatchDidRemoveAllIconsEv
+-[WebIconDatabase(WebInternal) _sendDidRemoveAllIconsNotification]
-[WebViewFactory resetButtonDefaultLabel]
-_NPN_GetJavaEnv
-_NPN_GetJavaPeer
+-[WebViewFactory submitButtonDefaultLabel]
+-[WebHTMLView selectAll:]
+-[NSURL(WebNSURLExtras) _webkit_isJavaScriptURL]
+-[WebViewFactory fileButtonNoFileSelectedLabel]
+-[WebBackForwardList removeItem:]
+-[WebViewFactory searchableIndexIntroduction]
+__ZN15WebEditorClient26shouldMoveRangeAfterDeleteEPN7WebCore5RangeES2_
+-[WebDefaultEditingDelegate webView:shouldMoveRangeAfterDelete:replacingRange:]
+__ZN3WTF6VectorIN7WebCore6StringELm0EE14expandCapacityEmPKS2_
+__ZN3WTF6VectorIN7WebCore6StringELm0EE14expandCapacityEm
+__ZN3WTF6VectorIN7WebCore6StringELm0EE15reserveCapacityEm
__ZNK15WebEditorClient7canUndoEv
__ZN15WebEditorClient4undoEv
-[WebEditorUndoTarget undoEditing:]
@@ -1858,20 +1828,19 @@ __ZN15WebChromeClient5printEPN7WebCore5FrameE
__ZNK15WebEditorClient7canRedoEv
__ZN15WebEditorClient4redoEv
-[WebEditorUndoTarget redoEditing:]
--[WebFrameBridge customHighlightRect:forLine:representedNode:]
+-[DOMDocument(WebDOMDocumentOperations) URLWithAttributeString:]
+__ZN15WebChromeClient19customHighlightRectEPN7WebCore4NodeERKNS0_12AtomicStringERKNS0_9FloatRectE
-[WebHTMLView(WebInternal) _highlighterForType:]
--[WebFrameBridge paintCustomHighlight:forBox:onLine:behindText:entireLine:representedNode:]
-_WKQTMovieViewSetDrawSynchronously
--[WebViewFactory searchableIndexIntroduction]
-_WKDrawMediaMuteButton
-_drawMediaImage
-_WKDrawMediaPlayButton
-_WKDrawMediaSliderTrack
-_WKDrawMediaSliderThumb
-_WKDrawMediaSeekBackButton
-_WKDrawMediaSeekForwardButton
-_WKQTMovieMaxTimeLoaded
-__ZN20WebFrameLoaderClient12blockedErrorERKN7WebCore15ResourceRequestE
+__ZN15WebChromeClient20paintCustomHighlightEPN7WebCore4NodeERKNS0_12AtomicStringERKNS0_9FloatRectES8_bb
+-[WebDefaultUIDelegate webViewClose:]
+__ZN15WebChromeClient19runJavaScriptPromptEPN7WebCore5FrameERKNS0_6StringES5_RS3_
+__Z14CallUIDelegateP7WebViewP13objc_selectorP11objc_objectS4_S4_
+__ZL12CallDelegateP7WebViewP11objc_objectP13objc_selectorS2_S2_S2_
+-[WebJavaScriptTextInputPanel initWithPrompt:text:]
+-[NSWindow(WebExtras) centerOverMainWindow]
+-[NonBlockingPanel _blocksActionWhenModal:]
+-[WebJavaScriptTextInputPanel pressedOK:]
+-[WebJavaScriptTextInputPanel text]
__ZN15WebChromeClient21exceededDatabaseQuotaEPN7WebCore5FrameERKNS0_6StringE
-[WebSecurityOrigin(WebInternal) _initWithWebCoreSecurityOrigin:]
-[WebSecurityOrigin quota]
@@ -1881,19 +1850,14 @@ __ZN15WebChromeClient21exceededDatabaseQuotaEPN7WebCore5FrameERKNS0_6StringE
__ZN24WebDatabaseTrackerClient23dispatchDidModifyOriginEPN7WebCore14SecurityOriginE
-[WebSecurityOrigin dealloc]
__ZN24WebDatabaseTrackerClient25dispatchDidModifyDatabaseEPN7WebCore14SecurityOriginERKNS0_6StringE
-_WKReleaseStyleGroup
--[WebKeyGenerator strengthMenuItemTitles]
-__ZN15WebChromeClient20runJavaScriptConfirmEPN7WebCore5FrameERKNS0_6StringE
+__ZN15WebChromeClient8runModalEv
+__Z14CallUIDelegateP7WebViewP13objc_selector
+__ZL12CallDelegateP7WebViewP11objc_objectP13objc_selector
+__ZN20WebFrameLoaderClient12blockedErrorERKN7WebCore15ResourceRequestE
+__ZN15WebChromeClient17scrollbarsVisibleEv
__ZN15WebChromeClient15toolbarsVisibleEv
-__Z30CallUIDelegateReturningBooleanaP7WebViewP13objc_selector
-__Z28CallDelegateReturningBooleanaP7WebViewP11objc_objectP13objc_selector
__ZN15WebChromeClient14menubarVisibleEv
-__ZN15WebChromeClient17scrollbarsVisibleEv
--[WebFrameView allowsScrolling]
--[WebDynamicScrollBarsView allowsScrolling]
-__ZN15WebChromeClient16statusbarVisibleEv
-__ZSt25__unguarded_linear_insertIPiiEvT_T0_
--[WebFrame(WebInternal) _internalLoadDelegate]
--[WebFrame(WebInternal) _setInternalLoadDelegate:]
--[WebBaseNetscapePluginView(WebNPPCallbacks) webFrame:didFinishLoadWithError:]
--[WebBaseNetscapePluginView(WebNPPCallbacks) webFrame:didFinishLoadWithReason:]
+-[WebKeyGenerator strengthMenuItemTitles]
+__ZN15WebChromeClient12canTakeFocusEN7WebCore14FocusDirectionE
+__ZN15WebChromeClient9takeFocusEN7WebCore14FocusDirectionE
+-[WebView(WebViewInternal) _becomingFirstResponderFromOutside]
diff --git a/WebKit/mac/WebKitPrefix.h b/WebKit/mac/WebKitPrefix.h
index da2f2d4..3e26ab4 100644
--- a/WebKit/mac/WebKitPrefix.h
+++ b/WebKit/mac/WebKitPrefix.h
@@ -77,6 +77,10 @@ typedef float CGFloat;
#include "EmptyProtocolDefinitions.h"
+#if !defined(BUILDING_ON_LEOPARD) && !defined(BUILDING_ON_TIGER) && defined(__x86_64__)
+#define WTF_USE_PLUGIN_HOST_PROCESS 1
+#endif
+
#include <wtf/Platform.h>
/* WebKit has no way to pull settings from WebCore/config.h for now */
diff --git a/WebKit/mac/WebView/WebArchive.mm b/WebKit/mac/WebView/WebArchive.mm
index c989a9a..c6cc9b1 100644
--- a/WebKit/mac/WebView/WebArchive.mm
+++ b/WebKit/mac/WebView/WebArchive.mm
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2005, 2006, 2007 Apple Inc. All rights reserved.
+ * Copyright (C) 2005, 2006, 2007, 2008 Apple Inc. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
@@ -30,12 +30,13 @@
#import "WebArchiveInternal.h"
#import "WebKitLogging.h"
+#import "WebNSObjectExtras.h"
#import "WebResourceInternal.h"
-#import "WebResourcePrivate.h"
#import "WebTypesInternal.h"
-
+#import <JavaScriptCore/InitializeThreading.h>
#import <WebCore/ArchiveResource.h>
#import <WebCore/LegacyWebArchive.h>
+#import <WebCore/ThreadCheck.h>
#import <WebCore/WebCoreObjCExtras.h>
using namespace WebCore;
@@ -46,8 +47,7 @@ static NSString * const WebMainResourceKey = @"WebMainResource";
static NSString * const WebSubresourcesKey = @"WebSubresources";
static NSString * const WebSubframeArchivesKey = @"WebSubframeArchives";
-@interface WebArchivePrivate : NSObject
-{
+@interface WebArchivePrivate : NSObject {
@public
WebResource *cachedMainResource;
NSArray *cachedSubresources;
@@ -63,18 +63,20 @@ static NSString * const WebSubframeArchivesKey = @"WebSubframeArchives";
@implementation WebArchivePrivate
-#ifndef BUILDING_ON_TIGER
+ (void)initialize
{
+ JSC::initializeThreading();
+#ifndef BUILDING_ON_TIGER
WebCoreObjCFinalizeOnMainThread(self);
-}
#endif
+}
- (id)init
{
self = [super init];
- if (self)
- coreArchive = LegacyWebArchive::create().releaseRef();
+ if (!self)
+ return nil;
+ coreArchive = LegacyWebArchive::create().releaseRef();
return self;
}
@@ -85,9 +87,7 @@ static NSString * const WebSubframeArchivesKey = @"WebSubframeArchives";
[self release];
return nil;
}
-
coreArchive = _coreArchive.releaseRef();
-
return self;
}
@@ -100,7 +100,8 @@ static NSString * const WebSubframeArchivesKey = @"WebSubframeArchives";
{
ASSERT(coreArchive);
ASSERT(newCoreArchive);
- coreArchive->deref();
+ if (coreArchive)
+ coreArchive->deref();
coreArchive = newCoreArchive.releaseRef();
}
@@ -109,9 +110,10 @@ static NSString * const WebSubframeArchivesKey = @"WebSubframeArchives";
if (WebCoreObjCScheduleDeallocateOnMainThread([WebArchivePrivate class], self))
return;
- ASSERT(coreArchive);
- coreArchive->deref();
- coreArchive = 0;
+ if (coreArchive) {
+ coreArchive->deref();
+ coreArchive = 0;
+ }
[cachedMainResource release];
[cachedSubresources release];
@@ -122,9 +124,10 @@ static NSString * const WebSubframeArchivesKey = @"WebSubframeArchives";
- (void)finalize
{
- ASSERT(coreArchive);
- coreArchive->deref();
- coreArchive = 0;
+ if (coreArchive) {
+ coreArchive->deref();
+ coreArchive = 0;
+ }
[super finalize];
}
@@ -135,6 +138,8 @@ static NSString * const WebSubframeArchivesKey = @"WebSubframeArchives";
- (id)init
{
+ WebCoreThreadViolationCheck();
+
self = [super init];
if (!self)
return nil;
@@ -156,6 +161,13 @@ static BOOL isArrayOfClass(id object, Class elementClass)
- (id)initWithMainResource:(WebResource *)mainResource subresources:(NSArray *)subresources subframeArchives:(NSArray *)subframeArchives
{
+#ifdef MAIL_THREAD_WORKAROUND
+ if (needMailThreadWorkaround())
+ return [[self _webkit_invokeOnMainThread] initWithMainResource:mainResource subresources:subresources subframeArchives:subframeArchives];
+#endif
+
+ WebCoreThreadViolationCheck();
+
self = [super init];
if (!self)
return nil;
@@ -207,6 +219,8 @@ static BOOL isArrayOfClass(id object, Class elementClass)
- (id)initWithData:(NSData *)data
{
+ WebCoreThreadViolationCheck();
+
self = [super init];
if (!self)
return nil;
@@ -216,7 +230,13 @@ static BOOL isArrayOfClass(id object, Class elementClass)
#endif
_private = [[WebArchivePrivate alloc] init];
- [_private setCoreArchive:LegacyWebArchive::create(SharedBuffer::wrapNSData(data).get())];
+ RefPtr<LegacyWebArchive> coreArchive = LegacyWebArchive::create(SharedBuffer::wrapNSData(data).get());
+ if (!coreArchive) {
+ [self release];
+ return nil;
+ }
+
+ [_private setCoreArchive:coreArchive.release()];
#if !LOG_DISABLED
CFAbsoluteTime end = CFAbsoluteTimeGetCurrent();
@@ -271,6 +291,13 @@ static BOOL isArrayOfClass(id object, Class elementClass)
- (WebResource *)mainResource
{
+#ifdef MAIL_THREAD_WORKAROUND
+ if (needMailThreadWorkaround())
+ return [[self _webkit_invokeOnMainThread] mainResource];
+#endif
+
+ WebCoreThreadViolationCheck();
+
// Currently from WebKit API perspective, WebArchives are entirely immutable once created
// If they ever become mutable, we'll need to rethink this.
if (!_private->cachedMainResource) {
@@ -284,6 +311,13 @@ static BOOL isArrayOfClass(id object, Class elementClass)
- (NSArray *)subresources
{
+#ifdef MAIL_THREAD_WORKAROUND
+ if (needMailThreadWorkaround())
+ return [[self _webkit_invokeOnMainThread] subresources];
+#endif
+
+ WebCoreThreadViolationCheck();
+
// Currently from WebKit API perspective, WebArchives are entirely immutable once created
// If they ever become mutable, we'll need to rethink this.
if (!_private->cachedSubresources) {
@@ -309,6 +343,13 @@ static BOOL isArrayOfClass(id object, Class elementClass)
- (NSArray *)subframeArchives
{
+#ifdef MAIL_THREAD_WORKAROUND
+ if (needMailThreadWorkaround())
+ return [[self _webkit_invokeOnMainThread] subframeArchives];
+#endif
+
+ WebCoreThreadViolationCheck();
+
// Currently from WebKit API perspective, WebArchives are entirely immutable once created
// If they ever become mutable, we'll need to rethink this.
if (!_private->cachedSubframeArchives) {
@@ -332,6 +373,8 @@ static BOOL isArrayOfClass(id object, Class elementClass)
- (NSData *)data
{
+ WebCoreThreadViolationCheck();
+
#if !LOG_DISABLED
CFAbsoluteTime start = CFAbsoluteTimeGetCurrent();
#endif
@@ -353,6 +396,8 @@ static BOOL isArrayOfClass(id object, Class elementClass)
- (id)_initWithCoreLegacyWebArchive:(PassRefPtr<WebCore::LegacyWebArchive>)coreLegacyWebArchive
{
+ WebCoreThreadViolationCheck();
+
self = [super init];
if (!self)
return nil;
@@ -368,6 +413,8 @@ static BOOL isArrayOfClass(id object, Class elementClass)
- (WebCore::LegacyWebArchive *)_coreLegacyWebArchive
{
+ WebCoreThreadViolationCheck();
+
return [_private coreArchive];
}
diff --git a/WebKit/mac/WebView/WebDataSource.mm b/WebKit/mac/WebView/WebDataSource.mm
index aeff7d7..12afcb3 100644
--- a/WebKit/mac/WebView/WebDataSource.mm
+++ b/WebKit/mac/WebView/WebDataSource.mm
@@ -46,7 +46,6 @@
#import "WebPDFRepresentation.h"
#import "WebResourceInternal.h"
#import "WebResourceLoadDelegate.h"
-#import "WebResourcePrivate.h"
#import "WebViewInternal.h"
#import <WebCore/ApplicationCacheStorage.h>
#import <WebCore/FrameLoader.h>
@@ -59,6 +58,7 @@
#import <WebCore/WebCoreURLResponse.h>
#import <WebKit/DOMHTML.h>
#import <WebKit/DOMPrivate.h>
+#import <runtime/InitializeThreading.h>
#import <wtf/Assertions.h>
using namespace WebCore;
@@ -75,12 +75,13 @@ using namespace WebCore;
@implementation WebDataSourcePrivate
-#ifndef BUILDING_ON_TIGER
+ (void)initialize
{
+ JSC::initializeThreading();
+#ifndef BUILDING_ON_TIGER
WebCoreObjCFinalizeOnMainThread(self);
-}
#endif
+}
- (void)dealloc
{
diff --git a/WebKit/mac/WebView/WebDynamicScrollBarsView.m b/WebKit/mac/WebView/WebDynamicScrollBarsView.m
index 1eb2d80..de19ef6 100644
--- a/WebKit/mac/WebView/WebDynamicScrollBarsView.m
+++ b/WebKit/mac/WebView/WebDynamicScrollBarsView.m
@@ -224,6 +224,12 @@ const int WebCoreScrollbarAlwaysOn = ScrollbarAlwaysOn;
[self setScrollingModes:[self horizontalScrollingMode] vertical:verticalMode andLock:lock];
}
+// Mail uses this method, so we cannot remove it.
+- (void)setVerticalScrollingMode:(ScrollbarMode)verticalMode
+{
+ [self setScrollingModes:[self horizontalScrollingMode] vertical:verticalMode andLock:NO];
+}
+
- (void)setScrollingModes:(ScrollbarMode)horizontalMode vertical:(ScrollbarMode)verticalMode andLock:(BOOL)lock
{
BOOL update = NO;
diff --git a/WebKit/mac/WebView/WebFrame.h b/WebKit/mac/WebView/WebFrame.h
index e435087..a6cdebb 100644
--- a/WebKit/mac/WebView/WebFrame.h
+++ b/WebKit/mac/WebView/WebFrame.h
@@ -165,10 +165,17 @@
/*!
@method reload
+ @discussion Performs HTTP/1.1 end-to-end revalidation using cache-validating conditionals if possible.
*/
- (void)reload;
/*!
+ @method reloadFromOrigin
+ @discussion Performs HTTP/1.1 end-to-end reload.
+*/
+- (void)reloadFromOrigin;
+
+/*!
@method findFrameNamed:
@discussion This method returns a frame with the given name. findFrameNamed returns self
for _self and _current, the parent frame for _parent and the main frame for _top.
diff --git a/WebKit/mac/WebView/WebFrame.mm b/WebKit/mac/WebView/WebFrame.mm
index 13a6ad4..0ac300e 100644
--- a/WebKit/mac/WebView/WebFrame.mm
+++ b/WebKit/mac/WebView/WebFrame.mm
@@ -45,11 +45,13 @@
#import "WebHTMLViewInternal.h"
#import "WebIconFetcherInternal.h"
#import "WebKitStatisticsPrivate.h"
+#import "WebKitVersionChecks.h"
#import "WebNSURLExtras.h"
#import "WebScriptDebugger.h"
#import "WebViewInternal.h"
#import <JavaScriptCore/APICast.h>
#import <WebCore/AccessibilityObject.h>
+#import <WebCore/AnimationController.h>
#import <WebCore/AXObjectCache.h>
#import <WebCore/ColorMac.h>
#import <WebCore/DOMImplementation.h>
@@ -71,14 +73,16 @@
#import <WebCore/RenderLayer.h>
#import <WebCore/ReplaceSelectionCommand.h>
#import <WebCore/SmartReplace.h>
-#import <WebCore/SystemTime.h>
#import <WebCore/TextIterator.h>
#import <WebCore/TypingCommand.h>
#import <WebCore/htmlediting.h>
#import <WebCore/ScriptController.h>
+#import <WebCore/ScriptValue.h>
#import <WebCore/markup.h>
#import <WebCore/visible_units.h>
#import <runtime/JSLock.h>
+#import <runtime/JSValue.h>
+#include <wtf/CurrentTime.h>
using namespace std;
using namespace WebCore;
@@ -86,7 +90,7 @@ using namespace HTMLNames;
using JSC::JSGlobalObject;
using JSC::JSLock;
-using JSC::JSValue;
+using JSC::JSValuePtr;
/*
Here is the current behavior matrix for four types of navigations:
@@ -184,11 +188,6 @@ DOMNode *kit(Node* node)
return [DOMNode _wrapNode:node];
}
-DOMNode *kit(PassRefPtr<Node> node)
-{
- return [DOMNode _wrapNode:node.get()];
-}
-
Document* core(DOMDocument *document)
{
return [document _document];
@@ -247,6 +246,20 @@ EditableLinkBehavior core(WebKitEditableLinkBehavior editableLinkBehavior)
return EditableLinkDefaultBehavior;
}
+TextDirectionSubmenuInclusionBehavior core(WebTextDirectionSubmenuInclusionBehavior behavior)
+{
+ switch (behavior) {
+ case WebTextDirectionSubmenuNeverIncluded:
+ return TextDirectionSubmenuNeverIncluded;
+ case WebTextDirectionSubmenuAutomaticallyIncluded:
+ return TextDirectionSubmenuAutomaticallyIncluded;
+ case WebTextDirectionSubmenuAlwaysIncluded:
+ return TextDirectionSubmenuAlwaysIncluded;
+ }
+ ASSERT_NOT_REACHED();
+ return TextDirectionSubmenuNeverIncluded;
+}
+
@implementation WebFrame (WebInternal)
Frame* core(WebFrame *frame)
@@ -373,8 +386,8 @@ WebView *getWebView(WebFrame *webFrame)
Frame* coreFrame = _private->coreFrame;
for (Frame* frame = coreFrame; frame; frame = frame->tree()->traverseNext(coreFrame)) {
WebFrame *webFrame = kit(frame);
- // Never call setDrawsBackground:YES here on the scroll view or the background color will
- // flash between pages loads. setDrawsBackground:YES will be called in _frameLoadCompleted.
+ // Don't call setDrawsBackground:YES here because it may be NO because of a load
+ // in progress; WebFrameLoaderClient keeps it set to NO during the load process.
if (!drawsBackground)
[[[webFrame frameView] _scrollView] setDrawsBackground:NO];
[[[webFrame frameView] _scrollView] setBackgroundColor:backgroundColor];
@@ -536,25 +549,17 @@ static inline WebDataSource *dataSource(DocumentLoader* loader)
- (NSString *)_selectedString
{
- String text = _private->coreFrame->selectedText();
- text.replace('\\', _private->coreFrame->backslashAsCurrencySymbol());
- return text;
+ return _private->coreFrame->displayStringModifiedByEncoding(_private->coreFrame->selectedText());
}
- (NSString *)_stringForRange:(DOMRange *)range
{
// This will give a system malloc'd buffer that can be turned directly into an NSString
unsigned length;
- UChar* buf = plainTextToMallocAllocatedBuffer([range _range], length);
+ UChar* buf = plainTextToMallocAllocatedBuffer([range _range], length, true);
if (!buf)
return [NSString string];
-
- UChar backslashAsCurrencySymbol = _private->coreFrame->backslashAsCurrencySymbol();
- if (backslashAsCurrencySymbol != '\\')
- for (unsigned n = 0; n < length; n++)
- if (buf[n] == '\\')
- buf[n] = backslashAsCurrencySymbol;
// Transfer buffer ownership to NSString
return [[[NSString alloc] initWithCharactersNoCopy:buf length:length freeWhenDone:YES] autorelease];
@@ -639,7 +644,7 @@ static inline WebDataSource *dataSource(DocumentLoader* loader)
{
ASSERT(_private->coreFrame->document());
- JSValue* result = _private->coreFrame->loader()->executeScript(string, forceUserGesture);
+ JSValuePtr result = _private->coreFrame->loader()->executeScript(string, forceUserGesture).jsValue();
if (!_private->coreFrame) // In case the script removed our frame from the page.
return @"";
@@ -647,17 +652,17 @@ static inline WebDataSource *dataSource(DocumentLoader* loader)
// This bizarre set of rules matches behavior from WebKit for Safari 2.0.
// If you don't like it, use -[WebScriptObject evaluateWebScript:] or
// JSEvaluateScript instead, since they have less surprising semantics.
- if (!result || !result->isBoolean() && !result->isString() && !result->isNumber())
+ if (!result || !result.isBoolean() && !result.isString() && !result.isNumber())
return @"";
JSLock lock(false);
- return String(result->toString(_private->coreFrame->script()->globalObject()->globalExec()));
+ return String(result.toString(_private->coreFrame->script()->globalObject()->globalExec()));
}
- (NSRect)_caretRectAtNode:(DOMNode *)node offset:(int)offset affinity:(NSSelectionAffinity)affinity
{
VisiblePosition visiblePosition([node _node], offset, static_cast<EAffinity>(affinity));
- return visiblePosition.caretRect();
+ return visiblePosition.absoluteCaretBounds();
}
- (NSRect)_firstRectForDOMRange:(DOMRange *)range
@@ -684,6 +689,7 @@ static inline WebDataSource *dataSource(DocumentLoader* loader)
- (id)_accessibilityTree
{
+#if HAVE(ACCESSIBILITY)
if (!AXObjectCache::accessibilityEnabled()) {
AXObjectCache::enableAccessibility();
if ([[NSApp accessibilityAttributeValue:NSAccessibilityEnhancedUserInterfaceAttribute] boolValue])
@@ -696,6 +702,9 @@ static inline WebDataSource *dataSource(DocumentLoader* loader)
if (!root)
return nil;
return _private->coreFrame->document()->axObjectCache()->get(root)->wrapper();
+#else
+ return nil;
+#endif
}
- (DOMRange *)_rangeByAlteringCurrentSelection:(SelectionController::EAlteration)alteration direction:(SelectionController::EDirection)direction granularity:(TextGranularity)granularity
@@ -760,11 +769,23 @@ static inline WebDataSource *dataSource(DocumentLoader* loader)
return TextIterator::rangeFromLocationAndLength(scope, nsrange.location, nsrange.length);
}
+- (DOMRange *)convertNSRangeToDOMRange:(NSRange)nsrange
+{
+ // This method exists to maintain compatibility with Leopard's Dictionary.app. <rdar://problem/6002160>
+ return [self _convertNSRangeToDOMRange:nsrange];
+}
+
- (DOMRange *)_convertNSRangeToDOMRange:(NSRange)nsrange
{
return [DOMRange _wrapRange:[self _convertToDOMRange:nsrange].get()];
}
+- (NSRange)convertDOMRangeToNSRange:(DOMRange *)range
+{
+ // This method exists to maintain compatibility with Leopard's Dictionary.app. <rdar://problem/6002160>
+ return [self _convertDOMRangeToNSRange:range];
+}
+
- (NSRange)_convertDOMRangeToNSRange:(DOMRange *)range
{
return [self _convertToNSRange:[range _range]];
@@ -1008,13 +1029,15 @@ static inline WebDataSource *dataSource(DocumentLoader* loader)
- (BOOL)_canProvideDocumentSource
{
- String mimeType = _private->coreFrame->loader()->responseMIMEType();
-
+ Frame* frame = _private->coreFrame;
+ String mimeType = frame->loader()->responseMIMEType();
+ PluginData* pluginData = frame->page() ? frame->page()->pluginData() : 0;
+
if (WebCore::DOMImplementation::isTextMIMEType(mimeType) ||
Image::supportsType(mimeType) ||
- (_private->coreFrame->page() && _private->coreFrame->page()->pluginData()->supportsMimeType(mimeType)))
+ (pluginData && pluginData->supportsMimeType(mimeType)))
return NO;
-
+
return YES;
}
@@ -1147,6 +1170,53 @@ static inline WebDataSource *dataSource(DocumentLoader* loader)
}
#endif
+- (BOOL)_pauseAnimation:(NSString*)name onNode:(DOMNode *)node atTime:(NSTimeInterval)time
+{
+ Frame* frame = core(self);
+ if (!frame)
+ return false;
+
+ AnimationController* controller = frame->animation();
+ if (!controller)
+ return false;
+
+ Node* coreNode = [node _node];
+ if (!coreNode || !coreNode->renderer())
+ return false;
+
+ return controller->pauseAnimationAtTime(coreNode->renderer(), name, time);
+}
+
+- (BOOL)_pauseTransitionOfProperty:(NSString*)name onNode:(DOMNode*)node atTime:(NSTimeInterval)time
+{
+ Frame* frame = core(self);
+ if (!frame)
+ return false;
+
+ AnimationController* controller = frame->animation();
+ if (!controller)
+ return false;
+
+ Node* coreNode = [node _node];
+ if (!coreNode || !coreNode->renderer())
+ return false;
+
+ return controller->pauseTransitionAtTime(coreNode->renderer(), name, time);
+}
+
+- (unsigned) _numberOfActiveAnimations
+{
+ Frame* frame = core(self);
+ if (!frame)
+ return false;
+
+ AnimationController* controller = frame->animation();
+ if (!controller)
+ return false;
+
+ return controller->numberOfActiveAnimations();
+}
+
@end
@implementation WebFrame
@@ -1238,7 +1308,7 @@ static inline WebDataSource *dataSource(DocumentLoader* loader)
- (void)loadRequest:(NSURLRequest *)request
{
- _private->coreFrame->loader()->load(request);
+ _private->coreFrame->loader()->load(request, false);
}
static NSURL *createUniqueWebDataURL()
@@ -1266,7 +1336,7 @@ static NSURL *createUniqueWebDataURL()
SubstituteData substituteData(WebCore::SharedBuffer::wrapNSData(data), MIMEType, encodingName, [unreachableURL absoluteURL], responseURL);
- _private->coreFrame->loader()->load(request, substituteData);
+ _private->coreFrame->loader()->load(request, substituteData, false);
}
@@ -1308,7 +1378,16 @@ static NSURL *createUniqueWebDataURL()
- (void)reload
{
- _private->coreFrame->loader()->reload();
+ if (!WebKitLinkedOnOrAfter(WEBKIT_FIRST_VERSION_WITH_RELOAD_FROM_ORIGIN) &&
+ [[[NSBundle mainBundle] bundleIdentifier] isEqualToString:@"com.apple.Safari"])
+ _private->coreFrame->loader()->reload(GetCurrentKeyModifiers() & shiftKey);
+ else
+ _private->coreFrame->loader()->reload(false);
+}
+
+- (void)reloadFromOrigin
+{
+ _private->coreFrame->loader()->reload(true);
}
- (WebFrame *)findFrameNamed:(NSString *)name
diff --git a/WebKit/mac/WebView/WebFrameInternal.h b/WebKit/mac/WebView/WebFrameInternal.h
index 5cf7690..fa17ed9 100644
--- a/WebKit/mac/WebView/WebFrameInternal.h
+++ b/WebKit/mac/WebView/WebFrameInternal.h
@@ -91,6 +91,7 @@ WebCore::Page* core(WebView *);
WebView *kit(WebCore::Page*);
WebCore::EditableLinkBehavior core(WebKitEditableLinkBehavior);
+WebCore::TextDirectionSubmenuInclusionBehavior core(WebTextDirectionSubmenuInclusionBehavior);
WebView *getWebView(WebFrame *webFrame);
diff --git a/WebKit/mac/WebView/WebFramePrivate.h b/WebKit/mac/WebView/WebFramePrivate.h
index 428c142..2ea686e 100644
--- a/WebKit/mac/WebView/WebFramePrivate.h
+++ b/WebKit/mac/WebView/WebFramePrivate.h
@@ -35,6 +35,7 @@
#define ENABLE_NETSCAPE_PLUGIN_API 1
#endif
+@class DOMNode;
@class WebIconFetcher;
@class WebScriptObject;
@@ -51,8 +52,9 @@ typedef enum {
WebFrameLoadTypeReload,
WebFrameLoadTypeReloadAllowingStaleData,
WebFrameLoadTypeSame, // user loads same URL again (but not reload button)
- WebFrameLoadTypeInternal, // maps to WebCore::FrameLoadTypeRedirectWithLockedHistory
- WebFrameLoadTypeReplace
+ WebFrameLoadTypeInternal, // maps to WebCore::FrameLoadTypeRedirectWithLockedBackForwardList
+ WebFrameLoadTypeReplace,
+ WebFrameLoadTypeReloadFromOrigin
} WebFrameLoadType;
@interface WebFrame (WebPrivate)
@@ -84,4 +86,13 @@ typedef enum {
- (void)_recursive_pauseNullEventsForAllNetscapePlugins;
#endif
+// Pause a given CSS animation or transition on the target node at a specific time.
+// If the animation or transition is already paused, it will update its pause time.
+// This method is only intended to be used for testing the CSS animation and transition system.
+- (BOOL)_pauseAnimation:(NSString*)name onNode:(DOMNode *)node atTime:(NSTimeInterval)time;
+- (BOOL)_pauseTransitionOfProperty:(NSString*)name onNode:(DOMNode*)node atTime:(NSTimeInterval)time;
+
+// Returns the total number of currently running animations (includes both CSS transitions and CSS animations).
+- (unsigned) _numberOfActiveAnimations;
+
@end
diff --git a/WebKit/mac/WebView/WebFrameView.mm b/WebKit/mac/WebView/WebFrameView.mm
index e9c0aae..132fb93 100644
--- a/WebKit/mac/WebView/WebFrameView.mm
+++ b/WebKit/mac/WebView/WebFrameView.mm
@@ -189,11 +189,10 @@ enum {
- (WebDynamicScrollBarsView *)_scrollView
{
- // this can be called by [super dealloc] when cleaning up the keyview loop,
+ // This can be called by [super dealloc] when cleaning up the key view loop,
// after _private has been nilled out.
- if (_private == nil) {
+ if (_private == nil)
return nil;
- }
return _private->frameScrollView;
}
@@ -300,9 +299,8 @@ static inline void addTypesFromClass(NSMutableDictionary *allTypes, Class objCCl
didFirstTimeInitialization = true;
InitWebCoreSystemInterface();
- // Need to tell WebCore what function to call for the
- // "History Item has Changed" notification
- // Note: We also do this in WebHistoryItem's init method
+ // Need to tell WebCore what function to call for the "History Item has Changed" notification.
+ // Note: We also do this in WebHistoryItem's init method.
WebCore::notifyHistoryItemChanged = WKNotifyHistoryItemChanged;
[WebViewFactory createSharedFactory];
@@ -310,9 +308,8 @@ static inline void addTypesFromClass(NSMutableDictionary *allTypes, Class objCCl
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
- // CoreGraphics deferred updates are disabled if WebKitEnableCoalescedUpdatesPreferenceKey is set
- // to NO, or has no value. For compatibility with Mac OS X 10.4.6, deferred updates are OFF by
- // default.
+ // CoreGraphics deferred updates are disabled if WebKitEnableCoalescedUpdatesPreferenceKey is NO
+ // or has no value. For compatibility with Mac OS X 10.4.6, deferred updates are off by default.
if (![defaults boolForKey:WebKitEnableDeferredUpdatesPreferenceKey])
WKDisableCGDeferredUpdates();
@@ -322,7 +319,7 @@ static inline void addTypesFromClass(NSMutableDictionary *allTypes, Class objCCl
_private = [[WebFrameViewPrivate alloc] init];
- WebDynamicScrollBarsView *scrollView = [[WebDynamicScrollBarsView alloc] initWithFrame:NSMakeRect(0.0f, 0.0f, frame.size.width, frame.size.height)];
+ WebDynamicScrollBarsView *scrollView = [[WebDynamicScrollBarsView alloc] initWithFrame:NSMakeRect(0.0f, 0.0f, frame.size.width, frame.size.height)];
_private->frameScrollView = scrollView;
[scrollView setContentView:[[[WebClipView alloc] initWithFrame:[scrollView bounds]] autorelease]];
[scrollView setDrawsBackground:NO];
@@ -331,9 +328,10 @@ static inline void addTypesFromClass(NSMutableDictionary *allTypes, Class objCCl
[scrollView setAutoresizingMask:NSViewWidthSizable | NSViewHeightSizable];
[scrollView setLineScroll:40.0f];
[self addSubview:scrollView];
- // don't call our overridden version here; we need to make the standard NSView link between us
- // and our subview so that previousKeyView and previousValidKeyView work as expected. This works
- // together with our becomeFirstResponder and setNextKeyView overrides.
+
+ // Don't call our overridden version of setNextKeyView here; we need to make the standard NSView
+ // link between us and our subview so that previousKeyView and previousValidKeyView work as expected.
+ // This works together with our becomeFirstResponder and setNextKeyView overrides.
[super setNextKeyView:scrollView];
++WebFrameViewCount;
@@ -396,29 +394,22 @@ static inline void addTypesFromClass(NSMutableDictionary *allTypes, Class objCCl
// the key loop similar to the way NSScrollView does this. Note that
// WebView has similar code.
- // If the scrollView won't accept first-responderness now, then we just become
- // the first responder ourself like a normal view. This lets us be the first
- // responder in cases where no page has yet been loaded (see 3469791).
- if ([[self _scrollView] acceptsFirstResponder]) {
- NSWindow *window = [self window];
- if ([window keyViewSelectionDirection] == NSSelectingPrevious) {
- NSView *previousValidKeyView = [self previousValidKeyView];
- // If we couldn't find a previous valid key view, ask the webview. This handles frameset
- // cases like 3748628. Note that previousValidKeyView should never be self but can be
- // due to AppKit oddness (mentioned in 3748628).
- if (previousValidKeyView == nil || previousValidKeyView == self) {
- previousValidKeyView = [[[self webFrame] webView] previousValidKeyView];
- }
- // I don't know if the following cases ever occur anymore, but I'm leaving in the old test for
- // now to avoid causing trouble just before shipping Tiger.
- ASSERT((previousValidKeyView != self) && (previousValidKeyView != [self _scrollView]));
- if ((previousValidKeyView != self) && (previousValidKeyView != [self _scrollView])) {
- [window makeFirstResponder:previousValidKeyView];
- }
- } else {
+ NSWindow *window = [self window];
+ if ([window keyViewSelectionDirection] == NSSelectingPrevious) {
+ NSView *previousValidKeyView = [self previousValidKeyView];
+ // If we couldn't find a previous valid key view, ask the WebView. This handles frameset
+ // cases (one is mentioned in Radar bug 3748628). Note that previousValidKeyView should
+ // never be self but can be due to AppKit oddness (mentioned in Radar bug 3748628).
+ if (previousValidKeyView == nil || previousValidKeyView == self)
+ previousValidKeyView = [[[self webFrame] webView] previousValidKeyView];
+ [window makeFirstResponder:previousValidKeyView];
+ } else {
+ // If the scroll view won't accept first-responderness now, then just become
+ // the first responder ourself like a normal view. This lets us be the first
+ // responder in cases where no page has yet been loaded.
+ if ([[self _scrollView] acceptsFirstResponder])
[window makeFirstResponder:[self _scrollView]];
- }
- }
+ }
return YES;
}
@@ -491,12 +482,21 @@ static inline void addTypesFromClass(NSMutableDictionary *allTypes, Class objCCl
- (void)setFrameSize:(NSSize)size
{
- if (!NSEqualSizes(size, [self frame].size) && [[[self webFrame] webView] drawsBackground]) {
+ // See WebFrameLoaderClient::provisionalLoadStarted.
+ if (!NSEqualSizes(size, [self frame].size) && [[[self webFrame] webView] drawsBackground])
[[self _scrollView] setDrawsBackground:YES];
- }
[super setFrameSize:size];
}
+- (void)viewDidMoveToWindow
+{
+ // See WebFrameLoaderClient::provisionalLoadStarted.
+ // Need to check _private for nil because this can be called inside -[WebView initWithCoder:].
+ if (_private && [[[self webFrame] webView] drawsBackground])
+ [[self _scrollView] setDrawsBackground:YES];
+ [super viewDidMoveToWindow];
+}
+
- (BOOL)_scrollOverflowInDirection:(ScrollDirection)direction granularity:(ScrollGranularity)granularity
{
// scrolling overflows is only applicable if we're dealing with an WebHTMLView
diff --git a/WebKit/mac/WebView/WebHTMLRepresentation.mm b/WebKit/mac/WebView/WebHTMLRepresentation.mm
index 4b4d11e..604a17a 100644
--- a/WebKit/mac/WebView/WebHTMLRepresentation.mm
+++ b/WebKit/mac/WebView/WebHTMLRepresentation.mm
@@ -39,7 +39,6 @@
#import "WebKitStatisticsPrivate.h"
#import "WebNSAttributedStringExtras.h"
#import "WebNSObjectExtras.h"
-#import "WebResourcePrivate.h"
#import "WebView.h"
#import <Foundation/NSURLResponse.h>
#import <WebCore/Document.h>
@@ -55,6 +54,7 @@
#import <WebCore/TextResourceDecoder.h>
#import <WebKit/DOMHTMLInputElement.h>
#import <wtf/Assertions.h>
+#import <wtf/StdLibExtras.h>
using namespace WebCore;
using namespace HTMLNames;
@@ -92,22 +92,19 @@ static NSArray *concatenateArrays(NSArray *first, NSArray *second)
+ (NSArray *)supportedMIMETypes
{
- static RetainPtr<NSArray> staticSupportedMIMETypes =
- concatenateArrays([self supportedNonImageMIMETypes], [self supportedImageMIMETypes]);
+ DEFINE_STATIC_LOCAL(RetainPtr<NSArray>, staticSupportedMIMETypes, (concatenateArrays([self supportedNonImageMIMETypes], [self supportedImageMIMETypes])));
return staticSupportedMIMETypes.get();
}
+ (NSArray *)supportedNonImageMIMETypes
{
- static RetainPtr<NSArray> staticSupportedNonImageMIMETypes =
- stringArray(MIMETypeRegistry::getSupportedNonImageMIMETypes());
+ DEFINE_STATIC_LOCAL(RetainPtr<NSArray>, staticSupportedNonImageMIMETypes, (stringArray(MIMETypeRegistry::getSupportedNonImageMIMETypes())));
return staticSupportedNonImageMIMETypes.get();
}
+ (NSArray *)supportedImageMIMETypes
{
- static RetainPtr<NSArray> staticSupportedImageMIMETypes =
- stringArray(MIMETypeRegistry::getSupportedImageMIMETypes());
+ DEFINE_STATIC_LOCAL(RetainPtr<NSArray>, staticSupportedImageMIMETypes, (stringArray(MIMETypeRegistry::getSupportedImageMIMETypes())));
return staticSupportedImageMIMETypes.get();
}
diff --git a/WebKit/mac/WebView/WebHTMLView.mm b/WebKit/mac/WebView/WebHTMLView.mm
index 4d9b3a8..be4d8db 100644
--- a/WebKit/mac/WebView/WebHTMLView.mm
+++ b/WebKit/mac/WebView/WebHTMLView.mm
@@ -32,7 +32,7 @@
#import "DOMNodeInternal.h"
#import "DOMRangeInternal.h"
#import "WebArchive.h"
-#import "WebBaseNetscapePluginView.h"
+#import "WebNetscapePluginView.h"
#import "WebClipView.h"
#import "WebDOMOperationsPrivate.h"
#import "WebDataSourceInternal.h"
@@ -112,6 +112,7 @@
#import <WebKit/DOMPrivate.h>
#import <WebKitSystemInterface.h>
#import <limits>
+#import <runtime/InitializeThreading.h>
using namespace WebCore;
using namespace HTMLNames;
@@ -380,7 +381,7 @@ struct WebHTMLViewInterpretKeyEventsParameters {
NSEvent *keyDownEvent; // Kept after handling the event.
NSSize lastLayoutSize;
-
+
NSPoint lastScrollPosition;
WebPluginController *pluginController;
@@ -393,22 +394,23 @@ struct WebHTMLViewInterpretKeyEventsParameters {
NSTimer *autoscrollTimer;
NSEvent *autoscrollTriggerEvent;
- NSArray* pageRects;
+ NSArray *pageRects;
- NSMutableDictionary* highlighters;
+ NSMutableDictionary *highlighters;
- BOOL resigningFirstResponder;
+#ifdef BUILDING_ON_TIGER
BOOL nextResponderDisabledOnce;
+#endif
WebTextCompleteController *compController;
BOOL transparentBackground;
- WebHTMLViewInterpretKeyEventsParameters *interpretKeyEventsParameters;
+ WebHTMLViewInterpretKeyEventsParameters* interpretKeyEventsParameters;
BOOL receivedNOOP;
WebDataSource *dataSource;
- WebCore::CachedImage *promisedDragTIFFDataSource;
+ WebCore::CachedImage* promisedDragTIFFDataSource;
CFRunLoopTimerRef updateFocusedAndActiveStateTimer;
CFRunLoopTimerRef updateMouseoverTimer;
@@ -440,6 +442,7 @@ static NSCellStateValue kit(TriState state)
+ (void)initialize
{
+ JSC::initializeThreading();
#ifndef BUILDING_ON_TIGER
WebCoreObjCFinalizeOnMainThread(self);
#endif
@@ -661,13 +664,15 @@ static NSURL* uniqueURLWithRelativePart(NSString *relativePart)
subresources:0]))
return fragment;
+#if defined(BUILDING_ON_TIGER) || defined(BUILDING_ON_LEOPARD)
if ([types containsObject:NSPICTPboardType] &&
(fragment = [self _documentFragmentFromPasteboard:pasteboard
forType:NSPICTPboardType
inContext:context
subresources:0]))
return fragment;
-
+#endif
+
// Only 10.5 and higher support setting and retrieving pasteboard types with UTIs, but we don't believe
// that any applications on Tiger put types for which we only have a UTI, like PNG, on the pasteboard.
if ([types containsObject:(NSString*)kUTTypePNG] &&
@@ -1018,6 +1023,14 @@ static NSURL* uniqueURLWithRelativePart(NSString *relativePart)
userInfo:[NSDictionary dictionaryWithObject:fakeEvent forKey:@"NSEvent"]];
}
+- (id)_bridge
+{
+ // This method exists to maintain compatibility with Leopard's Dictionary.app, since it
+ // calls _bridge to get access to convertNSRangeToDOMRange: and convertDOMRangeToNSRange:.
+ // Return the WebFrame, which implements the compatibility methods. <rdar://problem/6002160>
+ return [self _frame];
+}
+
- (void)_updateMouseoverWithFakeEvent
{
[self _cancelUpdateMouseoverTimer];
@@ -1464,10 +1477,11 @@ static void _updateMouseoverTimerCallback(CFRunLoopTimerRef timer, void *info)
{
static NSArray *types = nil;
if (!types) {
- types = [[NSArray alloc] initWithObjects:WebArchivePboardType, NSHTMLPboardType,
- NSFilenamesPboardType, NSTIFFPboardType, NSPICTPboardType, NSURLPboardType,
- NSRTFDPboardType, NSRTFPboardType, NSStringPboardType, NSColorPboardType,
- kUTTypePNG, nil];
+ types = [[NSArray alloc] initWithObjects:WebArchivePboardType, NSHTMLPboardType, NSFilenamesPboardType, NSTIFFPboardType,
+#if defined(BUILDING_ON_TIGER) || defined(BUILDING_ON_LEOPARD)
+ NSPICTPboardType,
+#endif
+ NSURLPboardType, NSRTFDPboardType, NSRTFPboardType, NSStringPboardType, NSColorPboardType, kUTTypePNG, nil];
CFRetain(types);
}
return types;
@@ -1517,7 +1531,7 @@ static void _updateMouseoverTimerCallback(CFRunLoopTimerRef timer, void *info)
NSImage *dragImage = [[[NSImage alloc] initWithSize: imageSize] autorelease];
[dragImage lockFocus];
- [[NSColor colorWithCalibratedRed: 0.7f green: 0.7f blue: 0.7f alpha: 0.8f] set];
+ [[NSColor colorWithDeviceRed: 0.7f green: 0.7f blue: 0.7f alpha: 0.8f] set];
// Drag a rectangle with rounded corners/
NSBezierPath *path = [NSBezierPath bezierPath];
@@ -1531,8 +1545,8 @@ static void _updateMouseoverTimerCallback(CFRunLoopTimerRef timer, void *info)
[path appendBezierPathWithRect: NSMakeRect(imageSize.width - DRAG_LABEL_RADIUS - 20.0f, DRAG_LABEL_RADIUS, DRAG_LABEL_RADIUS + 20.0f, imageSize.height - 2.0f * DRAG_LABEL_RADIUS)];
[path fill];
- NSColor *topColor = [NSColor colorWithCalibratedWhite:0.0f alpha:0.75f];
- NSColor *bottomColor = [NSColor colorWithCalibratedWhite:1.0f alpha:0.5f];
+ NSColor *topColor = [NSColor colorWithDeviceWhite:0.0f alpha:0.75f];
+ NSColor *bottomColor = [NSColor colorWithDeviceWhite:1.0f alpha:0.5f];
if (drawURLString) {
if (clipURLString)
urlString = [WebStringTruncator centerTruncateString: urlString toWidth:imageSize.width - (DRAG_LABEL_BORDER_X * 2.0f) withFont:urlFont];
@@ -1931,6 +1945,7 @@ static void _updateMouseoverTimerCallback(CFRunLoopTimerRef timer, void *info)
[resource release];
return fragment;
}
+#if defined(BUILDING_ON_TIGER) || defined(BUILDING_ON_LEOPARD)
if (pboardType == NSPICTPboardType) {
WebResource *resource = [[WebResource alloc] initWithData:[pasteboard dataForType:NSPICTPboardType]
URL:uniqueURLWithRelativePart(@"image.pict")
@@ -1941,6 +1956,7 @@ static void _updateMouseoverTimerCallback(CFRunLoopTimerRef timer, void *info)
[resource release];
return fragment;
}
+#endif
// Only 10.5 and higher support setting and retrieving pasteboard types with UTIs, but we don't believe
// that any applications on Tiger put types for which we only have a UTI, like PNG, on the pasteboard.
if ([pboardType isEqualToString:(NSString*)kUTTypePNG]) {
@@ -2071,6 +2087,7 @@ static void _updateMouseoverTimerCallback(CFRunLoopTimerRef timer, void *info)
{
[NSApp registerServicesMenuSendTypes:[[self class] _selectionPasteboardTypes]
returnTypes:[[self class] _insertablePasteboardTypes]];
+ JSC::initializeThreading();
#ifndef BUILDING_ON_TIGER
WebCoreObjCFinalizeOnMainThread(self);
#endif
@@ -2219,6 +2236,9 @@ WEBCORE_COMMAND(insertNewlineIgnoringFieldEditor)
WEBCORE_COMMAND(insertParagraphSeparator)
WEBCORE_COMMAND(insertTab)
WEBCORE_COMMAND(insertTabIgnoringFieldEditor)
+WEBCORE_COMMAND(makeTextWritingDirectionLeftToRight)
+WEBCORE_COMMAND(makeTextWritingDirectionNatural)
+WEBCORE_COMMAND(makeTextWritingDirectionRightToLeft)
WEBCORE_COMMAND(moveBackward)
WEBCORE_COMMAND(moveBackwardAndModifySelection)
WEBCORE_COMMAND(moveDown)
@@ -2383,10 +2403,20 @@ WEBCORE_COMMAND(yankAndSelect)
return [self _canEdit];
}
- if (action == @selector(changeBaseWritingDirection:)) {
- NSWritingDirection writingDirection = static_cast<NSWritingDirection>([item tag]);
- if (writingDirection == NSWritingDirectionNatural)
- return NO;
+ if (action == @selector(changeBaseWritingDirection:)
+ || action == @selector(makeBaseWritingDirectionLeftToRight:)
+ || action == @selector(makeBaseWritingDirectionRightToLeft:)) {
+ NSWritingDirection writingDirection;
+
+ if (action == @selector(changeBaseWritingDirection:)) {
+ writingDirection = static_cast<NSWritingDirection>([item tag]);
+ if (writingDirection == NSWritingDirectionNatural)
+ return NO;
+ } else if (action == @selector(makeBaseWritingDirectionLeftToRight:))
+ writingDirection = NSWritingDirectionLeftToRight;
+ else
+ writingDirection = NSWritingDirectionRightToLeft;
+
NSMenuItem *menuItem = (NSMenuItem *)item;
if ([menuItem isKindOfClass:[NSMenuItem class]]) {
RefPtr<CSSStyleDeclaration> style = CSSMutableStyleDeclaration::create();
@@ -2421,7 +2451,7 @@ WEBCORE_COMMAND(yankAndSelect)
|| action == @selector(lowercaseWord:)
|| action == @selector(uppercaseWord:))
return [self _hasSelection] && [self _isEditable];
-
+
if (action == @selector(centerSelectionInVisibleArea:)
|| action == @selector(jumpToSelection:)
|| action == @selector(copyFont:))
@@ -2744,12 +2774,13 @@ static void _updateFocusedAndActiveStateTimerCallback(CFRunLoopTimerRef timer, v
double start = CFAbsoluteTimeGetCurrent();
#endif
- Frame* coreFrame = core([self _frame]);
- if (FrameView* coreView = coreFrame->view())
- coreView->setMediaType(_private->printing ? "print" : "screen");
- if (Document* document = coreFrame->document())
- document->setPrinting(_private->printing);
- coreFrame->reapplyStyles();
+ if (Frame* coreFrame = core([self _frame])) {
+ if (FrameView* coreView = coreFrame->view())
+ coreView->setMediaType(_private->printing ? "print" : "screen");
+ if (Document* document = coreFrame->document())
+ document->setPrinting(_private->printing);
+ coreFrame->reapplyStyles();
+ }
#ifdef LOG_TIMES
double thisTime = CFAbsoluteTimeGetCurrent() - start;
@@ -3208,9 +3239,9 @@ done:
NSFileWrapper *wrapper = nil;
NSURL *draggingImageURL = nil;
- if (WebCore::CachedResource* tiffResource = [self promisedDragTIFFDataSource]) {
+ if (WebCore::CachedImage* tiffResource = [self promisedDragTIFFDataSource]) {
- SharedBuffer *buffer = tiffResource->data();
+ SharedBuffer *buffer = static_cast<CachedResource*>(tiffResource)->data();
if (!buffer)
goto noPromisedData;
@@ -3218,7 +3249,11 @@ done:
NSURLResponse *response = tiffResource->response().nsURLResponse();
draggingImageURL = [response URL];
wrapper = [[[NSFileWrapper alloc] initRegularFileWithContents:data] autorelease];
- [wrapper setPreferredFilename:[response suggestedFilename]];
+ NSString* filename = [response suggestedFilename];
+ String trueExtension = tiffResource->image()->filenameExtension();
+ if (![filename hasSuffix:trueExtension])
+ filename = [[filename stringByAppendingString:@"."] stringByAppendingString:trueExtension];
+ [wrapper setPreferredFilename:filename];
}
noPromisedData:
@@ -3322,14 +3357,12 @@ noPromisedData:
BOOL resign = [super resignFirstResponder];
if (resign) {
[_private->compController endRevertingChange:NO moveLeft:NO];
- _private->resigningFirstResponder = YES;
if (![self maintainsInactiveSelection]) {
[self deselectAll];
if (![[self _webView] _isPerformingProgrammaticFocus])
[self clearFocus];
}
[self _updateFocusedAndActiveState];
- _private->resigningFirstResponder = NO;
}
return resign;
}
@@ -3744,7 +3777,7 @@ noPromisedData:
- (NSString *)_colorAsString:(NSColor *)color
{
- NSColor *rgbColor = [color colorUsingColorSpaceName:NSCalibratedRGBColorSpace];
+ NSColor *rgbColor = [color colorUsingColorSpaceName:NSDeviceRGBColorSpace];
// FIXME: If color is non-nil and rgbColor is nil, that means we got some kind
// of fancy color that can't be converted to RGB. Changing that to "transparent"
// might not be great, but it's probably OK.
@@ -4373,8 +4406,12 @@ NSStrokeColorAttributeName /* NSColor, default nil: same as foreground co
static BOOL writingDirectionKeyBindingsEnabled()
{
+#if !defined(BUILDING_ON_TIGER) && !defined(BUILDING_ON_LEOPARD)
+ return YES;
+#else
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
return [defaults boolForKey:@"NSAllowsBaseWritingDirectionKeyBindings"] || [defaults boolForKey:@"AppleTextDirection"];
+#endif
}
- (void)_changeBaseWritingDirectionTo:(NSWritingDirection)direction
@@ -4393,20 +4430,32 @@ static BOOL writingDirectionKeyBindingsEnabled()
coreFrame->editor()->setBaseWritingDirection(direction == NSWritingDirectionLeftToRight ? LeftToRightWritingDirection : RightToLeftWritingDirection);
}
-- (void)changeBaseWritingDirectionToLTR:(id)sender
+- (void)makeBaseWritingDirectionLeftToRight:(id)sender
{
COMMAND_PROLOGUE
[self _changeBaseWritingDirectionTo:NSWritingDirectionLeftToRight];
}
-- (void)changeBaseWritingDirectionToRTL:(id)sender
+- (void)makeBaseWritingDirectionRightToLeft:(id)sender
{
COMMAND_PROLOGUE
[self _changeBaseWritingDirectionTo:NSWritingDirectionRightToLeft];
}
+#if defined(BUILDING_ON_TIGER) || defined(BUILDING_ON_LEOPARD)
+- (void)changeBaseWritingDirectionToLTR:(id)sender
+{
+ [self makeBaseWritingDirectionLeftToRight:sender];
+}
+
+- (void)changeBaseWritingDirectionToRTL:(id)sender
+{
+ [self makeBaseWritingDirectionRightToLeft:sender];
+}
+#endif
+
#if 0
// CSS does not have a way to specify an outline font, which may make this difficult to implement.
@@ -4430,8 +4479,19 @@ static BOOL writingDirectionKeyBindingsEnabled()
#endif
+#ifndef BUILDING_ON_TIGER
+
+// Override this so that AppKit will send us arrow keys as key down events so we can
+// support them via the key bindings mechanism.
+- (BOOL)_wantsKeyDownForEvent:(NSEvent *)event
+{
+ return YES;
+}
+
+#else
+
// Super-hack alert.
-// Workaround for bug 3789278.
+// All this code accomplishes the same thing as the _wantsKeyDownForEvent method above.
// Returns a selector only if called while:
// 1) first responder is self
@@ -4497,6 +4557,8 @@ static BOOL writingDirectionKeyBindingsEnabled()
return [super nextResponder];
}
+#endif
+
// Despite its name, this is called at different times than windowDidBecomeKey is.
// It takes into account all the other factors that determine when NSCell draws
// with different tints, so it's the right call to use for control tints. We'd prefer
@@ -4541,7 +4603,7 @@ static BOOL writingDirectionKeyBindingsEnabled()
{
#if ENABLE(NETSCAPE_PLUGIN_API)
NSEnumerator *enumerator = [self objectEnumerator];
- WebBaseNetscapePluginView *view;
+ WebNetscapePluginView *view;
while ((view = [enumerator nextObject]) != nil)
if ([view isKindOfClass:[WebBaseNetscapePluginView class]])
[view performSelector:selector withObject:object];
@@ -4746,7 +4808,7 @@ static CGPoint coreGraphicsScreenPointForAppKitScreenPoint(NSPoint point)
// FIXME: the dictionary API expects the rect for the first line of selection. Passing
// the rect for the entire selection, as we do here, positions the pop-up window near
// the bottom of the selection rather than at the selected word.
- NSRect rect = [self convertRect:coreFrame->selectionRect() toView:nil];
+ NSRect rect = [self convertRect:coreFrame->selectionBounds() toView:nil];
rect.origin = [[self window] convertBaseToScreen:rect.origin];
NSData *data = [attrString RTFFromRange:NSMakeRange(0, [attrString length]) documentAttributes:nil];
dictionaryServiceWindowShow(data, rect, (writingDirection == NSWritingDirectionRightToLeft) ? 1 : 0);
@@ -4754,7 +4816,7 @@ static CGPoint coreGraphicsScreenPointForAppKitScreenPoint(NSPoint point)
// The HIDictionaryWindowShow function requires the origin, in CG screen coordinates, of the first character of text in the selection.
// FIXME 4945808: We approximate this in a way that works well when a single word is selected, and less well in some other cases
// (but no worse than we did in Tiger)
- NSRect rect = coreFrame->selectionRect();
+ NSRect rect = coreFrame->selectionBounds();
NSDictionary *attributes = [attrString fontAttributesInRange:NSMakeRange(0,1)];
NSFont *font = [attributes objectForKey:NSFontAttributeName];
@@ -5160,11 +5222,18 @@ static void extractUnderlines(NSAttributedString *string, Vector<CompositionUnde
Editor::Command command = [self coreCommandBySelector:selector];
if (command.isSupported())
eventWasHandled = command.execute(event);
- else {
+ else if ([self _canEdit]) {
+ // If the command is unsupported and the WebHTMLView is editable, then pass the
+ // selector to super and say that the event was handled. If the WebHTMLView is
+ // not editable, then do not say that the event was handled. This is important
+ // because of selectors like scrollPageDown:, which come as input method events
+ // when editing is enabled but keyboard events when it is not. These events are
+ // handled by the next responder in the responder chain.
_private->selectorForDoCommandBySelector = selector;
[super doCommandBySelector:selector];
_private->selectorForDoCommandBySelector = 0;
- }
+ } else
+ eventWasHandled = false;
}
if (parameters)
@@ -5225,7 +5294,7 @@ static void extractUnderlines(NSAttributedString *string, Vector<CompositionUnde
String eventText = text;
eventText.replace(NSBackTabCharacter, NSTabCharacter); // same thing is done in KeyEventMac.mm in WebCore
- if (coreFrame) {
+ if (coreFrame && coreFrame->editor()->canEdit()) {
if (!coreFrame->editor()->hasComposition())
eventHandled = coreFrame->editor()->insertText(eventText, event);
else {
@@ -5563,7 +5632,7 @@ static void extractUnderlines(NSAttributedString *string, Vector<CompositionUnde
- (NSRect)selectionRect
{
if ([self _hasSelection])
- return core([self _frame])->selectionRect();
+ return core([self _frame])->selectionBounds();
return NSZeroRect;
}
@@ -5599,7 +5668,7 @@ static void extractUnderlines(NSAttributedString *string, Vector<CompositionUnde
- (NSRect)selectionImageRect
{
if ([self _hasSelection])
- return core([self _frame])->selectionRect();
+ return core([self _frame])->selectionBounds();
return NSZeroRect;
}
diff --git a/WebKit/mac/WebView/WebPDFView.mm b/WebKit/mac/WebView/WebPDFView.mm
index 1009cdd..2cb5374 100644
--- a/WebKit/mac/WebView/WebPDFView.mm
+++ b/WebKit/mac/WebView/WebPDFView.mm
@@ -950,7 +950,7 @@ static BOOL _PDFSelectionsAreEqual(PDFSelection *selectionA, PDFSelection *selec
button, 0, 0, true);
// Call to the frame loader because this is where our security checks are made.
- core([dataSource webFrame])->loader()->loadFrameRequestWithFormAndValues(ResourceRequest(URL), false, event.get(), 0, HashMap<String, String>());
+ core([dataSource webFrame])->loader()->loadFrameRequestWithFormAndValues(ResourceRequest(URL), false, false, event.get(), 0, HashMap<String, String>());
}
- (void)PDFViewOpenPDFInNativeApplication:(PDFView *)sender
diff --git a/WebKit/mac/WebView/WebPreferenceKeysPrivate.h b/WebKit/mac/WebView/WebPreferenceKeysPrivate.h
index bcb17db..98daec0 100644
--- a/WebKit/mac/WebView/WebPreferenceKeysPrivate.h
+++ b/WebKit/mac/WebView/WebPreferenceKeysPrivate.h
@@ -50,6 +50,8 @@
#define WebKitJavaScriptEnabledPreferenceKey @"WebKitJavaScriptEnabled"
#define WebKitJavaScriptCanOpenWindowsAutomaticallyPreferenceKey @"WebKitJavaScriptCanOpenWindowsAutomatically"
#define WebKitPluginsEnabledPreferenceKey @"WebKitPluginsEnabled"
+#define WebKitDatabasesEnabledPreferenceKey @"WebKitDatabasesEnabledPreferenceKey"
+#define WebKitLocalStorageEnabledPreferenceKey @"WebKitLocalStorageEnabledPreferenceKey"
#define WebKitAllowAnimatedImagesPreferenceKey @"WebKitAllowAnimatedImagesPreferenceKey"
#define WebKitAllowAnimatedImageLoopingPreferenceKey @"WebKitAllowAnimatedImageLoopingPreferenceKey"
#define WebKitDisplayImagesKey @"WebKitDisplayImagesKey"
@@ -80,6 +82,7 @@
#define WebKitUseSiteSpecificSpoofingPreferenceKey @"WebKitUseSiteSpecificSpoofing"
#define WebKitEditableLinkBehaviorPreferenceKey @"WebKitEditableLinkBehavior"
#define WebKitCacheModelPreferenceKey @"WebKitCacheModelPreferenceKey"
+#define WebKitTextDirectionSubmenuInclusionBehaviorPreferenceKey @"WebKitTextDirectionSubmenuInclusionBehaviorPreferenceKey"
// CoreGraphics deferred updates are disabled if WebKitEnableCoalescedUpdatesPreferenceKey is set
// to NO, or has no value. For compatibility with Mac OS X 10.4.6, deferred updates are OFF by
diff --git a/WebKit/mac/WebView/WebPreferences.mm b/WebKit/mac/WebView/WebPreferences.mm
index 8b2f43e..e595861 100644
--- a/WebKit/mac/WebView/WebPreferences.mm
+++ b/WebKit/mac/WebView/WebPreferences.mm
@@ -315,6 +315,8 @@ static WebCacheModel cacheModelForMainBundle(void)
[NSNumber numberWithBool:YES], WebKitJavaScriptEnabledPreferenceKey,
[NSNumber numberWithBool:YES], WebKitJavaScriptCanOpenWindowsAutomaticallyPreferenceKey,
[NSNumber numberWithBool:YES], WebKitPluginsEnabledPreferenceKey,
+ [NSNumber numberWithBool:YES], WebKitDatabasesEnabledPreferenceKey,
+ [NSNumber numberWithBool:YES], WebKitLocalStorageEnabledPreferenceKey,
[NSNumber numberWithBool:YES], WebKitAllowAnimatedImagesPreferenceKey,
[NSNumber numberWithBool:YES], WebKitAllowAnimatedImageLoopingPreferenceKey,
[NSNumber numberWithBool:YES], WebKitDisplayImagesKey,
@@ -327,6 +329,12 @@ static WebCacheModel cacheModelForMainBundle(void)
@"0", WebKitPDFScaleFactorPreferenceKey,
@"0", WebKitUseSiteSpecificSpoofingPreferenceKey,
[NSNumber numberWithInt:WebKitEditableLinkDefaultBehavior], WebKitEditableLinkBehaviorPreferenceKey,
+#if !defined(BUILDING_ON_TIGER) && !defined(BUILDING_ON_LEOPARD)
+ [NSNumber numberWithInt:WebTextDirectionSubmenuAutomaticallyIncluded],
+#else
+ [NSNumber numberWithInt:WebTextDirectionSubmenuNeverIncluded],
+#endif
+ WebKitTextDirectionSubmenuInclusionBehaviorPreferenceKey,
[NSNumber numberWithBool:NO], WebKitDOMPasteAllowedPreferenceKey,
[NSNumber numberWithBool:YES], WebKitUsesPageCachePreferenceKey,
[NSNumber numberWithInt:cacheModelForMainBundle()], WebKitCacheModelPreferenceKey,
@@ -905,6 +913,23 @@ static WebCacheModel cacheModelForMainBundle(void)
[self _setIntegerValue:behavior forKey:WebKitEditableLinkBehaviorPreferenceKey];
}
+- (WebTextDirectionSubmenuInclusionBehavior)textDirectionSubmenuInclusionBehavior
+{
+ WebTextDirectionSubmenuInclusionBehavior value = static_cast<WebTextDirectionSubmenuInclusionBehavior>([self _integerValueForKey:WebKitTextDirectionSubmenuInclusionBehaviorPreferenceKey]);
+ if (value != WebTextDirectionSubmenuNeverIncluded &&
+ value != WebTextDirectionSubmenuAutomaticallyIncluded &&
+ value != WebTextDirectionSubmenuAlwaysIncluded) {
+ // Ensure that a valid result is returned.
+ value = WebTextDirectionSubmenuNeverIncluded;
+ }
+ return value;
+}
+
+- (void)setTextDirectionSubmenuInclusionBehavior:(WebTextDirectionSubmenuInclusionBehavior)behavior
+{
+ [self _setIntegerValue:behavior forKey:WebKitTextDirectionSubmenuInclusionBehaviorPreferenceKey];
+}
+
- (BOOL)_useSiteSpecificSpoofing
{
return [self _boolValueForKey:WebKitUseSiteSpecificSpoofingPreferenceKey];
@@ -915,6 +940,26 @@ static WebCacheModel cacheModelForMainBundle(void)
[self _setBoolValue:newValue forKey:WebKitUseSiteSpecificSpoofingPreferenceKey];
}
+- (BOOL)databasesEnabled
+{
+ return [self _boolValueForKey:WebKitDatabasesEnabledPreferenceKey];
+}
+
+- (void)setDatabasesEnabled:(BOOL)databasesEnabled
+{
+ [self _setBoolValue:databasesEnabled forKey:WebKitDatabasesEnabledPreferenceKey];
+}
+
+- (BOOL)localStorageEnabled
+{
+ return [self _boolValueForKey:WebKitLocalStorageEnabledPreferenceKey];
+}
+
+- (void)setLocalStorageEnabled:(BOOL)localStorageEnabled
+{
+ [self _setBoolValue:localStorageEnabled forKey:WebKitLocalStorageEnabledPreferenceKey];
+}
+
+ (WebPreferences *)_getInstanceForIdentifier:(NSString *)ident
{
LOG(Encoding, "requesting for %@\n", ident);
diff --git a/WebKit/mac/WebView/WebPreferencesPrivate.h b/WebKit/mac/WebView/WebPreferencesPrivate.h
index 1981290..99ff49c 100644
--- a/WebKit/mac/WebView/WebPreferencesPrivate.h
+++ b/WebKit/mac/WebView/WebPreferencesPrivate.h
@@ -37,6 +37,12 @@ typedef enum {
WebKitEditableLinkNeverLive
} WebKitEditableLinkBehavior;
+typedef enum {
+ WebTextDirectionSubmenuNeverIncluded,
+ WebTextDirectionSubmenuAutomaticallyIncluded,
+ WebTextDirectionSubmenuAlwaysIncluded
+} WebTextDirectionSubmenuInclusionBehavior;
+
extern NSString *WebPreferencesChangedNotification;
extern NSString *WebPreferencesRemovedNotification;
@@ -77,6 +83,12 @@ extern NSString *WebPreferencesRemovedNotification;
- (BOOL)offlineWebApplicationCacheEnabled;
- (void)setOfflineWebApplicationCacheEnabled:(BOOL)offlineWebApplicationCacheEnabled;
+- (BOOL)databasesEnabled;
+- (void)setDatabasesEnabled:(BOOL)databasesEnabled;
+
+- (BOOL)localStorageEnabled;
+- (void)setLocalStorageEnabled:(BOOL)localStorageEnabled;
+
- (BOOL)zoomsTextOnly;
- (void)setZoomsTextOnly:(BOOL)zoomsTextOnly;
@@ -87,6 +99,9 @@ extern NSString *WebPreferencesRemovedNotification;
- (WebKitEditableLinkBehavior)editableLinkBehavior;
- (void)setEditableLinkBehavior:(WebKitEditableLinkBehavior)behavior;
+- (WebTextDirectionSubmenuInclusionBehavior)textDirectionSubmenuInclusionBehavior;
+- (void)setTextDirectionSubmenuInclusionBehavior:(WebTextDirectionSubmenuInclusionBehavior)behavior;
+
// If site-specific spoofing is enabled, some pages that do inappropriate user-agent string checks will be
// passed a nonstandard user-agent string to get them to work correctly. This method might be removed in
// the future when there's no more need for it.
diff --git a/WebKit/mac/WebView/WebRenderNode.mm b/WebKit/mac/WebView/WebRenderNode.mm
index c34ac34..65ee13c 100644
--- a/WebKit/mac/WebView/WebRenderNode.mm
+++ b/WebKit/mac/WebView/WebRenderNode.mm
@@ -32,6 +32,7 @@
#import "WebFrameView.h"
#import "WebHTMLView.h"
#import <WebCore/Frame.h>
+#import <WebCore/RenderText.h>
#import <WebCore/RenderWidget.h>
#import <WebCore/RenderView.h>
#import <WebCore/Widget.h>
@@ -86,10 +87,30 @@ static WebRenderNode *copyRenderNode(RenderObject* node)
Widget* widget = renderWidget ? renderWidget->widget() : 0;
NSView *view = widget ? widget->platformWidget() : nil;
- int nx, ny;
- node->absolutePosition(nx, ny);
+ // FIXME: broken with transforms
+ FloatPoint absPos = node->localToAbsolute(FloatPoint());
+ int x = 0;
+ int y = 0;
+ int width = 0;
+ int height = 0;
+ if (node->isBox()) {
+ RenderBox* box = toRenderBox(node);
+ x = box->x();
+ y = box->y();
+ width = box->width();
+ height = box->height();
+ } else if (node->isText()) {
+ // FIXME: Preserve old behavior even though it's strange.
+ RenderText* text = toRenderText(node);
+ x = text->firstRunX();
+ y = text->firstRunY();
+ IntRect box = text->linesBoundingBox();
+ width = box.width();
+ height = box.height();
+ }
+
WebRenderNode *result = [[WebRenderNode alloc] initWithName:name
- position:NSMakePoint(nx, ny) rect:NSMakeRect(node->xPos(), node->yPos(), node->width(), node->height())
+ position:absPos rect:NSMakeRect(x, y, width, height)
view:view children:children];
[name release];
diff --git a/WebKit/mac/WebView/WebResource.mm b/WebKit/mac/WebView/WebResource.mm
index 6e0c9f0..a5caa41 100644
--- a/WebKit/mac/WebView/WebResource.mm
+++ b/WebKit/mac/WebView/WebResource.mm
@@ -26,20 +26,23 @@
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
-#import "WebResourcePrivate.h"
+#import "WebResourceInternal.h"
#import "WebFrameInternal.h"
+#import "WebKitLogging.h"
+#import "WebKitVersionChecks.h"
#import "WebNSDictionaryExtras.h"
+#import "WebNSObjectExtras.h"
#import "WebNSURLExtras.h"
-
+#import <JavaScriptCore/InitializeThreading.h>
+#import <JavaScriptCore/PassRefPtr.h>
#import <WebCore/ArchiveResource.h>
#import <WebCore/LegacyWebArchive.h>
#import <WebCore/TextEncoding.h>
+#import <WebCore/ThreadCheck.h>
#import <WebCore/WebCoreObjCExtras.h>
#import <WebCore/WebCoreURLResponse.h>
-#import <wtf/PassRefPtr.h>
-
using namespace WebCore;
static NSString * const WebResourceDataKey = @"WebResourceData";
@@ -49,25 +52,22 @@ static NSString * const WebResourceURLKey = @"WebResourceURL";
static NSString * const WebResourceTextEncodingNameKey = @"WebResourceTextEncodingName";
static NSString * const WebResourceResponseKey = @"WebResourceResponse";
-#define WebResourceVersion 1
-
-@interface WebResourcePrivate : NSObject
-{
+@interface WebResourcePrivate : NSObject {
@public
ArchiveResource* coreResource;
}
-
- (id)initWithCoreResource:(PassRefPtr<ArchiveResource>)coreResource;
@end
@implementation WebResourcePrivate
-#ifndef BUILDING_ON_TIGER
+ (void)initialize
{
+ JSC::initializeThreading();
+#ifndef BUILDING_ON_TIGER
WebCoreObjCFinalizeOnMainThread(self);
-}
#endif
+}
- (id)init
{
@@ -78,11 +78,9 @@ static NSString * const WebResourceResponseKey = @"WebResourceResponse"
{
self = [super init];
if (!self)
- return self;
-
+ return nil;
// Acquire the PassRefPtr<>'s ref as our own manual ref
coreResource = passedResource.releaseRef();
-
return self;
}
@@ -123,6 +121,8 @@ static NSString * const WebResourceResponseKey = @"WebResourceResponse"
- (id)initWithCoder:(NSCoder *)decoder
{
+ WebCoreThreadViolationCheck();
+
self = [super init];
if (!self)
return nil;
@@ -200,29 +200,78 @@ static NSString * const WebResourceResponseKey = @"WebResourceResponse"
- (NSData *)data
{
- if (_private->coreResource && _private->coreResource->data())
- return [_private->coreResource->data()->createNSData() autorelease];
- return 0;
+#ifdef MAIL_THREAD_WORKAROUND
+ if (needMailThreadWorkaround())
+ return [[self _webkit_invokeOnMainThread] data];
+#endif
+
+ WebCoreThreadViolationCheck();
+
+ if (!_private->coreResource)
+ return nil;
+ if (!_private->coreResource->data())
+ return nil;
+ return [_private->coreResource->data()->createNSData() autorelease];
}
- (NSURL *)URL
{
- return _private->coreResource ? (NSURL *)_private->coreResource->url() : 0;
+#ifdef MAIL_THREAD_WORKAROUND
+ if (needMailThreadWorkaround())
+ return [[self _webkit_invokeOnMainThread] URL];
+#endif
+
+ WebCoreThreadViolationCheck();
+
+ if (!_private->coreResource)
+ return nil;
+ NSURL *url = _private->coreResource->url();
+ return url;
}
- (NSString *)MIMEType
{
- return _private->coreResource ? (NSString *)_private->coreResource->mimeType() : 0;
+#ifdef MAIL_THREAD_WORKAROUND
+ if (needMailThreadWorkaround())
+ return [[self _webkit_invokeOnMainThread] MIMEType];
+#endif
+
+ WebCoreThreadViolationCheck();
+
+ if (!_private->coreResource)
+ return nil;
+ NSString *mimeType = _private->coreResource->mimeType();
+ return mimeType;
}
- (NSString *)textEncodingName
{
- return _private->coreResource ? (NSString *)_private->coreResource->textEncoding() : 0;
+#ifdef MAIL_THREAD_WORKAROUND
+ if (needMailThreadWorkaround())
+ return [[self _webkit_invokeOnMainThread] textEncodingName];
+#endif
+
+ WebCoreThreadViolationCheck();
+
+ if (!_private->coreResource)
+ return nil;
+ NSString *textEncodingName = _private->coreResource->textEncoding();
+ return textEncodingName;
}
- (NSString *)frameName
{
- return _private->coreResource ? (NSString *)_private->coreResource->frameName() : 0;
+#ifdef MAIL_THREAD_WORKAROUND
+ if (needMailThreadWorkaround())
+ return [[self _webkit_invokeOnMainThread] frameName];
+#endif
+
+ WebCoreThreadViolationCheck();
+
+ if (!_private->coreResource)
+ return nil;
+ NSString *frameName = _private->coreResource->frameName();
+ return frameName;
}
- (id)description
@@ -267,8 +316,18 @@ static NSString * const WebResourceResponseKey = @"WebResourceResponse"
// FIXME: This "ignoreWhenUnarchiving" concept is an ugly one - can we find a cleaner solution for those who need this SPI?
- (void)_ignoreWhenUnarchiving
{
- if (_private->coreResource)
- _private->coreResource->ignoreWhenUnarchiving();
+#ifdef MAIL_THREAD_WORKAROUND
+ if (needMailThreadWorkaround()) {
+ [[self _webkit_invokeOnMainThread] _ignoreWhenUnarchiving];
+ return;
+ }
+#endif
+
+ WebCoreThreadViolationCheck();
+
+ if (!_private->coreResource)
+ return;
+ _private->coreResource->ignoreWhenUnarchiving();
}
- (id)_initWithData:(NSData *)data
@@ -279,6 +338,13 @@ static NSString * const WebResourceResponseKey = @"WebResourceResponse"
response:(NSURLResponse *)response
copyData:(BOOL)copyData
{
+#ifdef MAIL_THREAD_WORKAROUND
+ if (needMailThreadWorkaround())
+ return [[self _webkit_invokeOnMainThread] _initWithData:data URL:URL MIMEType:MIMEType textEncodingName:textEncodingName frameName:frameName response:response copyData:copyData];
+#endif
+
+ WebCoreThreadViolationCheck();
+
self = [super init];
if (!self)
return nil;
@@ -287,9 +353,9 @@ static NSString * const WebResourceResponseKey = @"WebResourceResponse"
[self release];
return nil;
}
-
+
_private = [[WebResourcePrivate alloc] initWithCoreResource:ArchiveResource::create(SharedBuffer::wrapNSData(copyData ? [[data copy] autorelease] : data), URL, MIMEType, textEncodingName, frameName, response)];
-
+
return self;
}
@@ -303,44 +369,81 @@ static NSString * const WebResourceResponseKey = @"WebResourceResponse"
textEncodingName:[response textEncodingName]
frameName:nil
response:response
- copyData:NO];
+ copyData:NO];
+}
+
+- (NSString *)_suggestedFilename
+{
+#ifdef MAIL_THREAD_WORKAROUND
+ if (needMailThreadWorkaround())
+ return [[self _webkit_invokeOnMainThread] _suggestedFilename];
+#endif
+
+ WebCoreThreadViolationCheck();
+
+ if (!_private->coreResource)
+ return nil;
+ NSString *suggestedFilename = _private->coreResource->response().suggestedFilename();
+ return suggestedFilename;
}
- (NSFileWrapper *)_fileWrapperRepresentation
{
- SharedBuffer* coreData = _private->coreResource ? _private->coreResource->data() : 0;
- NSData *data = coreData ? [coreData->createNSData() autorelease] : nil;
-
- NSFileWrapper *wrapper = [[[NSFileWrapper alloc] initRegularFileWithContents:data] autorelease];
- NSString *preferredFilename = _private->coreResource ? (NSString *)_private->coreResource->response().suggestedFilename() : nil;
- if (!preferredFilename || ![preferredFilename length]) {
- NSURL *url = _private->coreResource ? (NSURL *)_private->coreResource->url() : nil;
- NSString *mimeType = _private->coreResource ? (NSString *)_private->coreResource->mimeType() : nil;
- preferredFilename = [url _webkit_suggestedFilenameWithMIMEType:mimeType];
- }
-
- [wrapper setPreferredFilename:preferredFilename];
+ NSFileWrapper *wrapper = [[[NSFileWrapper alloc] initRegularFileWithContents:[self data]] autorelease];
+ NSString *filename = [self _suggestedFilename];
+ if (!filename || ![filename length])
+ filename = [[self URL] _webkit_suggestedFilenameWithMIMEType:[self MIMEType]];
+ [wrapper setPreferredFilename:filename];
return wrapper;
}
- (NSURLResponse *)_response
{
+#ifdef MAIL_THREAD_WORKAROUND
+ if (needMailThreadWorkaround())
+ return [[self _webkit_invokeOnMainThread] _response];
+#endif
+
+ WebCoreThreadViolationCheck();
+
NSURLResponse *response = nil;
if (_private->coreResource)
response = _private->coreResource->response().nsURLResponse();
-
return response ? response : [[[NSURLResponse alloc] init] autorelease];
}
- (NSString *)_stringValue
{
- WebCore::TextEncoding encoding(_private->coreResource ? (NSString *)_private->coreResource->textEncoding() : nil);
+#ifdef MAIL_THREAD_WORKAROUND
+ if (needMailThreadWorkaround())
+ return [[self _webkit_invokeOnMainThread] _stringValue];
+#endif
+
+ WebCoreThreadViolationCheck();
+
+ WebCore::TextEncoding encoding;
+ if (_private->coreResource)
+ encoding = _private->coreResource->textEncoding();
if (!encoding.isValid())
encoding = WindowsLatin1Encoding();
SharedBuffer* coreData = _private->coreResource ? _private->coreResource->data() : 0;
-
return encoding.decode(reinterpret_cast<const char*>(coreData ? coreData->data() : 0), coreData ? coreData->size() : 0);
}
@end
+
+#ifdef MAIL_THREAD_WORKAROUND
+
+@implementation WebResource (WebMailThreadWorkaround)
+
++ (BOOL)_needMailThreadWorkaroundIfCalledOffMainThread
+{
+ static BOOL isOldMail = !WebKitLinkedOnOrAfter(WEBKIT_FIRST_VERSION_WITHOUT_MAIL_THREAD_WORKAROUND)
+ && [[[NSBundle mainBundle] bundleIdentifier] isEqualToString:@"com.apple.mail"];
+ return isOldMail;
+}
+
+@end
+
+#endif
diff --git a/WebKit/mac/WebView/WebResourceInternal.h b/WebKit/mac/WebView/WebResourceInternal.h
index 84f6aba..d135197 100644
--- a/WebKit/mac/WebView/WebResourceInternal.h
+++ b/WebKit/mac/WebView/WebResourceInternal.h
@@ -26,17 +26,31 @@
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
-#import "WebResource.h"
-
+#import "WebResourcePrivate.h"
#import <wtf/PassRefPtr.h>
+#if defined(BUILDING_ON_TIGER) || defined(BUILDING_ON_LEOPARD)
+#define MAIL_THREAD_WORKAROUND 1
+#endif
+
namespace WebCore {
class ArchiveResource;
}
@interface WebResource (WebResourceInternal)
+- (id)_initWithCoreResource:(PassRefPtr<WebCore::ArchiveResource>)coreResource;
+- (WebCore::ArchiveResource*)_coreResource;
+@end
-- (id)_initWithCoreResource:(WTF::PassRefPtr<WebCore::ArchiveResource>)coreResource;
-- (WebCore::ArchiveResource *)_coreResource;
+#ifdef MAIL_THREAD_WORKAROUND
+@interface WebResource (WebMailThreadWorkaround)
++ (BOOL)_needMailThreadWorkaroundIfCalledOffMainThread;
@end
+
+inline bool needMailThreadWorkaround()
+{
+ return !pthread_main_np() && [WebResource _needMailThreadWorkaroundIfCalledOffMainThread];
+}
+
+#endif
diff --git a/WebKit/mac/WebView/WebResourceLoadDelegatePrivate.h b/WebKit/mac/WebView/WebResourceLoadDelegatePrivate.h
index 5fd13ee..6dc3f2d 100644
--- a/WebKit/mac/WebView/WebResourceLoadDelegatePrivate.h
+++ b/WebKit/mac/WebView/WebResourceLoadDelegatePrivate.h
@@ -41,6 +41,7 @@
@interface NSObject (WebResourceLoadDelegatePrivate)
- (void)webView:(WebView *)webView didLoadResourceFromMemoryCache:(NSURLRequest *)request response:(NSURLResponse *)response length:(WebNSInteger)length fromDataSource:(WebDataSource *)dataSource;
+- (BOOL)webView:(WebView *)webView resource:(id)identifier shouldUseCredentialStorageForDataSource:(WebDataSource *)dataSource;
@end
diff --git a/WebKit/mac/WebView/WebScriptDebugDelegate.h b/WebKit/mac/WebView/WebScriptDebugDelegate.h
index fba48f6..7334127 100644
--- a/WebKit/mac/WebView/WebScriptDebugDelegate.h
+++ b/WebKit/mac/WebView/WebScriptDebugDelegate.h
@@ -34,6 +34,12 @@
#define WebNSUInteger NSUInteger
#endif
+#if defined(BUILDING_ON_TIGER) || defined(BUILDING_ON_LEOPARD)
+typedef int WebSourceId;
+#else
+typedef int WebSourceId; // FIXME <rdar://problem/6263293>: Turn this int into an intptr_t once <rdar://problem/6263297> is fixed.
+#endif
+
@class WebView;
@class WebFrame;
@class WebScriptCallFrame;
@@ -56,14 +62,14 @@ enum {
// this delegate method is deprecated, please switch to the new version below
- (void)webView:(WebView *)webView didParseSource:(NSString *)source
fromURL:(NSString *)url
- sourceId:(int)sid
+ sourceId:(WebSourceId)sid
forWebFrame:(WebFrame *)webFrame;
// some source was parsed, establishing a "source ID" (>= 0) for future reference
- (void)webView:(WebView *)webView didParseSource:(NSString *)source
baseLineNumber:(WebNSUInteger)lineNumber
fromURL:(NSURL *)url
- sourceId:(int)sid
+ sourceId:(WebSourceId)sid
forWebFrame:(WebFrame *)webFrame;
// some source failed to parse
@@ -75,25 +81,25 @@ enum {
// just entered a stack frame (i.e. called a function, or started global scope)
- (void)webView:(WebView *)webView didEnterCallFrame:(WebScriptCallFrame *)frame
- sourceId:(int)sid
+ sourceId:(WebSourceId)sid
line:(int)lineno
forWebFrame:(WebFrame *)webFrame;
// about to execute some code
- (void)webView:(WebView *)webView willExecuteStatement:(WebScriptCallFrame *)frame
- sourceId:(int)sid
+ sourceId:(WebSourceId)sid
line:(int)lineno
forWebFrame:(WebFrame *)webFrame;
// about to leave a stack frame (i.e. return from a function)
- (void)webView:(WebView *)webView willLeaveCallFrame:(WebScriptCallFrame *)frame
- sourceId:(int)sid
+ sourceId:(WebSourceId)sid
line:(int)lineno
forWebFrame:(WebFrame *)webFrame;
// exception is being thrown
- (void)webView:(WebView *)webView exceptionWasRaised:(WebScriptCallFrame *)frame
- sourceId:(int)sid
+ sourceId:(WebSourceId)sid
line:(int)lineno
forWebFrame:(WebFrame *)webFrame;
@end
@@ -135,3 +141,4 @@ enum {
@end
#undef WebNSUInteger
+
diff --git a/WebKit/mac/WebView/WebScriptDebugDelegate.mm b/WebKit/mac/WebView/WebScriptDebugDelegate.mm
index be0a0d5..0b47e26 100644
--- a/WebKit/mac/WebView/WebScriptDebugDelegate.mm
+++ b/WebKit/mac/WebView/WebScriptDebugDelegate.mm
@@ -26,22 +26,24 @@
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
-#import "WebScriptDebugger.h"
#import "WebDataSource.h"
#import "WebDataSourceInternal.h"
#import "WebFrameInternal.h"
#import "WebScriptDebugDelegate.h"
+#import "WebScriptDebugger.h"
#import "WebViewInternal.h"
-#import <debugger/DebuggerCallFrame.h>
-#import <runtime/ExecState.h>
-#import <runtime/JSGlobalObject.h>
-#import <runtime/JSFunction.h>
-#import <runtime/JSLock.h>
-#import <kjs/interpreter.h>
#import <WebCore/Frame.h>
-#import <WebCore/WebScriptObjectPrivate.h>
#import <WebCore/ScriptController.h>
+#import <WebCore/WebScriptObjectPrivate.h>
#import <WebCore/runtime_root.h>
+#import <debugger/Debugger.h>
+#import <debugger/DebuggerActivation.h>
+#import <debugger/DebuggerCallFrame.h>
+#import <interpreter/CallFrame.h>
+#import <runtime/Completion.h>
+#import <runtime/JSFunction.h>
+#import <runtime/JSGlobalObject.h>
+#import <runtime/JSLock.h>
using namespace JSC;
using namespace WebCore;
@@ -53,7 +55,7 @@ NSString * const WebScriptErrorLineNumberKey = @"WebScriptErrorLineNumber";
@interface WebScriptCallFrame (WebScriptDebugDelegateInternal)
-- (id)_convertValueToObjcValue:(JSValue*)value;
+- (id)_convertValueToObjcValue:(JSValuePtr)value;
@end
@@ -62,6 +64,7 @@ NSString * const WebScriptErrorLineNumberKey = @"WebScriptErrorLineNumber";
WebScriptObject *globalObject; // the global object's proxy (not retained)
WebScriptCallFrame *caller; // previous stack frame
DebuggerCallFrame* debuggerCallFrame;
+ WebScriptDebugger* debugger;
}
@end
@@ -85,12 +88,13 @@ NSString * const WebScriptErrorLineNumberKey = @"WebScriptErrorLineNumber";
@implementation WebScriptCallFrame (WebScriptDebugDelegateInternal)
-- (WebScriptCallFrame *)_initWithGlobalObject:(WebScriptObject *)globalObj caller:(WebScriptCallFrame *)caller debuggerCallFrame:(const DebuggerCallFrame&)debuggerCallFrame
+- (WebScriptCallFrame *)_initWithGlobalObject:(WebScriptObject *)globalObj debugger:(WebScriptDebugger *)debugger caller:(WebScriptCallFrame *)caller debuggerCallFrame:(const DebuggerCallFrame&)debuggerCallFrame
{
if ((self = [super init])) {
_private = [[WebScriptCallFramePrivate alloc] init];
_private->globalObject = globalObj;
_private->caller = [caller retain];
+ _private->debugger = debugger;
}
return self;
}
@@ -109,7 +113,7 @@ NSString * const WebScriptErrorLineNumberKey = @"WebScriptErrorLineNumber";
_private->debuggerCallFrame = 0;
}
-- (id)_convertValueToObjcValue:(JSValue*)value
+- (id)_convertValueToObjcValue:(JSValuePtr)value
{
if (!value)
return nil;
@@ -177,8 +181,12 @@ NSString * const WebScriptErrorLineNumberKey = @"WebScriptErrorLineNumber";
NSMutableArray *scopes = [[NSMutableArray alloc] init];
ScopeChainIterator end = scopeChain->end();
- for (ScopeChainIterator it = scopeChain->begin(); it != end; ++it)
- [scopes addObject:[self _convertValueToObjcValue:(*it)]];
+ for (ScopeChainIterator it = scopeChain->begin(); it != end; ++it) {
+ JSObject* object = *it;
+ if (object->isActivationObject())
+ object = new (scopeChain->globalData) DebuggerActivation(object);
+ [scopes addObject:[self _convertValueToObjcValue:object]];
+ }
NSArray *result = [NSArray arrayWithArray:scopes];
[scopes release];
@@ -204,7 +212,7 @@ NSString * const WebScriptErrorLineNumberKey = @"WebScriptErrorLineNumber";
if (!_private->debuggerCallFrame)
return nil;
- JSValue* exception = _private->debuggerCallFrame->exception();
+ JSValuePtr exception = _private->debuggerCallFrame->exception();
return exception ? [self _convertValueToObjcValue:exception] : nil;
}
@@ -221,8 +229,25 @@ NSString * const WebScriptErrorLineNumberKey = @"WebScriptErrorLineNumber";
JSLock lock(false);
- JSValue* exception = noValue();
- JSValue* result = _private->debuggerCallFrame->evaluate(String(script), exception);
+ // If this is the global call frame and there is no dynamic global object,
+ // Dashcode is attempting to execute JS in the evaluator using a stale
+ // WebScriptCallFrame. Instead, we need to set the dynamic global object
+ // and evaluate the JS in the global object's global call frame.
+ JSGlobalObject* globalObject = _private->debugger->globalObject();
+ if (self == _private->debugger->globalCallFrame() && !globalObject->globalData()->dynamicGlobalObject) {
+ JSGlobalObject* globalObject = _private->debugger->globalObject();
+
+ DynamicGlobalObjectScope globalObjectScope(globalObject->globalExec(), globalObject);
+
+ JSValuePtr exception = noValue();
+ JSValuePtr result = evaluateInGlobalCallFrame(String(script), exception, globalObject);
+ if (exception)
+ return [self _convertValueToObjcValue:exception];
+ return result ? [self _convertValueToObjcValue:result] : nil;
+ }
+
+ JSValuePtr exception = noValue();
+ JSValuePtr result = _private->debuggerCallFrame->evaluate(String(script), exception);
if (exception)
return [self _convertValueToObjcValue:exception];
return result ? [self _convertValueToObjcValue:result] : nil;
diff --git a/WebKit/mac/WebView/WebScriptDebugger.h b/WebKit/mac/WebView/WebScriptDebugger.h
index caec994..1213ab2 100644
--- a/WebKit/mac/WebView/WebScriptDebugger.h
+++ b/WebKit/mac/WebView/WebScriptDebugger.h
@@ -30,6 +30,7 @@
#define WebScriptDebugger_h
#include <debugger/Debugger.h>
+#include <runtime/Protect.h>
#include <wtf/RetainPtr.h>
@@ -50,6 +51,8 @@ class WebScriptDebugger : public JSC::Debugger {
public:
WebScriptDebugger(JSC::JSGlobalObject*);
+ void initGlobalCallFrame(const JSC::DebuggerCallFrame&);
+
virtual void sourceParsed(JSC::ExecState*, const JSC::SourceCode&, int errorLine, const JSC::UString& errorMsg);
virtual void callEvent(const JSC::DebuggerCallFrame&, intptr_t sourceID, int lineNumber);
virtual void atStatement(const JSC::DebuggerCallFrame&, intptr_t sourceID, int lineNumber);
@@ -59,9 +62,15 @@ public:
virtual void didExecuteProgram(const JSC::DebuggerCallFrame&, intptr_t sourceID, int lineno);
virtual void didReachBreakpoint(const JSC::DebuggerCallFrame&, intptr_t sourceID, int lineno);
+ JSC::JSGlobalObject* globalObject() const { return m_globalObject.get(); }
+ WebScriptCallFrame *globalCallFrame() const { return m_globalCallFrame.get(); }
+
private:
bool m_callingDelegate;
RetainPtr<WebScriptCallFrame> m_topCallFrame;
+
+ JSC::ProtectedPtr<JSC::JSGlobalObject> m_globalObject;
+ RetainPtr<WebScriptCallFrame> m_globalCallFrame;
};
#endif // WebScriptDebugger_h
diff --git a/WebKit/mac/WebView/WebScriptDebugger.mm b/WebKit/mac/WebView/WebScriptDebugger.mm
index 0dd6b0e..d97cbcf 100644
--- a/WebKit/mac/WebView/WebScriptDebugger.mm
+++ b/WebKit/mac/WebView/WebScriptDebugger.mm
@@ -43,7 +43,7 @@ using namespace JSC;
using namespace WebCore;
@interface WebScriptCallFrame (WebScriptDebugDelegateInternal)
-- (WebScriptCallFrame *)_initWithGlobalObject:(WebScriptObject *)globalObj caller:(WebScriptCallFrame *)caller debuggerCallFrame:(const DebuggerCallFrame&)debuggerCallFrame;
+- (WebScriptCallFrame *)_initWithGlobalObject:(WebScriptObject *)globalObj debugger:(WebScriptDebugger *)debugger caller:(WebScriptCallFrame *)caller debuggerCallFrame:(const DebuggerCallFrame&)debuggerCallFrame;
- (void)_setDebuggerCallFrame:(const DebuggerCallFrame&)debuggerCallFrame;
- (void)_clearDebuggerCallFrame;
@end
@@ -55,7 +55,7 @@ NSString *toNSString(const UString& s)
return [NSString stringWithCharacters:reinterpret_cast<const unichar*>(s.data()) length:s.size()];
}
-NSString *toNSString(const SourceCode& s)
+static NSString *toNSString(const SourceCode& s)
{
if (!s.length())
return nil;
@@ -78,9 +78,25 @@ static WebFrame *toWebFrame(JSGlobalObject* globalObject)
WebScriptDebugger::WebScriptDebugger(JSGlobalObject* globalObject)
: m_callingDelegate(false)
+ , m_globalObject(globalObject)
{
attach(globalObject);
- callEvent(globalObject->globalExec(), 0, -1);
+ initGlobalCallFrame(globalObject->globalExec());
+}
+
+void WebScriptDebugger::initGlobalCallFrame(const DebuggerCallFrame& debuggerCallFrame)
+{
+ m_callingDelegate = true;
+
+ WebFrame *webFrame = toWebFrame(debuggerCallFrame.dynamicGlobalObject());
+
+ m_topCallFrame.adoptNS([[WebScriptCallFrame alloc] _initWithGlobalObject:core(webFrame)->script()->windowScriptObject() debugger:this caller:m_topCallFrame.get() debuggerCallFrame:debuggerCallFrame]);
+ m_globalCallFrame = m_topCallFrame;
+
+ WebView *webView = [webFrame webView];
+ [[webView _scriptDebugDelegateForwarder] webView:webView didEnterCallFrame:m_topCallFrame.get() sourceId:static_cast<WebSourceId>(0) line:-1 forWebFrame:webFrame];
+
+ m_callingDelegate = false;
}
// callbacks - relay to delegate
@@ -97,8 +113,8 @@ void WebScriptDebugger::sourceParsed(ExecState* exec, const SourceCode& source,
WebFrame *webFrame = toWebFrame(exec->dynamicGlobalObject());
WebView *webView = [webFrame webView];
if (errorLine == -1) {
- [[webView _scriptDebugDelegateForwarder] webView:webView didParseSource:nsSource baseLineNumber:source.firstLine() fromURL:nsURL sourceId:static_cast<int>(source.provider()->asID()) forWebFrame:webFrame];
- [[webView _scriptDebugDelegateForwarder] webView:webView didParseSource:nsSource fromURL:[nsURL absoluteString] sourceId:static_cast<int>(source.provider()->asID()) forWebFrame:webFrame]; // deprecated delegate method
+ [[webView _scriptDebugDelegateForwarder] webView:webView didParseSource:nsSource baseLineNumber:source.firstLine() fromURL:nsURL sourceId:static_cast<WebSourceId>(source.provider()->asID()) forWebFrame:webFrame];
+ [[webView _scriptDebugDelegateForwarder] webView:webView didParseSource:nsSource fromURL:[nsURL absoluteString] sourceId:static_cast<WebSourceId>(source.provider()->asID()) forWebFrame:webFrame]; // deprecated delegate method
} else {
NSString* nsErrorMessage = toNSString(errorMsg);
NSDictionary *info = [[NSDictionary alloc] initWithObjectsAndKeys:nsErrorMessage, WebScriptErrorDescriptionKey, [NSNumber numberWithUnsignedInt:errorLine], WebScriptErrorLineNumberKey, nil];
@@ -120,10 +136,10 @@ void WebScriptDebugger::callEvent(const DebuggerCallFrame& debuggerCallFrame, in
WebFrame *webFrame = toWebFrame(debuggerCallFrame.dynamicGlobalObject());
- m_topCallFrame.adoptNS([[WebScriptCallFrame alloc] _initWithGlobalObject:core(webFrame)->script()->windowScriptObject() caller:m_topCallFrame.get() debuggerCallFrame:debuggerCallFrame]);
+ m_topCallFrame.adoptNS([[WebScriptCallFrame alloc] _initWithGlobalObject:core(webFrame)->script()->windowScriptObject() debugger:this caller:m_topCallFrame.get() debuggerCallFrame:debuggerCallFrame]);
WebView *webView = [webFrame webView];
- [[webView _scriptDebugDelegateForwarder] webView:webView didEnterCallFrame:m_topCallFrame.get() sourceId:static_cast<int>(sourceID) line:lineNumber forWebFrame:webFrame];
+ [[webView _scriptDebugDelegateForwarder] webView:webView didEnterCallFrame:m_topCallFrame.get() sourceId:static_cast<WebSourceId>(sourceID) line:lineNumber forWebFrame:webFrame];
m_callingDelegate = false;
}
@@ -139,7 +155,7 @@ void WebScriptDebugger::atStatement(const DebuggerCallFrame& debuggerCallFrame,
WebView *webView = [webFrame webView];
[m_topCallFrame.get() _setDebuggerCallFrame:debuggerCallFrame];
- [[webView _scriptDebugDelegateForwarder] webView:webView willExecuteStatement:m_topCallFrame.get() sourceId:static_cast<int>(sourceID) line:lineNumber forWebFrame:webFrame];
+ [[webView _scriptDebugDelegateForwarder] webView:webView willExecuteStatement:m_topCallFrame.get() sourceId:static_cast<WebSourceId>(sourceID) line:lineNumber forWebFrame:webFrame];
m_callingDelegate = false;
}
@@ -155,7 +171,7 @@ void WebScriptDebugger::returnEvent(const DebuggerCallFrame& debuggerCallFrame,
WebView *webView = [webFrame webView];
[m_topCallFrame.get() _setDebuggerCallFrame:debuggerCallFrame];
- [[webView _scriptDebugDelegateForwarder] webView:webView willLeaveCallFrame:m_topCallFrame.get() sourceId:static_cast<int>(sourceID) line:lineNumber forWebFrame:webFrame];
+ [[webView _scriptDebugDelegateForwarder] webView:webView willLeaveCallFrame:m_topCallFrame.get() sourceId:static_cast<WebSourceId>(sourceID) line:lineNumber forWebFrame:webFrame];
[m_topCallFrame.get() _clearDebuggerCallFrame];
m_topCallFrame = [m_topCallFrame.get() caller];
@@ -174,7 +190,7 @@ void WebScriptDebugger::exception(const DebuggerCallFrame& debuggerCallFrame, in
WebView *webView = [webFrame webView];
[m_topCallFrame.get() _setDebuggerCallFrame:debuggerCallFrame];
- [[webView _scriptDebugDelegateForwarder] webView:webView exceptionWasRaised:m_topCallFrame.get() sourceId:static_cast<int>(sourceID) line:lineNumber forWebFrame:webFrame];
+ [[webView _scriptDebugDelegateForwarder] webView:webView exceptionWasRaised:m_topCallFrame.get() sourceId:static_cast<WebSourceId>(sourceID) line:lineNumber forWebFrame:webFrame];
m_callingDelegate = false;
}
diff --git a/WebKit/mac/WebView/WebTextIterator.h b/WebKit/mac/WebView/WebTextIterator.h
index e6f77ac..ab5ca4e 100644
--- a/WebKit/mac/WebView/WebTextIterator.h
+++ b/WebKit/mac/WebView/WebTextIterator.h
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008 Apple Inc. All Rights Reserved.
+ * Copyright (C) 2008, 2009 Apple Inc. All Rights Reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
@@ -25,13 +25,17 @@
#import <Foundation/Foundation.h>
+#if MAC_OS_X_VERSION_MAX_ALLOWED <= MAC_OS_X_VERSION_10_4
+#define WebNSUInteger unsigned int
+#else
+#define WebNSUInteger NSUInteger
+#endif
@class DOMRange;
@class DOMNode;
@class WebTextIteratorPrivate;
-@interface WebTextIterator : NSObject
-{
+@interface WebTextIterator : NSObject {
@private
WebTextIteratorPrivate *_private;
}
@@ -39,28 +43,53 @@
- (id)initWithRange:(DOMRange *)range;
/*!
- @method advance:
+ @method advance
@abstract Makes the WebTextIterator iterate to the next visible text element.
*/
- (void)advance;
/*!
- @method currentNode:
- @result The current DOMNode in the WebTextIterator.
+ @method atEnd
+ @result YES if the WebTextIterator has reached the end of the DOMRange.
*/
-- (DOMNode *)currentNode;
+- (BOOL)atEnd;
/*!
- @method currentText:
- @result The current text in the WebTextIterator.
+ @method currentRange
+ @result A range, indicating the position within the document of the current text.
*/
-- (NSString *)currentText;
+- (DOMRange *)currentRange;
/*!
- @method atEnd:
- @result YES if the WebTextIterator has reached the end of the DOMRange.
+ @method currentTextPointer
+ @result A pointer to the current text. The pointer becomes invalid after any modification is made to the document; it must be used right away.
*/
-- (BOOL)atEnd;
+- (const unichar *)currentTextPointer;
+
+/*!
+ @method currentTextLength
+ @result lengthPtr Length of the current text.
+ */
+- (WebNSUInteger)currentTextLength;
+
+@end
+
+@interface WebTextIterator (WebTextIteratorDeprecated)
+/*!
+ @method currentNode
+ @abstract A convenience method that finds the first node in currentRange; it's almost always better to use currentRange instead.
+ @result The current DOMNode in the WebTextIterator
+ */
+- (DOMNode *)currentNode;
+
+/*!
+ @method currentText
+ @abstract A convenience method that makes an NSString out of the current text; it's almost always better to use currentTextPointer and currentTextLength instead.
+ @result The current text in the WebTextIterator.
+ */
+- (NSString *)currentText;
@end
+
+#undef WebNSUInteger
diff --git a/WebKit/mac/WebView/WebTextIterator.mm b/WebKit/mac/WebView/WebTextIterator.mm
index 86db6d3..15eeb5f 100644
--- a/WebKit/mac/WebView/WebTextIterator.mm
+++ b/WebKit/mac/WebView/WebTextIterator.mm
@@ -27,30 +27,27 @@
#import "DOMNodeInternal.h"
#import "DOMRangeInternal.h"
+#import "WebTypesInternal.h"
+#import <JavaScriptCore/Vector.h>
#import <WebCore/TextIterator.h>
-#import <wtf/Vector.h>
+#import <WebCore/WebCoreObjCExtras.h>
+using namespace JSC;
using namespace WebCore;
-@interface WebTextIteratorPrivate : NSObject
-{
+@interface WebTextIteratorPrivate : NSObject {
@public
- TextIterator* m_textIterator;
+ OwnPtr<TextIterator> _textIterator;
}
@end
@implementation WebTextIteratorPrivate
-- (void)dealloc
-{
- delete m_textIterator;
- [super dealloc];
-}
-
-- (void)finalize
++ (void)initialize
{
- delete m_textIterator;
- [super finalize];
+#ifndef BUILDING_ON_TIGER
+ WebCoreObjCFinalizeOnMainThread(self);
+#endif
}
@end
@@ -70,39 +67,47 @@ using namespace WebCore;
return self;
_private = [[WebTextIteratorPrivate alloc] init];
- _private->m_textIterator = new TextIterator([range _range], true, false);
+ _private->_textIterator.set(new TextIterator([range _range], true, false));
return self;
}
- (void)advance
{
- ASSERT(_private->m_textIterator);
-
- if (_private->m_textIterator->atEnd())
- return;
-
- _private->m_textIterator->advance();
+ _private->_textIterator->advance();
}
-- (DOMNode *)currentNode
+- (BOOL)atEnd
{
- ASSERT(_private->m_textIterator);
-
- return [DOMNode _wrapNode:_private->m_textIterator->node()];
+ return _private->_textIterator->atEnd();
}
-- (NSString *)currentText
+- (DOMRange *)currentRange
{
- ASSERT(_private->m_textIterator);
-
- return [NSString stringWithCharacters:_private->m_textIterator->characters() length:_private->m_textIterator->length()];
+ return [DOMRange _wrapRange:_private->_textIterator->range().get()];
}
-- (BOOL)atEnd
+- (const unichar *)currentTextPointer
{
- ASSERT(_private->m_textIterator);
-
- return _private->m_textIterator->atEnd();
+ return _private->_textIterator->characters();
+}
+
+- (NSUInteger)currentTextLength
+{
+ return _private->_textIterator->length();
+}
+
+@end
+
+@implementation WebTextIterator (WebTextIteratorDeprecated)
+
+- (DOMNode *)currentNode
+{
+ return [DOMNode _wrapNode:_private->_textIterator->node()];
+}
+
+- (NSString *)currentText
+{
+ return [NSString stringWithCharacters:_private->_textIterator->characters() length:_private->_textIterator->length()];
}
@end
diff --git a/WebKit/mac/WebView/WebUIDelegatePrivate.h b/WebKit/mac/WebView/WebUIDelegatePrivate.h
index 6a3c32f..bb4d780 100644
--- a/WebKit/mac/WebView/WebUIDelegatePrivate.h
+++ b/WebKit/mac/WebView/WebUIDelegatePrivate.h
@@ -68,6 +68,10 @@ enum {
WebMenuItemPDFSinglePageScrolling,
WebMenuItemPDFFacingPagesScrolling,
WebMenuItemTagInspectElement,
+ WebMenuItemTagTextDirectionMenu,
+ WebMenuItemTagTextDirectionDefault,
+ WebMenuItemTagTextDirectionLeftToRight,
+ WebMenuItemTagTextDirectionRightToLeft,
WebMenuItemTagBaseApplication = 10000
};
@class WebSecurityOrigin;
diff --git a/WebKit/mac/WebView/WebView.h b/WebKit/mac/WebView/WebView.h
index 30aa7bd..17efb5e 100644
--- a/WebKit/mac/WebView/WebView.h
+++ b/WebKit/mac/WebView/WebView.h
@@ -670,6 +670,7 @@ extern NSString *WebViewProgressFinishedNotification;
- (IBAction)takeStringURLFrom:(id)sender;
- (IBAction)stopLoading:(id)sender;
- (IBAction)reload:(id)sender;
+- (IBAction)reloadFromOrigin:(id)sender;
- (BOOL)canGoBack;
- (IBAction)goBack:(id)sender;
- (BOOL)canGoForward;
diff --git a/WebKit/mac/WebView/WebView.mm b/WebKit/mac/WebView/WebView.mm
index a52d3b5..d3bbf4e 100644
--- a/WebKit/mac/WebView/WebView.mm
+++ b/WebKit/mac/WebView/WebView.mm
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2005, 2006, 2007, 2008 Apple Inc. All rights reserved.
+ * Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
* Copyright (C) 2006 David Smith (catfish.man@gmail.com)
*
* Redistribution and use in source and binary forms, with or without
@@ -31,7 +31,7 @@
#import "DOMRangeInternal.h"
#import "WebBackForwardListInternal.h"
-#import "WebBaseNetscapePluginView.h"
+#import "WebCache.h"
#import "WebChromeClient.h"
#import "WebContextMenuClient.h"
#import "WebDOMOperationsPrivate.h"
@@ -107,6 +107,7 @@
#import <WebCore/GCController.h>
#import <WebCore/HTMLNames.h>
#import <WebCore/HistoryItem.h>
+#import <WebCore/IconDatabase.h>
#import <WebCore/Logging.h>
#import <WebCore/MIMETypeRegistry.h>
#import <WebCore/Page.h>
@@ -115,9 +116,11 @@
#import <WebCore/PlatformMouseEvent.h>
#import <WebCore/ProgressTracker.h>
#import <WebCore/ScriptController.h>
+#import <WebCore/ScriptValue.h>
#import <WebCore/SelectionController.h>
#import <WebCore/Settings.h>
#import <WebCore/TextResourceDecoder.h>
+#import <WebCore/ThreadCheck.h>
#import <WebCore/WebCoreObjCExtras.h>
#import <WebCore/WebCoreTextRenderer.h>
#import <WebCore/WebCoreView.h>
@@ -129,13 +132,16 @@
#import <runtime/DateInstance.h>
#import <runtime/InitializeThreading.h>
#import <runtime/JSLock.h>
+#import <runtime/JSValue.h>
#import <mach-o/dyld.h>
#import <objc/objc-auto.h>
#import <objc/objc-runtime.h>
+#import <runtime/InitializeThreading.h>
#import <wtf/Assertions.h>
#import <wtf/HashTraits.h>
#import <wtf/RefCountedLeakCounter.h>
#import <wtf/RefPtr.h>
+#import <wtf/StdLibExtras.h>
#if ENABLE(DASHBOARD_SUPPORT)
#import <WebKit/WebDashboardRegion.h>
@@ -193,6 +199,11 @@ macro(insertParagraphSeparator) \
macro(insertTab) \
macro(insertTabIgnoringFieldEditor) \
macro(lowercaseWord) \
+macro(makeBaseWritingDirectionLeftToRight) \
+macro(makeBaseWritingDirectionRightToLeft) \
+macro(makeTextWritingDirectionLeftToRight) \
+macro(makeTextWritingDirectionNatural) \
+macro(makeTextWritingDirectionRightToLeft) \
macro(moveBackward) \
macro(moveBackwardAndModifySelection) \
macro(moveDown) \
@@ -337,7 +348,6 @@ static const char webViewIsOpen[] = "At least one WebView is still open.";
BOOL allowsUndo;
float zoomMultiplier;
- BOOL zoomMultiplierIsTextOnly;
NSString *applicationNameForUserAgent;
String userAgent;
@@ -375,6 +385,7 @@ static const char webViewIsOpen[] = "At least one WebView is still open.";
NSInteger spellCheckerDocumentTag;
BOOL smartInsertDeleteEnabled;
+ BOOL selectTrailingWhitespaceEnabled;
#if ENABLE(DASHBOARD_SUPPORT)
BOOL dashboardBehaviorAlwaysSendMouseEventsToAllWindows;
@@ -411,6 +422,8 @@ static const char webViewIsOpen[] = "At least one WebView is still open.";
@interface WebView (WebCallDelegateFunctions)
@end
+static void patchMailRemoveAttributesMethod();
+
NSString *WebElementDOMNodeKey = @"WebElementDOMNode";
NSString *WebElementFrameKey = @"WebElementFrame";
NSString *WebElementImageKey = @"WebElementImage";
@@ -470,12 +483,13 @@ static BOOL grammarCheckingEnabled;
@implementation WebViewPrivate
-#ifndef BUILDING_ON_TIGER
+ (void)initialize
{
+ JSC::initializeThreading();
+#ifndef BUILDING_ON_TIGER
WebCoreObjCFinalizeOnMainThread(self);
-}
#endif
+}
- init
{
@@ -485,7 +499,6 @@ static BOOL grammarCheckingEnabled;
JSC::initializeThreading();
allowsUndo = YES;
zoomMultiplier = 1;
- zoomMultiplierIsTextOnly = YES;
#if ENABLE(DASHBOARD_SUPPORT)
dashboardBehaviorAllowWheelScrolling = YES;
#endif
@@ -665,6 +678,8 @@ static void WebKitInitializeApplicationCachePathIfNecessary()
- (void)_commonInitializationWithFrameName:(NSString *)frameName groupName:(NSString *)groupName usesDocumentViews:(BOOL)usesDocumentViews
{
+ WebCoreThreadViolationCheck();
+
#ifndef NDEBUG
WTF::RefCountedLeakCounter::suppressMessages(webViewIsOpen);
#endif
@@ -689,12 +704,17 @@ static void WebKitInitializeApplicationCachePathIfNecessary()
[frameView release];
}
- WebKitInitializeLoggingChannelsIfNecessary();
- WebCore::InitializeLoggingChannelsIfNecessary();
- [WebHistoryItem initWindowWatcherIfNecessary];
- WebKitInitializeDatabasesIfNecessary();
- WebKitInitializeApplicationCachePathIfNecessary();
-
+ static bool didOneTimeInitialization = false;
+ if (!didOneTimeInitialization) {
+ WebKitInitializeLoggingChannelsIfNecessary();
+ WebCore::InitializeLoggingChannelsIfNecessary();
+ [WebHistoryItem initWindowWatcherIfNecessary];
+ WebKitInitializeDatabasesIfNecessary();
+ WebKitInitializeApplicationCachePathIfNecessary();
+ patchMailRemoveAttributesMethod();
+ didOneTimeInitialization = true;
+ }
+
_private->page = new Page(new WebChromeClient(self), new WebContextMenuClient(self), new WebEditorClient(self), new WebDragClient(self), new WebInspectorClient(self));
_private->page->settings()->setLocalStorageDatabasePath([[self preferences] _localStorageDatabasePath]);
@@ -1067,8 +1087,10 @@ static void WebKitInitializeApplicationCachePathIfNecessary()
#ifndef NDEBUG
// Need this to make leak messages accurate.
- if (applicationIsTerminating)
+ if (applicationIsTerminating) {
gcController().garbageCollectNow();
+ [WebCache empty];
+ }
#endif
}
@@ -1285,6 +1307,8 @@ static void WebKitInitializeApplicationCachePathIfNecessary()
settings->setMinimumFontSize([preferences minimumFontSize]);
settings->setMinimumLogicalFontSize([preferences minimumLogicalFontSize]);
settings->setPluginsEnabled([preferences arePlugInsEnabled]);
+ settings->setDatabasesEnabled([preferences databasesEnabled]);
+ settings->setLocalStorageEnabled([preferences localStorageEnabled]);
settings->setPrivateBrowsingEnabled([preferences privateBrowsingEnabled]);
settings->setSansSerifFontFamily([preferences sansSerifFontFamily]);
settings->setSerifFontFamily([preferences serifFontFamily]);
@@ -1294,6 +1318,7 @@ static void WebKitInitializeApplicationCachePathIfNecessary()
settings->setTextAreasAreResizable([preferences textAreasAreResizable]);
settings->setShrinksStandaloneImagesToFit([preferences shrinksStandaloneImagesToFit]);
settings->setEditableLinkBehavior(core([preferences editableLinkBehavior]));
+ settings->setTextDirectionSubmenuInclusionBehavior(core([preferences textDirectionSubmenuInclusionBehavior]));
settings->setDOMPasteAllowed([preferences isDOMPasteAllowed]);
settings->setUsesPageCache([self usesPageCache]);
settings->setShowsURLsInToolTips([preferences showsURLsInToolTips]);
@@ -1313,6 +1338,9 @@ static void WebKitInitializeApplicationCachePathIfNecessary()
settings->setOfflineWebApplicationCacheEnabled([preferences offlineWebApplicationCacheEnabled]);
settings->setZoomsTextOnly([preferences zoomsTextOnly]);
settings->setEnforceCSSMIMETypeInStrictMode(!WKAppVersionCheckLessThan(@"com.apple.iWeb", -1, 2.1));
+#ifdef BUILDING_ON_LEOPARD
+ settings->setNeedsIChatMemoryCacheCallsQuirk([[[NSBundle mainBundle] bundleIdentifier] isEqualToString:@"com.apple.iChat"]);
+#endif
}
static inline IMP getMethod(id o, SEL s)
@@ -1341,6 +1369,7 @@ static inline IMP getMethod(id o, SEL s)
cache->plugInFailedWithErrorFunc = getMethod(delegate, @selector(webView:plugInFailedWithError:dataSource:));
cache->willCacheResponseFunc = getMethod(delegate, @selector(webView:resource:willCacheResponse:fromDataSource:));
cache->willSendRequestFunc = getMethod(delegate, @selector(webView:resource:willSendRequest:redirectResponse:fromDataSource:));
+ cache->shouldUseCredentialStorageFunc = getMethod(delegate, @selector(webView:resource:shouldUseCredentialStorageForDataSource:));
}
WebResourceDelegateImplementationCache* WebViewGetResourceLoadDelegateImplementations(WebView *webView)
@@ -1370,6 +1399,7 @@ WebResourceDelegateImplementationCache* WebViewGetResourceLoadDelegateImplementa
cache->didFinishDocumentLoadForFrameFunc = getMethod(delegate, @selector(webView:didFinishDocumentLoadForFrame:));
cache->didFinishLoadForFrameFunc = getMethod(delegate, @selector(webView:didFinishLoadForFrame:));
cache->didFirstLayoutInFrameFunc = getMethod(delegate, @selector(webView:didFirstLayoutInFrame:));
+ cache->didFirstVisuallyNonEmptyLayoutInFrameFunc = getMethod(delegate, @selector(webView:didFirstVisuallyNonEmptyLayoutInFrame:));
cache->didHandleOnloadEventsForFrameFunc = getMethod(delegate, @selector(webView:didHandleOnloadEventsForFrame:));
cache->didReceiveIconForFrameFunc = getMethod(delegate, @selector(webView:didReceiveIcon:forFrame:));
cache->didReceiveServerRedirectForProvisionalLoadForFrameFunc = getMethod(delegate, @selector(webView:didReceiveServerRedirectForProvisionalLoadForFrame:));
@@ -1948,6 +1978,13 @@ WebFrameLoadDelegateImplementationCache* WebViewGetFrameLoadDelegateImplementati
[[self preferences] _postPreferencesChangesNotification];
}
+- (WebHistoryItem *)_globalHistoryItem
+{
+ if (!_private->page)
+ return nil;
+ return kit(_private->page->globalHistoryItem());
+}
+
- (WebTextIterator *)textIteratorForRect:(NSRect)rect
{
IntPoint rectStart(rect.origin.x, rect.origin.y);
@@ -2012,6 +2049,28 @@ WebFrameLoadDelegateImplementationCache* WebViewGetFrameLoadDelegateImplementati
_private->page->mainFrame()->tree()->clearName();
}
+- (void)setSelectTrailingWhitespaceEnabled:(BOOL)flag
+{
+ _private->selectTrailingWhitespaceEnabled = flag;
+ if (flag)
+ [self setSmartInsertDeleteEnabled:false];
+}
+
+- (BOOL)isSelectTrailingWhitespaceEnabled
+{
+ return _private->selectTrailingWhitespaceEnabled;
+}
+
+- (void)setMemoryCacheDelegateCallsEnabled:(BOOL)enabled
+{
+ _private->page->setMemoryCacheClientCallsEnabled(enabled);
+}
+
+- (BOOL)areMemoryCacheDelegateCallsEnabled
+{
+ return _private->page->areMemoryCacheClientCallsEnabled();
+}
+
@end
@implementation _WebSafeForwarder
@@ -2192,6 +2251,30 @@ WebFrameLoadDelegateImplementationCache* WebViewGetFrameLoadDelegateImplementati
FrameLoader::registerURLSchemeAsLocal(protocol);
}
+- (id)_initWithArguments:(NSDictionary *) arguments
+{
+ NSCoder *decoder = [arguments objectForKey:@"decoder"];
+ if (decoder) {
+ self = [self initWithCoder:decoder];
+ } else {
+ ASSERT([arguments objectForKey:@"frame"]);
+ NSValue *frameValue = [arguments objectForKey:@"frame"];
+ NSRect frame = (frameValue ? [frameValue rectValue] : NSZeroRect);
+ NSString *frameName = [arguments objectForKey:@"frameName"];
+ NSString *groupName = [arguments objectForKey:@"groupName"];
+ self = [self initWithFrame:frame frameName:frameName groupName:groupName];
+ }
+
+ return self;
+}
+
+static bool needsWebViewInitThreadWorkaround()
+{
+ static BOOL isOldInstaller = !WebKitLinkedOnOrAfter(WEBKIT_FIRST_VERSION_WITHOUT_WEBVIEW_INIT_THREAD_WORKAROUND)
+ && [[[NSBundle mainBundle] bundleIdentifier] isEqualToString:@"com.apple.installer"];
+ return isOldInstaller && !pthread_main_np();
+}
+
- (id)initWithFrame:(NSRect)f
{
return [self initWithFrame:f frameName:nil groupName:nil];
@@ -2199,11 +2282,19 @@ WebFrameLoadDelegateImplementationCache* WebViewGetFrameLoadDelegateImplementati
- (id)initWithFrame:(NSRect)f frameName:(NSString *)frameName groupName:(NSString *)groupName
{
+ if (needsWebViewInitThreadWorkaround())
+ return [[self _webkit_invokeOnMainThread] initWithFrame:f frameName:frameName groupName:groupName];
+
+ WebCoreThreadViolationCheck();
return [self _initWithFrame:f frameName:frameName groupName:groupName usesDocumentViews:YES];
}
- (id)initWithCoder:(NSCoder *)decoder
{
+ if (needsWebViewInitThreadWorkaround())
+ return [[self _webkit_invokeOnMainThread] initWithCoder:decoder];
+
+ WebCoreThreadViolationCheck();
WebView *result = nil;
@try {
@@ -2447,7 +2538,10 @@ WebFrameLoadDelegateImplementationCache* WebViewGetFrameLoadDelegateImplementati
BOOL windowIsKey = [window isKeyWindow];
BOOL windowOrSheetIsKey = windowIsKey || [[window attachedSheet] isKeyWindow];
- page->focusController()->setActive(windowIsKey);
+ NSResponder *firstResponder = [window firstResponder];
+ if ([firstResponder isKindOfClass:[NSView class]]
+ && [(NSView*)firstResponder isDescendantOf:[[self mainFrame] frameView]])
+ page->focusController()->setActive(windowIsKey);
Frame* focusedFrame = page->focusController()->focusedOrMainFrame();
frame->selection()->setFocused(frame == focusedFrame && windowOrSheetIsKey);
@@ -2661,14 +2755,19 @@ WebFrameLoadDelegateImplementationCache* WebViewGetFrameLoadDelegateImplementati
- (float)textSizeMultiplier
{
- return _private->zoomMultiplierIsTextOnly ? _private->zoomMultiplier : 1.0f;
+ return [self _realZoomMultiplierIsTextOnly] ? _private->zoomMultiplier : 1.0f;
}
- (void)_setZoomMultiplier:(float)m isTextOnly:(BOOL)isTextOnly
{
// NOTE: This has no visible effect when viewing a PDF (see <rdar://problem/4737380>)
_private->zoomMultiplier = m;
- _private->zoomMultiplierIsTextOnly = isTextOnly;
+ ASSERT(_private->page);
+ if (_private->page)
+ _private->page->settings()->setZoomsTextOnly(isTextOnly);
+
+ // FIXME: it would be nice to rework this code so that _private->zoomMultiplier doesn't exist and callers
+ // all access _private->page->settings().
Frame* coreFrame = core([self mainFrame]);
if (coreFrame)
coreFrame->setZoomFactor(m, isTextOnly);
@@ -2676,7 +2775,7 @@ WebFrameLoadDelegateImplementationCache* WebViewGetFrameLoadDelegateImplementati
- (float)_zoomMultiplier:(BOOL)isTextOnly
{
- if (isTextOnly != _private->zoomMultiplierIsTextOnly)
+ if (isTextOnly != [self _realZoomMultiplierIsTextOnly])
return 1.0f;
return _private->zoomMultiplier;
}
@@ -2688,7 +2787,10 @@ WebFrameLoadDelegateImplementationCache* WebViewGetFrameLoadDelegateImplementati
- (BOOL)_realZoomMultiplierIsTextOnly
{
- return _private->zoomMultiplierIsTextOnly;
+ if (!_private->page)
+ return NO;
+
+ return _private->page->settings()->zoomsTextOnly();
}
#define MinimumZoomMultiplier 0.5f
@@ -2825,7 +2927,7 @@ WebFrameLoadDelegateImplementationCache* WebViewGetFrameLoadDelegateImplementati
if (encoding == oldEncoding || [encoding isEqualToString:oldEncoding])
return;
if (Frame* mainFrame = core([self mainFrame]))
- mainFrame->loader()->reloadAllowingStaleData(encoding);
+ mainFrame->loader()->reloadWithOverrideEncoding(encoding);
}
- (NSString *)_mainFrameOverrideEncoding
@@ -3223,7 +3325,9 @@ static WebFrame *incrementFrame(WebFrame *curr, BOOL forward, BOOL wrapFlag)
- (BOOL)drawsBackground
{
- return _private->drawsBackground;
+ // This method can be called beneath -[NSView dealloc] after we have cleared _private,
+ // indirectly via -[WebFrameView viewDidMoveToWindow].
+ return !_private || _private->drawsBackground;
}
- (void)setShouldUpdateWhileOffscreen:(BOOL)updateWhileOffscreen
@@ -3298,6 +3402,11 @@ static WebFrame *incrementFrame(WebFrame *curr, BOOL forward, BOOL wrapFlag)
[[self mainFrame] reload];
}
+- (IBAction)reloadFromOrigin:(id)sender
+{
+ [[self mainFrame] reloadFromOrigin];
+}
+
// FIXME: This code should move into WebCore so that it is not duplicated in each WebKit.
// (This includes canMakeTextSmaller/Larger, makeTextSmaller/Larger, and canMakeTextStandardSize/makeTextStandardSize)
- (BOOL)canMakeTextSmaller
@@ -3572,22 +3681,22 @@ static WebFrame *incrementFrame(WebFrame *curr, BOOL forward, BOOL wrapFlag)
return coreFrame->shouldClose();
}
-static NSAppleEventDescriptor* aeDescFromJSValue(ExecState* exec, JSValue* jsValue)
+static NSAppleEventDescriptor* aeDescFromJSValue(ExecState* exec, JSValuePtr jsValue)
{
NSAppleEventDescriptor* aeDesc = 0;
- if (jsValue->isBoolean())
- return [NSAppleEventDescriptor descriptorWithBoolean:jsValue->getBoolean()];
- if (jsValue->isString())
- return [NSAppleEventDescriptor descriptorWithString:String(jsValue->getString())];
- if (jsValue->isNumber()) {
- double value = jsValue->getNumber();
+ if (jsValue.isBoolean())
+ return [NSAppleEventDescriptor descriptorWithBoolean:jsValue.getBoolean()];
+ if (jsValue.isString())
+ return [NSAppleEventDescriptor descriptorWithString:String(jsValue.getString())];
+ if (jsValue.isNumber()) {
+ double value = jsValue.uncheckedGetNumber();
int intValue = value;
if (value == intValue)
return [NSAppleEventDescriptor descriptorWithDescriptorType:typeSInt32 bytes:&intValue length:sizeof(intValue)];
return [NSAppleEventDescriptor descriptorWithDescriptorType:typeIEEE64BitFloatingPoint bytes:&value length:sizeof(value)];
}
- if (jsValue->isObject()) {
- JSObject* object = jsValue->getObject();
+ if (jsValue.isObject()) {
+ JSObject* object = jsValue.getObject();
if (object->inherits(&DateInstance::info)) {
DateInstance* date = static_cast<DateInstance*>(object);
double ms = 0;
@@ -3600,7 +3709,7 @@ static NSAppleEventDescriptor* aeDescFromJSValue(ExecState* exec, JSValue* jsVal
}
}
else if (object->inherits(&JSArray::info)) {
- static HashSet<JSObject*> visitedElems;
+ DEFINE_STATIC_LOCAL(HashSet<JSObject*>, visitedElems, ());
if (!visitedElems.contains(object)) {
visitedElems.add(object);
@@ -3614,16 +3723,16 @@ static NSAppleEventDescriptor* aeDescFromJSValue(ExecState* exec, JSValue* jsVal
return aeDesc;
}
}
- JSValue* primitive = object->toPrimitive(exec);
+ JSValuePtr primitive = object->toPrimitive(exec);
if (exec->hadException()) {
exec->clearException();
return [NSAppleEventDescriptor nullDescriptor];
}
return aeDescFromJSValue(exec, primitive);
}
- if (jsValue->isUndefined())
+ if (jsValue.isUndefined())
return [NSAppleEventDescriptor descriptorWithTypeCode:cMissingValue];
- ASSERT(jsValue->isNull());
+ ASSERT(jsValue.isNull());
return [NSAppleEventDescriptor nullDescriptor];
}
@@ -3634,7 +3743,7 @@ static NSAppleEventDescriptor* aeDescFromJSValue(ExecState* exec, JSValue* jsVal
return nil;
if (!coreFrame->document())
return nil;
- JSValue* result = coreFrame->loader()->executeScript(script, true);
+ JSValuePtr result = coreFrame->loader()->executeScript(script, true).jsValue();
if (!result) // FIXME: pass errors
return 0;
JSLock lock(false);
@@ -3749,7 +3858,7 @@ static NSAppleEventDescriptor* aeDescFromJSValue(ExecState* exec, JSValue* jsVal
- (float)pageSizeMultiplier
{
- return !_private->zoomMultiplierIsTextOnly ? _private->zoomMultiplier : 1.0f;
+ return ![self _realZoomMultiplierIsTextOnly] ? _private->zoomMultiplier : 1.0f;
}
- (BOOL)canZoomPageIn
@@ -3782,6 +3891,20 @@ static NSAppleEventDescriptor* aeDescFromJSValue(ExecState* exec, JSValue* jsVal
return [self _resetZoom:sender isTextOnly:NO];
}
+- (void)setMediaVolume:(float)volume
+{
+ if (_private->page)
+ _private->page->setMediaVolume(volume);
+}
+
+- (float)mediaVolume
+{
+ if (!_private->page)
+ return 0;
+
+ return _private->page->mediaVolume();
+}
+
@end
@implementation WebView (WebViewPrintingPrivate)
@@ -4023,6 +4146,8 @@ static NSAppleEventDescriptor* aeDescFromJSValue(ExecState* exec, JSValue* jsVal
- (void)setSmartInsertDeleteEnabled:(BOOL)flag
{
_private->smartInsertDeleteEnabled = flag;
+ if (flag)
+ [self setSelectTrailingWhitespaceEnabled:false];
}
- (BOOL)smartInsertDeleteEnabled
@@ -4298,15 +4423,13 @@ static WebFrameView *containingFrameView(NSView *view)
// Object cache capacities (in bytes)
if (memSize >= 2048)
- cacheTotalCapacity = 128 * 1024 * 1024;
+ cacheTotalCapacity = 96 * 1024 * 1024;
else if (memSize >= 1536)
- cacheTotalCapacity = 86 * 1024 * 1024;
- else if (memSize >= 1024)
cacheTotalCapacity = 64 * 1024 * 1024;
- else if (memSize >= 512)
+ else if (memSize >= 1024)
cacheTotalCapacity = 32 * 1024 * 1024;
- else if (memSize >= 256)
- cacheTotalCapacity = 16 * 1024 * 1024;
+ else if (memSize >= 512)
+ cacheTotalCapacity = 16 * 1024 * 1024;
cacheMinDeadCapacity = 0;
cacheMaxDeadCapacity = 0;
@@ -4332,15 +4455,13 @@ static WebFrameView *containingFrameView(NSView *view)
// Object cache capacities (in bytes)
if (memSize >= 2048)
- cacheTotalCapacity = 128 * 1024 * 1024;
+ cacheTotalCapacity = 96 * 1024 * 1024;
else if (memSize >= 1536)
- cacheTotalCapacity = 86 * 1024 * 1024;
- else if (memSize >= 1024)
cacheTotalCapacity = 64 * 1024 * 1024;
- else if (memSize >= 512)
+ else if (memSize >= 1024)
cacheTotalCapacity = 32 * 1024 * 1024;
- else if (memSize >= 256)
- cacheTotalCapacity = 16 * 1024 * 1024;
+ else if (memSize >= 512)
+ cacheTotalCapacity = 16 * 1024 * 1024;
cacheMinDeadCapacity = cacheTotalCapacity / 8;
cacheMaxDeadCapacity = cacheTotalCapacity / 4;
@@ -4386,15 +4507,13 @@ static WebFrameView *containingFrameView(NSView *view)
// browsing pattern. Even growth above 128MB can have substantial
// value / MB for some content / browsing patterns.)
if (memSize >= 2048)
- cacheTotalCapacity = 256 * 1024 * 1024;
+ cacheTotalCapacity = 128 * 1024 * 1024;
else if (memSize >= 1536)
- cacheTotalCapacity = 172 * 1024 * 1024;
+ cacheTotalCapacity = 96 * 1024 * 1024;
else if (memSize >= 1024)
- cacheTotalCapacity = 128 * 1024 * 1024;
- else if (memSize >= 512)
cacheTotalCapacity = 64 * 1024 * 1024;
- else if (memSize >= 256)
- cacheTotalCapacity = 32 * 1024 * 1024;
+ else if (memSize >= 512)
+ cacheTotalCapacity = 32 * 1024 * 1024;
cacheMinDeadCapacity = cacheTotalCapacity / 4;
cacheMaxDeadCapacity = cacheTotalCapacity / 2;
@@ -5172,6 +5291,18 @@ id CallResourceLoadDelegate(IMP implementation, WebView *self, SEL selector, id
return CallDelegate(implementation, self, self->_private->resourceProgressDelegate, selector, object1, object2, integer, object3);
}
+BOOL CallResourceLoadDelegateReturningBoolean(BOOL result, IMP implementation, WebView *self, SEL selector, id object1, id object2)
+{
+ if (!self->_private->catchesDelegateExceptions)
+ return reinterpret_cast<BOOL (*)(id, SEL, WebView *, id, id)>(objc_msgSend)(self->_private->resourceProgressDelegate, selector, self, object1, object2);
+ @try {
+ return reinterpret_cast<BOOL (*)(id, SEL, WebView *, id, id)>(objc_msgSend)(self->_private->resourceProgressDelegate, selector, self, object1, object2);
+ } @catch(id exception) {
+ ReportDiscardedDelegateException(selector, exception);
+ }
+ return result;
+}
+
// The form delegate needs to have it's own implementation, because the first argument is never the WebView
id CallFormDelegate(WebView *self, SEL selector, id object1, id object2)
@@ -5220,3 +5351,39 @@ BOOL CallFormDelegateReturningBoolean(BOOL result, WebView *self, SEL selector,
}
@end
+
+#ifdef BUILDING_ON_LEOPARD
+
+static IMP originalRecursivelyRemoveMailAttributesImp;
+
+static id objectElementDataAttribute(DOMHTMLObjectElement *self, SEL)
+{
+ return [self getAttribute:@"data"];
+}
+
+static void recursivelyRemoveMailAttributes(DOMNode *self, SEL selector, BOOL a, BOOL b, BOOL c)
+{
+ // While inside this Mail function, change the behavior of -[DOMHTMLObjectElement data] back to what it used to be
+ // before we fixed a bug in it (see http://trac.webkit.org/changeset/30044 for that change).
+
+ // It's a little bit strange to patch a method defined by WebKit, but it helps keep this workaround self-contained.
+
+ Method methodToPatch = class_getInstanceMethod(objc_getRequiredClass("DOMHTMLObjectElement"), @selector(data));
+ IMP originalDataImp = method_setImplementation(methodToPatch, reinterpret_cast<IMP>(objectElementDataAttribute));
+ originalRecursivelyRemoveMailAttributesImp(self, selector, a, b, c);
+ method_setImplementation(methodToPatch, originalDataImp);
+}
+
+#endif
+
+static void patchMailRemoveAttributesMethod()
+{
+#ifdef BUILDING_ON_LEOPARD
+ if (!WKAppVersionCheckLessThan(@"com.apple.mail", -1, 4.0))
+ return;
+ Method methodToPatch = class_getInstanceMethod(objc_getRequiredClass("DOMNode"), @selector(recursivelyRemoveMailAttributes:convertObjectsToImages:convertEditableElements:));
+ if (!methodToPatch)
+ return;
+ originalRecursivelyRemoveMailAttributesImp = method_setImplementation(methodToPatch, reinterpret_cast<IMP>(recursivelyRemoveMailAttributes));
+#endif
+}
diff --git a/WebKit/mac/WebView/WebViewInternal.h b/WebKit/mac/WebView/WebViewInternal.h
index 39b3ef5..25afb64 100644
--- a/WebKit/mac/WebView/WebViewInternal.h
+++ b/WebKit/mac/WebView/WebViewInternal.h
@@ -159,6 +159,7 @@ typedef struct _WebResourceDelegateImplementationCache {
IMP didLoadResourceFromMemoryCacheFunc;
IMP willCacheResponseFunc;
IMP plugInFailedWithErrorFunc;
+ IMP shouldUseCredentialStorageFunc;
} WebResourceDelegateImplementationCache;
typedef struct _WebFrameLoadDelegateImplementationCache {
@@ -177,6 +178,7 @@ typedef struct _WebFrameLoadDelegateImplementationCache {
IMP didFailLoadWithErrorForFrameFunc;
IMP didFinishLoadForFrameFunc;
IMP didFirstLayoutInFrameFunc;
+ IMP didFirstVisuallyNonEmptyLayoutInFrameFunc;
IMP didReceiveIconForFrameFunc;
IMP didFinishDocumentLoadForFrameFunc;
} WebFrameLoadDelegateImplementationCache;
@@ -216,4 +218,6 @@ id CallResourceLoadDelegate(IMP, WebView *, SEL, id, id, id, id);
id CallResourceLoadDelegate(IMP, WebView *, SEL, id, NSInteger, id);
id CallResourceLoadDelegate(IMP, WebView *, SEL, id, id, NSInteger, id);
+BOOL CallResourceLoadDelegateReturningBoolean(BOOL, IMP, WebView *, SEL, id, id);
+
#endif
diff --git a/WebKit/mac/WebView/WebViewPrivate.h b/WebKit/mac/WebView/WebViewPrivate.h
index 3a33bf9..95e1249 100644
--- a/WebKit/mac/WebView/WebViewPrivate.h
+++ b/WebKit/mac/WebView/WebViewPrivate.h
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2005 Apple Computer, Inc. All rights reserved.
+ * Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
@@ -177,6 +177,10 @@ typedef enum {
- (BOOL)canResetPageZoom;
- (IBAction)resetPageZoom:(id)sender;
+// Sets a master volume control for all media elements in the WebView. Valid values are 0..1.
+- (void)setMediaVolume:(float)volume;
+- (float)mediaVolume;
+
@end
@interface WebView (WebPrivate)
@@ -362,6 +366,8 @@ Could be worth adding to the API.
- (BOOL)usesPageCache;
- (void)setUsesPageCache:(BOOL)usesPageCache;
+- (WebHistoryItem *)_globalHistoryItem;
+
/*!
@method textIteratorForRect:
@param rectangle from which we want the WebTextIterator to load text from
@@ -394,6 +400,12 @@ Could be worth adding to the API.
- (id)_initWithFrame:(NSRect)f frameName:(NSString *)frameName groupName:(NSString *)groupName usesDocumentViews:(BOOL)usesDocumentViews;
- (BOOL)_usesDocumentViews;
+- (void)setSelectTrailingWhitespaceEnabled:(BOOL)flag;
+- (BOOL)isSelectTrailingWhitespaceEnabled;
+
+- (void)setMemoryCacheDelegateCallsEnabled:(BOOL)suspend;
+- (BOOL)areMemoryCacheDelegateCallsEnabled;
+
@end
@interface WebView (WebViewPrintingPrivate)
@@ -446,6 +458,8 @@ Could be worth adding to the API.
// Addresses 4192534. SPI for now.
- (void)webView:(WebView *)sender didHandleOnloadEventsForFrame:(WebFrame *)frame;
+- (void)webView:(WebView *)sender didFirstVisuallyNonEmptyLayoutInFrame:(WebFrame *)frame;
+
@end
@interface NSObject (WebResourceLoadDelegatePrivate)
diff --git a/WebKit/qt/Api/headers.pri b/WebKit/qt/Api/headers.pri
index 1e70072..2b3c940 100644
--- a/WebKit/qt/Api/headers.pri
+++ b/WebKit/qt/Api/headers.pri
@@ -1,11 +1,8 @@
-WEBKIT_API_HEADERS = $$PWD/qcookiejar.h \
- $$PWD/qwebframe.h \
+WEBKIT_API_HEADERS = $$PWD/qwebframe.h \
$$PWD/qwebkitglobal.h \
- $$PWD/qwebnetworkinterface.h \
- $$PWD/qwebobjectplugin.h \
- $$PWD/qwebobjectpluginconnector.h \
$$PWD/qwebpage.h \
$$PWD/qwebview.h \
- $$PWD/qwebpagehistory.h \
$$PWD/qwebsettings.h \
- $$PWD/qwebhistoryinterface.h
+ $$PWD/qwebhistoryinterface.h \
+ $$PWD/qwebdatabase.h \
+ $$PWD/qwebsecurityorigin.h
diff --git a/WebKit/qt/Api/qtwebkit.prf b/WebKit/qt/Api/qtwebkit.prf
deleted file mode 100644
index 37417c6..0000000
--- a/WebKit/qt/Api/qtwebkit.prf
+++ /dev/null
@@ -1,4 +0,0 @@
-
-qtAddLibrary(QtWebKit)
-
-QT += network
diff --git a/WebKit/qt/Api/qwebdatabase.cpp b/WebKit/qt/Api/qwebdatabase.cpp
new file mode 100644
index 0000000..489ab17
--- /dev/null
+++ b/WebKit/qt/Api/qwebdatabase.cpp
@@ -0,0 +1,148 @@
+/*
+ Copyright (C) 2008 Nokia Corporation and/or its subsidiary(-ies)
+
+ This library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Library General Public
+ License as published by the Free Software Foundation; either
+ version 2 of the License, or (at your option) any later version.
+
+ This library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Library General Public License for more details.
+
+ You should have received a copy of the GNU Library General Public License
+ along with this library; see the file COPYING.LIB. If not, write to
+ the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+ Boston, MA 02110-1301, USA.
+*/
+
+#include "config.h"
+#include "qwebdatabase.h"
+#include "qwebdatabase_p.h"
+#include "qwebsecurityorigin.h"
+#include "qwebsecurityorigin_p.h"
+#include "DatabaseDetails.h"
+#include "DatabaseTracker.h"
+
+using namespace WebCore;
+
+/*!
+ \class QWebDatabase
+ \since 4.5
+ \brief The QWebDatabase class provides access to HTML 5 databases created with JavaScript.
+
+ The upcoming HTML 5 standard includes support for SQL databases that web sites can create and
+ access on a local computer through JavaScript. QWebDatabase is the C++ interface to these databases.
+
+ For more information refer to the \l{http://www.w3.org/html/wg/html5/#sql}{HTML 5 Draft Standard}.
+
+ \sa QWebSecurityOrigin
+*/
+
+/*!
+ Constructs a web database from \a other.
+*/
+QWebDatabase::QWebDatabase(const QWebDatabase& other) : d(other.d)
+{
+}
+
+/*!
+ Assigns the \a other web database to this.
+*/
+QWebDatabase& QWebDatabase::operator=(const QWebDatabase& other)
+{
+ d = other.d;
+ return *this;
+}
+
+/*!
+ Returns the name of the database.
+*/
+QString QWebDatabase::name() const
+{
+ return d->name;
+}
+
+/*!
+ Returns the name of the database as seen by the user.
+*/
+QString QWebDatabase::displayName() const
+{
+ DatabaseDetails details = DatabaseTracker::tracker().detailsForNameAndOrigin(d->name, d->origin.get());
+ return details.displayName();
+}
+
+/*!
+ Returns the expected size of the database in bytes as defined by the web author.
+*/
+qint64 QWebDatabase::expectedSize() const
+{
+ DatabaseDetails details = DatabaseTracker::tracker().detailsForNameAndOrigin(d->name, d->origin.get());
+ return details.expectedUsage();
+}
+
+/*!
+ Returns the current size of the database in bytes.
+*/
+qint64 QWebDatabase::size() const
+{
+ DatabaseDetails details = DatabaseTracker::tracker().detailsForNameAndOrigin(d->name, d->origin.get());
+ return details.currentUsage();
+}
+
+/*!
+ \internal
+*/
+QWebDatabase::QWebDatabase(QWebDatabasePrivate* priv)
+{
+ d = priv;
+}
+
+/*!
+ Returns the file name of the web database.
+
+ The name can be used to access the database through the QtSql database module, for example:
+ \code
+ QWebDatabase webdb = ...
+ QSqlDatabase sqldb = QSqlDatabase::addDatabase("QSQLITE", "myconnection");
+ sqldb.setDatabaseName(webdb.fileName());
+ if (sqldb.open()) {
+ QStringList tables = sqldb.tables();
+ ...
+ }
+ \endcode
+
+ \note Concurrent access to a database from multiple threads or processes
+ is not very efficient because Sqlite is used as WebKit's database backend.
+*/
+QString QWebDatabase::fileName() const
+{
+ return DatabaseTracker::tracker().fullPathForDatabase(d->origin.get(), d->name, false);
+}
+
+/*!
+ Returns the databases's security origin.
+*/
+QWebSecurityOrigin QWebDatabase::origin() const
+{
+ QWebSecurityOriginPrivate* priv = new QWebSecurityOriginPrivate(d->origin.get());
+ QWebSecurityOrigin origin(priv);
+ return origin;
+}
+
+/*!
+ Removes the database, \a db, from its security origin. All data stored in this database
+ will be destroyed.
+*/
+void QWebDatabase::removeDatabase(const QWebDatabase &db)
+{
+ DatabaseTracker::tracker().deleteDatabase(db.d->origin.get(), db.d->name);
+}
+
+/*!
+ Destroys the web database object. The data within this database is \b not destroyed.
+*/
+QWebDatabase::~QWebDatabase()
+{
+}
diff --git a/WebKit/qt/Api/qwebdatabase.h b/WebKit/qt/Api/qwebdatabase.h
new file mode 100644
index 0000000..f4c368a
--- /dev/null
+++ b/WebKit/qt/Api/qwebdatabase.h
@@ -0,0 +1,59 @@
+/*
+ Copyright (C) 2008 Nokia Corporation and/or its subsidiary(-ies)
+
+ This library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Library General Public
+ License as published by the Free Software Foundation; either
+ version 2 of the License, or (at your option) any later version.
+
+ This library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Library General Public License for more details.
+
+ You should have received a copy of the GNU Library General Public License
+ along with this library; see the file COPYING.LIB. If not, write to
+ the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+ Boston, MA 02110-1301, USA.
+*/
+#ifndef _WEBDATABASE_H_
+#define _WEBDATABASE_H_
+
+#include <QtCore/qstring.h>
+#include <QtCore/qshareddata.h>
+
+#include "qwebkitglobal.h"
+
+namespace WebCore {
+ class DatabaseDetails;
+};
+
+class QWebDatabasePrivate;
+class QWebSecurityOrigin;
+
+class QWEBKIT_EXPORT QWebDatabase
+{
+public:
+ QWebDatabase(const QWebDatabase& other);
+ QWebDatabase &operator=(const QWebDatabase& other);
+ ~QWebDatabase();
+
+ QString name() const;
+ QString displayName() const;
+ qint64 expectedSize() const;
+ qint64 size() const;
+ QString fileName() const;
+ QWebSecurityOrigin origin() const;
+
+ static void removeDatabase(const QWebDatabase &db);
+
+private:
+ QWebDatabase(QWebDatabasePrivate* priv);
+ friend class QWebSecurityOrigin;
+
+private:
+ QExplicitlySharedDataPointer<QWebDatabasePrivate> d;
+};
+
+#endif
+
diff --git a/WebKit/qt/Api/qwebdatabase_p.h b/WebKit/qt/Api/qwebdatabase_p.h
new file mode 100644
index 0000000..988fb16
--- /dev/null
+++ b/WebKit/qt/Api/qwebdatabase_p.h
@@ -0,0 +1,38 @@
+/*
+ Copyright (C) 2008 Nokia Corporation and/or its subsidiary(-ies)
+
+ This library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Library General Public
+ License as published by the Free Software Foundation; either
+ version 2 of the License, or (at your option) any later version.
+
+ This library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Library General Public License for more details.
+
+ You should have received a copy of the GNU Library General Public License
+ along with this library; see the file COPYING.LIB. If not, write to
+ the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+ Boston, MA 02110-1301, USA.
+*/
+#ifndef _WEBDATABASE_P_H_
+#define _WEBDATABASE_P_H_
+
+#include <QString>
+#include <QtCore/qshareddata.h>
+
+#include "PlatformString.h"
+#include "SecurityOrigin.h"
+#include "RefPtr.h"
+
+
+class QWebDatabasePrivate : public QSharedData
+{
+public:
+ WebCore::String name;
+ WTF::RefPtr<WebCore::SecurityOrigin> origin;
+};
+
+#endif
+
diff --git a/WebKit/qt/Api/qwebframe.cpp b/WebKit/qt/Api/qwebframe.cpp
index 892949d..4e82d54 100644
--- a/WebKit/qt/Api/qwebframe.cpp
+++ b/WebKit/qt/Api/qwebframe.cpp
@@ -23,6 +23,8 @@
#include "qwebpage.h"
#include "qwebpage_p.h"
#include "qwebframe_p.h"
+#include "qwebsecurityorigin.h"
+#include "qwebsecurityorigin_p.h"
#include "DocumentLoader.h"
#include "FocusController.h"
@@ -31,6 +33,7 @@
#include "FrameTree.h"
#include "FrameView.h"
#include "IconDatabase.h"
+#include "InspectorController.h"
#include "Page.h"
#include "PutPropertySlot.h"
#include "ResourceRequest.h"
@@ -41,6 +44,7 @@
#include "SubstituteData.h"
#include "markup.h"
+#include "htmlediting.h"
#include "RenderTreeAsText.h"
#include "Element.h"
#include "Document.h"
@@ -52,17 +56,19 @@
#include "GraphicsContext.h"
#include "HitTestResult.h"
-#include "runtime.h"
-#include "runtime_object.h"
-#include "runtime_root.h"
-#include "JSDOMWindow.h"
-#include "qt_instance.h"
-#include "ScriptController.h"
+#include "CallFrame.h"
#include "JSDOMBinding.h"
-#include "ExecState.h"
+#include "JSDOMWindow.h"
#include "JSLock.h"
#include "JSObject.h"
+#include "qt_instance.h"
#include "qt_runtime.h"
+#include "runtime.h"
+#include "runtime_object.h"
+#include "runtime_root.h"
+#include "ScriptController.h"
+#include "ScriptSourceCode.h"
+#include "ScriptValue.h"
#include "wtf/HashMap.h"
@@ -70,6 +76,7 @@
#include <qevent.h>
#include <qfileinfo.h>
#include <qpainter.h>
+#include <QMultiMap>
#if QT_VERSION >= 0x040400
#include <qnetworkrequest.h>
#else
@@ -77,6 +84,8 @@
#endif
#include <qregion.h>
#include <qprinter.h>
+#include "HTMLMetaElement.h"
+#include "NodeList.h"
using namespace WebCore;
@@ -85,6 +94,18 @@ QT_BEGIN_NAMESPACE
extern Q_GUI_EXPORT int qt_defaultDpi();
QT_END_NAMESPACE
+void QWEBKIT_EXPORT qt_drt_setJavaScriptProfilingEnabled(QWebFrame* qframe, bool enabled)
+{
+ Frame* frame = QWebFramePrivate::core(qframe);
+ InspectorController* controller = frame->page()->inspectorController();
+ if (!controller)
+ return;
+ if (enabled)
+ controller->enableProfiler();
+ else
+ controller->disableProfiler();
+}
+
void QWebFramePrivate::init(QWebFrame *qframe, WebCore::Page *webcorePage, QWebFrameData *frameData)
{
q = qframe;
@@ -96,9 +117,17 @@ void QWebFramePrivate::init(QWebFrame *qframe, WebCore::Page *webcorePage, QWebF
frameLoaderClient = new FrameLoaderClientQt();
RefPtr<Frame> newFrame = Frame::create(webcorePage, frameData->ownerElement, frameLoaderClient);
frame = newFrame.get();
- if (frameData->ownerElement)
- frame->ref(); // balanced by adoptRef in FrameLoaderClientQt::createFrame
frameLoaderClient->setFrame(qframe, frame);
+
+ // FIXME: All of the below should probably be moved over into WebCore
+ frame->tree()->setName(frameData->name);
+ if (QWebFrame* _parentFrame = parentFrame())
+ QWebFramePrivate::core(_parentFrame)->tree()->appendChild(frame);
+
+ // balanced by adoptRef in FrameLoaderClientQt::createFrame
+ if (frameData->ownerElement)
+ frame->ref();
+
frame->init();
}
@@ -116,16 +145,34 @@ WebCore::Scrollbar* QWebFramePrivate::verticalScrollBar() const
return frame->view()->verticalScrollbar();
}
-void QWebFramePrivate::updateBackground()
+void QWebFramePrivate::renderPrivate(QPainter *painter, const QRegion &clip, bool contents)
{
- WebCore::FrameView *view = frame->view();
- if (!view)
+ if (!frame->view() || !frame->contentRenderer())
return;
- QBrush brush = page->palette().brush(QPalette::Background);
- if (brush.style() == Qt::SolidPattern) {
- view->setBaseBackgroundColor(brush.color());
- if (!brush.color().alpha())
- view->setTransparent(true);
+
+ QVector<QRect> vector = clip.rects();
+ if (vector.isEmpty())
+ return;
+
+ WebCore::FrameView* view = frame->view();
+ view->layoutIfNeededRecursive();
+
+ GraphicsContext context(painter);
+
+ if (!contents)
+ view->paint(&context, vector.first());
+ else
+ view->paintContents(&context, vector.first());
+
+ for (int i = 1; i < vector.size(); ++i) {
+ const QRect& clipRect = vector.at(i);
+ painter->save();
+ painter->setClipRect(clipRect, Qt::IntersectClip);
+ if (!contents)
+ view->paint(&context, clipRect);
+ else
+ view->paintContents(&context, clipRect);
+ painter->restore();
}
}
@@ -222,7 +269,7 @@ void QWebFrame::addToJavaScriptWindowObject(const QString &name, QObject *object
JSC::ExecState* exec = window->globalExec();
JSC::JSObject *runtimeObject =
- JSC::Bindings::Instance::createRuntimeObject(exec, JSC::Bindings::QtInstance::getQtInstance(object, root));
+ JSC::Bindings::QtInstance::getQtInstance(object, root)->createRuntimeObject(exec);
JSC::PutPropertySlot slot;
window->put(exec, JSC::Identifier(exec, (const UChar *) name.constData(), name.length()), runtimeObject, slot);
@@ -280,6 +327,53 @@ QString QWebFrame::title() const
else return QString();
}
+/*!
+ \since 4.5
+ \brief Returns the meta data in this frame as a QMultiMap
+
+ The meta data consists of the name and content attributes of the
+ of the \c{<meta>} tags in the HTML document.
+
+ For example:
+
+ \code
+ <html>
+ <head>
+ <meta name="description" content="This document is a tutorial about Qt development">
+ <meta name="keywords" content="Qt, WebKit, Programming">
+ </head>
+ ...
+ </html>
+ \endcode
+
+ Given the above HTML code the metaData() function will return a map with two entries:
+ \table
+ \header \o Key
+ \o Value
+ \row \o "description"
+ \o "This document is a tutorial about Qt development"
+ \row \o "keywords"
+ \o "Qt, WebKit, Programming"
+ \endtable
+
+ This function returns a multi map to support multiple meta tags with the same attribute name.
+*/
+QMultiMap<QString, QString> QWebFrame::metaData() const
+{
+ if(!d->frame->document())
+ return QMap<QString,QString>();
+
+ QMultiMap<QString,QString> map;
+ Document* doc = d->frame->document();
+ RefPtr<NodeList> list = doc->getElementsByTagName("meta");
+ unsigned len = list->length();
+ for (unsigned i = 0; i < len; i++) {
+ HTMLMetaElement* meta = static_cast<HTMLMetaElement*>(list->item(i));
+ map.insert(meta->name(), meta->content());
+ }
+ return map;
+}
+
static inline QUrl ensureAbsoluteUrl(const QUrl &url)
{
if (!url.isRelative())
@@ -446,7 +540,7 @@ void QWebFrame::load(const QNetworkRequest &req,
/*!
Sets the content of this frame to \a html. \a baseUrl is optional and used to resolve relative
- URLs in the document.
+ URLs in the document, such as referenced images or stylesheets.
When using this method WebKit assumes that external resources such as JavaScript programs or style
sheets are encoded in UTF-8 unless otherwise specified. For example, the encoding of an external
@@ -542,12 +636,16 @@ void QWebFrame::setScrollBarPolicy(Qt::Orientation orientation, Qt::ScrollBarPol
if (orientation == Qt::Horizontal) {
d->horizontalScrollBarPolicy = policy;
- if (d->frame->view())
+ if (d->frame->view()) {
d->frame->view()->setHorizontalScrollbarMode((ScrollbarMode)policy);
+ d->frame->view()->updateDefaultScrollbarState();
+ }
} else {
d->verticalScrollBarPolicy = policy;
- if (d->frame->view())
+ if (d->frame->view()) {
d->frame->view()->setVerticalScrollbarMode((ScrollbarMode)policy);
+ d->frame->view()->updateDefaultScrollbarState();
+ }
}
}
@@ -617,14 +715,29 @@ int QWebFrame::scrollBarMinimum(Qt::Orientation orientation) const
}
/*!
+ \since 4.6
+ Returns the geometry for the scrollbar with orientation \a orientation.
+
+ If the scrollbar does not exist an empty rect is returned.
+*/
+QRect QWebFrame::scrollBarGeometry(Qt::Orientation orientation) const
+{
+ Scrollbar *sb;
+ sb = (orientation == Qt::Horizontal) ? d->horizontalScrollBar() : d->verticalScrollBar();
+ if (sb)
+ return sb->frameRect();
+ return QRect();
+}
+
+/*!
\since 4.5
Scrolls the frame \a dx pixels to the right and \a dy pixels downward. Both
\a dx and \a dy may be negative.
- \sa QWebFrame::scrollOffset
+ \sa QWebFrame::scrollPosition
*/
-void QWebFrame::scroll(int dx, int dy) const
+void QWebFrame::scroll(int dx, int dy)
{
if (!d->frame->view())
return;
@@ -633,23 +746,25 @@ void QWebFrame::scroll(int dx, int dy) const
}
/*!
- \property QWebFrame::scrollOffset
- \brief The offset from the start this frame is currently scrolled to.
+ \property QWebFrame::scrollPosition
+ \since 4.5
+ \brief the position the frame is currently scrolled to.
*/
-QSize QWebFrame::scrollOffset() const
+QPoint QWebFrame::scrollPosition() const
{
if (!d->frame->view())
- return QSize(0,0);
+ return QPoint(0,0);
- return d->frame->view()->scrollOffset();
+ IntSize ofs = d->frame->view()->scrollOffset();
+ return QPoint(ofs.width(), ofs.height());
}
-void QWebFrame::setScrollOffset(const QSize &offset) const
+void QWebFrame::setScrollPosition(const QPoint &pos)
{
- QSize current = scrollOffset();
- int dx = offset.width() - current.width();
- int dy = offset.height() - current.height();
+ QPoint current = scrollPosition();
+ int dx = pos.x() - current.x();
+ int dy = pos.y() - current.y();
scroll(dx, dy);
}
@@ -660,25 +775,7 @@ void QWebFrame::setScrollOffset(const QSize &offset) const
*/
void QWebFrame::render(QPainter *painter, const QRegion &clip)
{
- if (!d->frame->view() || !d->frame->contentRenderer())
- return;
-
- d->frame->view()->layoutIfNeededRecursive();
-
- GraphicsContext ctx(painter);
- QVector<QRect> vector = clip.rects();
- WebCore::FrameView* view = d->frame->view();
- for (int i = 0; i < vector.size(); ++i) {
- if (i > 0) {
- painter->save();
- painter->setClipRect(vector.at(i), Qt::IntersectClip);
- }
-
- view->paint(&ctx, vector.at(i));
-
- if (i > 0)
- painter->restore();
- }
+ d->renderPrivate(painter, clip);
}
/*!
@@ -686,14 +783,19 @@ void QWebFrame::render(QPainter *painter, const QRegion &clip)
*/
void QWebFrame::render(QPainter *painter)
{
- if (!d->frame->view() || !d->frame->contentRenderer())
+ if (!d->frame->view())
return;
- d->frame->view()->layoutIfNeededRecursive();
+ d->renderPrivate(painter, QRegion(d->frame->view()->frameRect()));
+}
- GraphicsContext ctx(painter);
- WebCore::FrameView* view = d->frame->view();
- view->paint(&ctx, view->frameRect());
+/*!
+ \since 4.6
+ Render the frame's \a contents into \a painter while clipping to \a contents.
+*/
+void QWebFrame::renderContents(QPainter *painter, const QRegion &contents)
+{
+ d->renderPrivate(painter, contents, true);
}
/*!
@@ -708,11 +810,18 @@ void QWebFrame::render(QPainter *painter)
QWebSettings.
*/
+/*!
+ Sets the value of the multiplier used to scale the text in a Web frame to
+ the \a factor specified.
+*/
void QWebFrame::setTextSizeMultiplier(qreal factor)
{
d->frame->setZoomFactor(factor, /*isTextOnly*/true);
}
+/*!
+ Returns the value of the multiplier used to scale the text in a Web frame.
+*/
qreal QWebFrame::textSizeMultiplier() const
{
return d->frame->zoomFactor();
@@ -758,6 +867,8 @@ QRect QWebFrame::geometry() const
/*!
\property QWebFrame::contentsSize
\brief the size of the contents in this frame
+
+ \sa contentsSizeChanged
*/
QSize QWebFrame::contentsSize() const
{
@@ -886,7 +997,7 @@ QVariant QWebFrame::evaluateJavaScript(const QString& scriptSource)
ScriptController *proxy = d->frame->script();
QVariant rc;
if (proxy) {
- JSC::JSValue* v = proxy->evaluate(String(), 1, scriptSource);
+ JSC::JSValuePtr v = proxy->evaluate(ScriptSourceCode(scriptSource)).jsValue();
if (v) {
int distance = 0;
rc = JSC::Bindings::convertValueToQVariant(proxy->globalObject()->globalExec(), v, QMetaType::Void, &distance);
@@ -895,6 +1006,18 @@ QVariant QWebFrame::evaluateJavaScript(const QString& scriptSource)
return rc;
}
+/*!
+ \since 4.5
+
+ Returns the frame's security origin.
+*/
+QWebSecurityOrigin QWebFrame::securityOrigin() const
+{
+ QWebFrame* that = const_cast<QWebFrame*>(this);
+ QWebSecurityOriginPrivate* priv = new QWebSecurityOriginPrivate(QWebFramePrivate::core(that)->document()->securityOrigin());
+ return QWebSecurityOrigin(priv);
+}
+
WebCore::Frame* QWebFramePrivate::core(QWebFrame* webFrame)
{
return webFrame->d->frame;
@@ -960,14 +1083,12 @@ QWebFrame* QWebFramePrivate::kit(WebCore::Frame* coreFrame)
*/
/*!
- \since 4.5
- \fn void QWebFrame::aboutToUpdateHistory(QWebHistoryItem* item);
+ \fn void QWebFrame::contentsSizeChanged(const QSize &size)
+ \since 4.6
- This signal is emitted shortly before the history of navigated pages
- is changed, for example when navigating back in the history.
+ This signal is emitted when the frame's contents size changes.
- A potential use-case for this signal is to store custom data in
- the QWebHistoryItem associated to the frame, using QWebHistoryItem::setUserData().
+ \sa contentsSize()
*/
/*!
@@ -991,6 +1112,7 @@ QWebHitTestResult::QWebHitTestResult(QWebHitTestResultPrivate *priv)
QWebHitTestResultPrivate::QWebHitTestResultPrivate(const WebCore::HitTestResult &hitTest)
: isContentEditable(false)
, isContentSelected(false)
+ , isScrollBar(false)
{
if (!hitTest.innerNode())
return;
@@ -1002,6 +1124,7 @@ QWebHitTestResultPrivate::QWebHitTestResultPrivate(const WebCore::HitTestResult
linkTitle = hitTest.titleDisplayString();
alternateText = hitTest.altDisplayString();
imageUrl = hitTest.absoluteImageURL();
+ innerNode = hitTest.innerNode();
innerNonSharedNode = hitTest.innerNonSharedNode();
WebCore::Image *img = hitTest.image();
if (img) {
@@ -1015,10 +1138,20 @@ QWebHitTestResultPrivate::QWebHitTestResultPrivate(const WebCore::HitTestResult
isContentEditable = hitTest.isContentEditable();
isContentSelected = hitTest.isSelected();
+ isScrollBar = hitTest.scrollbar();
if (innerNonSharedNode && innerNonSharedNode->document()
&& innerNonSharedNode->document()->frame())
frame = QWebFramePrivate::kit(innerNonSharedNode->document()->frame());
+
+ if (Node *block = WebCore::enclosingBlock(innerNode.get())) {
+ RenderObject *renderBlock = block->renderer();
+ while (renderBlock && renderBlock->isListItem())
+ renderBlock = renderBlock->containingBlock();
+
+ if (renderBlock)
+ enclosingBlock = renderBlock->absoluteClippedOverflowRect();
+ }
}
/*!
@@ -1085,7 +1218,7 @@ QPoint QWebHitTestResult::pos() const
/*!
\since 4.5
- Returns the bounding box of the element.
+ Returns the bounding rect of the element.
*/
QRect QWebHitTestResult::boundingRect() const
{
@@ -1095,6 +1228,17 @@ QRect QWebHitTestResult::boundingRect() const
}
/*!
+ \since 4.6
+ Returns the rect of the smallest enclosing block element.
+*/
+QRect QWebHitTestResult::enclosingBlock() const
+{
+ if (!d)
+ return QRect();
+ return d->enclosingBlock;
+}
+
+/*!
Returns the title of the nearest enclosing HTML element.
*/
QString QWebHitTestResult::title() const
@@ -1205,3 +1349,13 @@ QWebFrame *QWebHitTestResult::frame() const
return d->frame;
}
+/*!
+ \since 4.6
+ Returns true if the test includes a scrollbar.
+*/
+bool QWebHitTestResult::isScrollBar() const
+{
+ if (!d)
+ return false;
+ return d->isScrollBar;
+}
diff --git a/WebKit/qt/Api/qwebframe.h b/WebKit/qt/Api/qwebframe.h
index 4d37205..e53e2b5 100644
--- a/WebKit/qt/Api/qwebframe.h
+++ b/WebKit/qt/Api/qwebframe.h
@@ -47,6 +47,7 @@ class QWebFramePrivate;
class QWebPage;
class QWebHitTestResult;
class QWebHistoryItem;
+class QWebSecurityOrigin;
namespace WebCore {
class WidgetPrivate;
@@ -69,6 +70,7 @@ public:
QPoint pos() const;
QRect boundingRect() const;
+ QRect enclosingBlock() const;
QString title() const;
QString linkText() const;
@@ -86,6 +88,8 @@ public:
QWebFrame *frame() const;
+ bool isScrollBar() const;
+
private:
QWebHitTestResult(QWebHitTestResultPrivate *priv);
QWebHitTestResultPrivate *d;
@@ -104,7 +108,7 @@ class QWEBKIT_EXPORT QWebFrame : public QObject
Q_PROPERTY(QUrl url READ url WRITE setUrl)
Q_PROPERTY(QIcon icon READ icon)
Q_PROPERTY(QSize contentsSize READ contentsSize)
- Q_PROPERTY(QSize scrollOffset READ scrollOffset WRITE setScrollOffset)
+ Q_PROPERTY(QPoint scrollPosition READ scrollPosition WRITE setScrollPosition)
private:
QWebFrame(QWebPage *parent, QWebFrameData *frameData);
QWebFrame(QWebFrame *parent, QWebFrameData *frameData);
@@ -133,6 +137,7 @@ public:
void setUrl(const QUrl &url);
QUrl url() const;
QIcon icon() const;
+ QMultiMap<QString, QString> metaData() const;
QString frameName() const;
@@ -146,13 +151,15 @@ public:
int scrollBarValue(Qt::Orientation orientation) const;
int scrollBarMinimum(Qt::Orientation orientation) const;
int scrollBarMaximum(Qt::Orientation orientation) const;
+ QRect scrollBarGeometry(Qt::Orientation orientation) const;
- void scroll(int, int) const;
- QSize scrollOffset() const;
- void setScrollOffset(const QSize &offset) const;
+ void scroll(int, int);
+ QPoint scrollPosition() const;
+ void setScrollPosition(const QPoint &pos);
void render(QPainter *painter, const QRegion &clip);
void render(QPainter *painter);
+ void renderContents(QPainter *painter, const QRegion &contents);
void setTextSizeMultiplier(qreal factor);
qreal textSizeMultiplier() const;
@@ -168,6 +175,8 @@ public:
virtual bool event(QEvent *);
+ QWebSecurityOrigin securityOrigin() const;
+
public Q_SLOTS:
QVariant evaluateJavaScript(const QString& scriptSource);
#ifndef QT_NO_PRINTER
@@ -185,7 +194,7 @@ Q_SIGNALS:
void iconChanged();
- void aboutToUpdateHistory(QWebHistoryItem* item);
+ void contentsSizeChanged(const QSize &size);
private:
friend class QWebPage;
diff --git a/WebKit/qt/Api/qwebframe_p.h b/WebKit/qt/Api/qwebframe_p.h
index 2b497e6..30f94cf 100644
--- a/WebKit/qt/Api/qwebframe_p.h
+++ b/WebKit/qt/Api/qwebframe_p.h
@@ -78,11 +78,11 @@ public:
Qt::ScrollBarPolicy horizontalScrollBarPolicy;
Qt::ScrollBarPolicy verticalScrollBarPolicy;
- void updateBackground();
-
static WebCore::Frame* core(QWebFrame*);
static QWebFrame* kit(WebCore::Frame*);
+ void renderPrivate(QPainter *painter, const QRegion &clip, bool contents = false);
+
QWebFrame *q;
WebCore::FrameLoaderClientQt *frameLoaderClient;
WebCore::Frame *frame;
@@ -96,11 +96,12 @@ public:
class QWebHitTestResultPrivate
{
public:
- QWebHitTestResultPrivate() : isContentEditable(false), isContentSelected(false) {}
+ QWebHitTestResultPrivate() : isContentEditable(false), isContentSelected(false), isScrollBar(false) {}
QWebHitTestResultPrivate(const WebCore::HitTestResult &hitTest);
QPoint pos;
QRect boundingRect;
+ QRect enclosingBlock;
QString title;
QString linkText;
QUrl linkUrl;
@@ -111,7 +112,9 @@ public:
QPixmap pixmap;
bool isContentEditable;
bool isContentSelected;
+ bool isScrollBar;
QPointer<QWebFrame> frame;
+ RefPtr<WebCore::Node> innerNode;
RefPtr<WebCore::Node> innerNonSharedNode;
};
diff --git a/WebKit/qt/Api/qwebhistory.cpp b/WebKit/qt/Api/qwebhistory.cpp
index 962aeb2..07d027d 100644
--- a/WebKit/qt/Api/qwebhistory.cpp
+++ b/WebKit/qt/Api/qwebhistory.cpp
@@ -23,6 +23,7 @@
#include "PlatformString.h"
#include "Image.h"
+#include "KURL.h"
#include "Page.h"
#include "PageGroup.h"
@@ -160,7 +161,7 @@ QVariant QWebHistoryItem::userData() const
/*!
\since 4.5
- Stores user specific data with the history item.
+ Stores user specific data \a userData with the history item.
\sa userData()
*/
@@ -431,7 +432,7 @@ int QWebHistory::maximumItemCount() const
/*!
\since 4.5
- Sets the maximum number of items in the history.
+ Sets the maximum number of items in the history to \a count.
\sa maximumItemCount()
*/
diff --git a/WebKit/qt/Api/qwebhistory.h b/WebKit/qt/Api/qwebhistory.h
index 2747c90..c39077d 100644
--- a/WebKit/qt/Api/qwebhistory.h
+++ b/WebKit/qt/Api/qwebhistory.h
@@ -32,7 +32,7 @@ class QWebPage;
namespace WebCore {
class FrameLoaderClientQt;
-};
+}
class QWebHistoryItemPrivate;
class QWEBKIT_EXPORT QWebHistoryItem
diff --git a/WebKit/qt/Api/qwebkitglobal.h b/WebKit/qt/Api/qwebkitglobal.h
index 2486fb6..19d9218 100644
--- a/WebKit/qt/Api/qwebkitglobal.h
+++ b/WebKit/qt/Api/qwebkitglobal.h
@@ -23,15 +23,29 @@
#include <QtCore/qglobal.h>
#if defined(Q_OS_WIN)
+# if defined(QT_NODLL)
+# undef QT_MAKEDLL
+# undef QT_DLL
+# elif defined(QT_MAKEDLL) /* create a Qt DLL library */
+# if defined(QT_DLL)
+# undef QT_DLL
+# endif
# if defined(BUILD_WEBKIT)
# define QWEBKIT_EXPORT Q_DECL_EXPORT
# else
# define QWEBKIT_EXPORT Q_DECL_IMPORT
# endif
+# elif defined(QT_DLL) /* use a Qt DLL library */
+# define QWEBKIT_EXPORT Q_DECL_IMPORT
+# endif
#endif
#if !defined(QWEBKIT_EXPORT)
-#define QWEBKIT_EXPORT Q_DECL_EXPORT
+# if defined(QT_SHARED)
+# define QWEBKIT_EXPORT Q_DECL_EXPORT
+# else
+# define QWEBKIT_EXPORT
+# endif
#endif
#if QT_VERSION < 0x040400
diff --git a/WebKit/qt/Api/qwebpage.cpp b/WebKit/qt/Api/qwebpage.cpp
index b7285d6..df40fa6 100644
--- a/WebKit/qt/Api/qwebpage.cpp
+++ b/WebKit/qt/Api/qwebpage.cpp
@@ -1,5 +1,5 @@
/*
- Copyright (C) 2008 Nokia Corporation and/or its subsidiary(-ies)
+ Copyright (C) 2008, 2009 Nokia Corporation and/or its subsidiary(-ies)
Copyright (C) 2007 Staikos Computing Services Inc.
Copyright (C) 2007 Apple Inc.
@@ -31,6 +31,7 @@
#include "Frame.h"
#include "FrameTree.h"
+#include "FrameLoader.h"
#include "FrameLoaderClientQt.h"
#include "FrameView.h"
#include "ChromeClientQt.h"
@@ -95,6 +96,22 @@
using namespace WebCore;
+bool QWebPagePrivate::drtRun = false;
+void QWEBKIT_EXPORT qt_drt_run(bool b)
+{
+ QWebPagePrivate::drtRun = b;
+}
+
+void QWEBKIT_EXPORT qt_webpage_setGroupName(QWebPage* page, const QString& groupName)
+{
+ page->handle()->page->setGroupName(groupName);
+}
+
+QString QWEBKIT_EXPORT qt_webpage_groupName(QWebPage* page)
+{
+ return page->handle()->page->groupName();
+}
+
// Lookup table mapping QWebPage::WebActions to the associated Editor commands
static const char* editorCommandWebActions[] =
{
@@ -161,11 +178,13 @@ static const char* editorCommandWebActions[] =
"InsertNewline", // InsertParagraphSeparator
"InsertLineBreak", // InsertLineSeparator
+ "SelectAll", // SelectAll
+
0 // WebActionCount
};
// Lookup the appropriate editor command to use for WebAction \a action
-static const char* editorCommandForWebActions(QWebPage::WebAction action)
+const char* QWebPagePrivate::editorCommandForWebActions(QWebPage::WebAction action)
{
if ((action > QWebPage::NoWebAction) && (action < int(sizeof(editorCommandWebActions) / sizeof(const char*))))
return editorCommandWebActions[action];
@@ -220,6 +239,7 @@ QWebPagePrivate::QWebPagePrivate(QWebPage *qq)
WebCore::InitializeLoggingChannelsIfNecessary();
WebCore::PageGroup::setShouldTrackVisitedLinks(true);
JSC::initializeThreading();
+ WebCore::FrameLoader::setLocalLoadPolicy(WebCore::FrameLoader::AllowLocalLoadsForLocalAndSubstituteData);
chromeClient = new ChromeClientQt(q);
contextMenuClient = new ContextMenuClientQt();
@@ -245,6 +265,7 @@ QWebPagePrivate::QWebPagePrivate(QWebPage *qq)
insideOpenCall = false;
forwardUnsupportedContent = false;
editable = false;
+ useFixedLayout = false;
linkPolicy = QWebPage::DontDelegateLinks;
#ifndef QT_NO_CONTEXTMENU
currentContextMenu = 0;
@@ -448,6 +469,35 @@ void QWebPagePrivate::updateAction(QWebPage::WebAction action)
// those two are handled by QUndoStack
break;
#endif // QT_NO_UNDOSTACK
+ case QWebPage::MoveToNextChar:
+ case QWebPage::MoveToPreviousChar:
+ case QWebPage::MoveToNextWord:
+ case QWebPage::MoveToPreviousWord:
+ case QWebPage::MoveToNextLine:
+ case QWebPage::MoveToPreviousLine:
+ case QWebPage::MoveToStartOfLine:
+ case QWebPage::MoveToEndOfLine:
+ case QWebPage::MoveToStartOfBlock:
+ case QWebPage::MoveToEndOfBlock:
+ case QWebPage::MoveToStartOfDocument:
+ case QWebPage::MoveToEndOfDocument:
+ case QWebPage::SelectNextChar:
+ case QWebPage::SelectPreviousChar:
+ case QWebPage::SelectNextWord:
+ case QWebPage::SelectPreviousWord:
+ case QWebPage::SelectNextLine:
+ case QWebPage::SelectPreviousLine:
+ case QWebPage::SelectStartOfLine:
+ case QWebPage::SelectEndOfLine:
+ case QWebPage::SelectStartOfBlock:
+ case QWebPage::SelectEndOfBlock:
+ case QWebPage::SelectStartOfDocument:
+ case QWebPage::SelectEndOfDocument:
+ case QWebPage::DeleteStartOfWord:
+ case QWebPage::DeleteEndOfWord:
+ case QWebPage::SetTextDirectionDefault:
+ case QWebPage::SetTextDirectionLeftToRight:
+ case QWebPage::SetTextDirectionRightToLeft:
case QWebPage::ToggleBold:
case QWebPage::ToggleItalic:
case QWebPage::ToggleUnderline:
@@ -479,6 +529,35 @@ void QWebPagePrivate::updateEditorActions()
updateAction(QWebPage::Cut);
updateAction(QWebPage::Copy);
updateAction(QWebPage::Paste);
+ updateAction(QWebPage::MoveToNextChar);
+ updateAction(QWebPage::MoveToPreviousChar);
+ updateAction(QWebPage::MoveToNextWord);
+ updateAction(QWebPage::MoveToPreviousWord);
+ updateAction(QWebPage::MoveToNextLine);
+ updateAction(QWebPage::MoveToPreviousLine);
+ updateAction(QWebPage::MoveToStartOfLine);
+ updateAction(QWebPage::MoveToEndOfLine);
+ updateAction(QWebPage::MoveToStartOfBlock);
+ updateAction(QWebPage::MoveToEndOfBlock);
+ updateAction(QWebPage::MoveToStartOfDocument);
+ updateAction(QWebPage::MoveToEndOfDocument);
+ updateAction(QWebPage::SelectNextChar);
+ updateAction(QWebPage::SelectPreviousChar);
+ updateAction(QWebPage::SelectNextWord);
+ updateAction(QWebPage::SelectPreviousWord);
+ updateAction(QWebPage::SelectNextLine);
+ updateAction(QWebPage::SelectPreviousLine);
+ updateAction(QWebPage::SelectStartOfLine);
+ updateAction(QWebPage::SelectEndOfLine);
+ updateAction(QWebPage::SelectStartOfBlock);
+ updateAction(QWebPage::SelectEndOfBlock);
+ updateAction(QWebPage::SelectStartOfDocument);
+ updateAction(QWebPage::SelectEndOfDocument);
+ updateAction(QWebPage::DeleteStartOfWord);
+ updateAction(QWebPage::DeleteEndOfWord);
+ updateAction(QWebPage::SetTextDirectionDefault);
+ updateAction(QWebPage::SetTextDirectionLeftToRight);
+ updateAction(QWebPage::SetTextDirectionRightToLeft);
updateAction(QWebPage::ToggleBold);
updateAction(QWebPage::ToggleItalic);
updateAction(QWebPage::ToggleUnderline);
@@ -516,7 +595,11 @@ void QWebPagePrivate::mousePressEvent(QMouseEvent *ev)
return;
}
- bool accepted = frame->eventHandler()->handleMousePressEvent(PlatformMouseEvent(ev, 1));
+ bool accepted = false;
+ PlatformMouseEvent mev(ev, 1);
+ // ignore the event if we can't map Qt's mouse buttons to WebCore::MouseButton
+ if (mev.button() != NoButton)
+ accepted = frame->eventHandler()->handleMousePressEvent(mev);
ev->setAccepted(accepted);
}
@@ -526,7 +609,11 @@ void QWebPagePrivate::mouseDoubleClickEvent(QMouseEvent *ev)
if (!frame->view())
return;
- bool accepted = frame->eventHandler()->handleMousePressEvent(PlatformMouseEvent(ev, 2));
+ bool accepted = false;
+ PlatformMouseEvent mev(ev, 2);
+ // ignore the event if we can't map Qt's mouse buttons to WebCore::MouseButton
+ if (mev.button() != NoButton)
+ accepted = frame->eventHandler()->handleMousePressEvent(mev);
ev->setAccepted(accepted);
tripleClickTimer.start(QApplication::doubleClickInterval(), q);
@@ -539,7 +626,11 @@ void QWebPagePrivate::mouseTripleClickEvent(QMouseEvent *ev)
if (!frame->view())
return;
- bool accepted = frame->eventHandler()->handleMousePressEvent(PlatformMouseEvent(ev, 3));
+ bool accepted = false;
+ PlatformMouseEvent mev(ev, 3);
+ // ignore the event if we can't map Qt's mouse buttons to WebCore::MouseButton
+ if (mev.button() != NoButton)
+ accepted = frame->eventHandler()->handleMousePressEvent(mev);
ev->setAccepted(accepted);
}
@@ -549,7 +640,11 @@ void QWebPagePrivate::mouseReleaseEvent(QMouseEvent *ev)
if (!frame->view())
return;
- bool accepted = frame->eventHandler()->handleMouseReleaseEvent(PlatformMouseEvent(ev, 0));
+ bool accepted = false;
+ PlatformMouseEvent mev(ev, 0);
+ // ignore the event if we can't map Qt's mouse buttons to WebCore::MouseButton
+ if (mev.button() != NoButton)
+ accepted = frame->eventHandler()->handleMouseReleaseEvent(mev);
ev->setAccepted(accepted);
#ifndef QT_NO_CLIPBOARD
@@ -616,7 +711,7 @@ void QWebPagePrivate::wheelEvent(QWheelEvent *ev)
#endif // QT_NO_WHEELEVENT
#ifndef QT_NO_SHORTCUT
-static QWebPage::WebAction editorActionForKeyEvent(QKeyEvent* event)
+QWebPage::WebAction QWebPagePrivate::editorActionForKeyEvent(QKeyEvent* event)
{
static struct {
QKeySequence::StandardKey standardKey;
@@ -657,6 +752,7 @@ static QWebPage::WebAction editorActionForKeyEvent(QKeyEvent* event)
{ QKeySequence::InsertParagraphSeparator, QWebPage::InsertParagraphSeparator },
{ QKeySequence::InsertLineSeparator, QWebPage::InsertLineSeparator },
#endif
+ { QKeySequence::SelectAll, QWebPage::SelectAll },
{ QKeySequence::UnknownKey, QWebPage::NoWebAction }
};
@@ -673,20 +769,9 @@ void QWebPagePrivate::keyPressEvent(QKeyEvent *ev)
bool handled = false;
WebCore::Frame* frame = page->focusController()->focusedOrMainFrame();
WebCore::Editor* editor = frame->editor();
-#ifndef QT_NO_SHORTCUT
- if (editor->canEdit()) {
- QWebPage::WebAction action = editorActionForKeyEvent(ev);
- if (action != QWebPage::NoWebAction) {
- q->triggerAction(action);
- handled = true;
- }
- } else {
- if (ev == QKeySequence::Copy) {
- q->triggerAction(QWebPage::Copy);
- handled = true;
- }
- }
-#endif // QT_NO_SHORTCUT
+ // we forward the key event to WebCore first to handle potential DOM
+ // defined event handlers and later on end up in EditorClientQt::handleKeyboardEvent
+ // to trigger editor commands via triggerAction().
if (!handled)
handled = frame->eventHandler()->keyEvent(ev);
if (!handled) {
@@ -727,9 +812,6 @@ void QWebPagePrivate::keyReleaseEvent(QKeyEvent *ev)
void QWebPagePrivate::focusInEvent(QFocusEvent *ev)
{
- if (ev->reason() == Qt::PopupFocusReason)
- return;
-
FocusController *focusController = page->focusController();
Frame *frame = focusController->focusedFrame();
focusController->setActive(true);
@@ -742,9 +824,6 @@ void QWebPagePrivate::focusInEvent(QFocusEvent *ev)
void QWebPagePrivate::focusOutEvent(QFocusEvent *ev)
{
- if (ev->reason() == Qt::PopupFocusReason)
- return;
-
// only set the focused frame inactive so that we stop painting the caret
// and the focus frame. But don't tell the focus controller so that upon
// focusInEvent() we can re-activate the frame.
@@ -813,15 +892,19 @@ void QWebPagePrivate::leaveEvent(QEvent *ev)
\property QWebPage::palette
\brief the page's palette
- The background brush of the palette is used to draw the background of the main frame.
+ The base brush of the palette is used to draw the background of the main frame.
By default, this property contains the application's default palette.
*/
void QWebPage::setPalette(const QPalette &pal)
{
d->palette = pal;
- if (d->mainFrame)
- d->mainFrame->d->updateBackground();
+ if (!d->mainFrame || !d->mainFrame->d->frame->view())
+ return;
+
+ QBrush brush = pal.brush(QPalette::Base);
+ QColor backgroundColor = brush.style() == Qt::SolidPattern ? brush.color() : QColor();
+ QWebFramePrivate::core(d->mainFrame)->view()->updateBackgroundRecursively(backgroundColor, !backgroundColor.alpha());
}
QPalette QWebPage::palette() const
@@ -956,7 +1039,7 @@ QVariant QWebPage::inputMethodQuery(Qt::InputMethodQuery property) const
case Qt::ImMicroFocus: {
Frame *frame = d->page->focusController()->focusedFrame();
if (frame) {
- return QVariant(frame->selection()->caretRect());
+ return QVariant(frame->selection()->absoluteCaretBounds());
}
return QVariant();
}
@@ -1035,6 +1118,10 @@ QVariant QWebPage::inputMethodQuery(Qt::InputMethodQuery property) const
/*!
\enum QWebPage::WebAction
+ This enum describes the types of action which can be performed on the web page.
+ Actions which are related to text editing, cursor movement, and text selection
+ only have an effect if \l contentEditable is true.
+
\value NoWebAction No action is triggered.
\value OpenLink Open the current link.
\value OpenLinkInNewWindow Open the current link in a new window.
@@ -1088,6 +1175,7 @@ QVariant QWebPage::inputMethodQuery(Qt::InputMethodQuery property) const
\value InspectElement Show the Web Inspector with the currently highlighted HTML element.
\value InsertParagraphSeparator Insert a new paragraph.
\value InsertLineSeparator Insert a new line.
+ \value SelectAll Selects all content.
\omitvalue WebActionCount
*/
@@ -1367,7 +1455,7 @@ void QWebPage::triggerAction(WebAction action, bool checked)
if (QWebFrame *targetFrame = d->hitTestResult.linkTargetFrame()) {
WTF::RefPtr<WebCore::Frame> wcFrame = targetFrame->d->frame;
targetFrame->d->frame->loader()->loadFrameRequestWithFormAndValues(frameLoadRequest(d->hitTestResult.linkUrl(), wcFrame.get()),
- /*lockHistory*/ false, /*event*/ 0,
+ /*lockHistory*/ false, /*lockBackForwardList*/ false, /*event*/ 0,
/*HTMLFormElement*/ 0, /*formValues*/
WTF::HashMap<String, String>());
break;
@@ -1422,10 +1510,13 @@ void QWebPage::triggerAction(WebAction action, bool checked)
editor->setBaseWritingDirection(RightToLeftWritingDirection);
break;
case InspectElement:
- d->page->inspectorController()->inspect(d->hitTestResult.d->innerNonSharedNode.get());
+ if (!d->hitTestResult.isNull())
+ d->page->inspectorController()->inspect(d->hitTestResult.d->innerNonSharedNode.get());
+ else
+ d->page->inspectorController()->show();
break;
default:
- command = editorCommandForWebActions(action);
+ command = QWebPagePrivate::editorCommandForWebActions(action);
break;
}
@@ -1464,6 +1555,56 @@ void QWebPage::setViewportSize(const QSize &size) const
}
}
+QSize QWebPage::fixedLayoutSize() const
+{
+ if (d->mainFrame && d->mainFrame->d->frame->view())
+ return d->mainFrame->d->frame->view()->fixedLayoutSize();
+
+ return d->fixedLayoutSize;
+}
+
+/*!
+ \property QWebPage::fixedLayoutSize
+ \since 4.6
+ \brief the size of the fixed layout
+
+ The size affects the layout of the page in the viewport. If set to a fixed size of
+ 1024x768 for example then webkit will layout the page as if the viewport were that size
+ rather than something different.
+*/
+void QWebPage::setFixedLayoutSize(const QSize &size) const
+{
+ d->fixedLayoutSize = size;
+
+ QWebFrame *frame = mainFrame();
+ if (frame->d->frame && frame->d->frame->view()) {
+ WebCore::FrameView* view = frame->d->frame->view();
+ view->setFixedLayoutSize(size);
+ frame->d->frame->forceLayout();
+ }
+}
+
+bool QWebPage::useFixedLayout() const
+{
+ return d->useFixedLayout;
+}
+
+/*!
+ \property QWebPage::usedFixedLayout
+ \since 4.6
+ \brief whether to use a fixed layout size
+*/
+void QWebPage::setUseFixedLayout(bool useFixedLayout)
+{
+ d->useFixedLayout = useFixedLayout;
+
+ QWebFrame *frame = mainFrame();
+ if (frame->d->frame && frame->d->frame->view()) {
+ WebCore::FrameView* view = frame->d->frame->view();
+ view->setUseFixedLayout(useFixedLayout);
+ frame->d->frame->forceLayout();
+ }
+}
/*!
\fn bool QWebPage::acceptNavigationRequest(QWebFrame *frame, const QNetworkRequest &request, QWebPage::NavigationType type)
@@ -1614,32 +1755,83 @@ QAction *QWebPage::action(WebAction action) const
}
#endif // QT_NO_UNDOSTACK
case MoveToNextChar:
+ text = tr("Move the cursor to the next character");
+ break;
case MoveToPreviousChar:
+ text = tr("Move the cursor to the previous character");
+ break;
case MoveToNextWord:
+ text = tr("Move the cursor to the next word");
+ break;
case MoveToPreviousWord:
+ text = tr("Move the cursor to the previous word");
+ break;
case MoveToNextLine:
+ text = tr("Move the cursor to the next line");
+ break;
case MoveToPreviousLine:
+ text = tr("Move the cursor to the previous line");
+ break;
case MoveToStartOfLine:
+ text = tr("Move the cursor to the start of the line");
+ break;
case MoveToEndOfLine:
+ text = tr("Move the cursor to the end of the line");
+ break;
case MoveToStartOfBlock:
+ text = tr("Move the cursor to the start of the block");
+ break;
case MoveToEndOfBlock:
+ text = tr("Move the cursor to the end of the block");
+ break;
case MoveToStartOfDocument:
+ text = tr("Move the cursor to the start of the document");
+ break;
case MoveToEndOfDocument:
+ text = tr("Move the cursor to the end of the document");
+ break;
case SelectNextChar:
+ text = tr("Select to the next character");
+ break;
case SelectPreviousChar:
+ text = tr("Select to the previous character");
+ break;
case SelectNextWord:
+ text = tr("Select to the next word");
+ break;
case SelectPreviousWord:
+ text = tr("Select to the previous word");
+ break;
case SelectNextLine:
+ text = tr("Select to the next line");
+ break;
case SelectPreviousLine:
+ text = tr("Select to the previous line");
+ break;
case SelectStartOfLine:
+ text = tr("Select to the start of the line");
+ break;
case SelectEndOfLine:
+ text = tr("Select to the end of the line");
+ break;
case SelectStartOfBlock:
+ text = tr("Select to the start of the block");
+ break;
case SelectEndOfBlock:
+ text = tr("Select to the end of the block");
+ break;
case SelectStartOfDocument:
+ text = tr("Select to the start of the document");
+ break;
case SelectEndOfDocument:
+ text = tr("Select to the end of the document");
+ break;
case DeleteStartOfWord:
+ text = tr("Delete to the start of the word");
+ break;
case DeleteEndOfWord:
- break; // ####
+ text = tr("Delete to the end of the word");
+ break;
case SetTextDirectionDefault:
text = contextMenuItemTagDefaultDirection();
@@ -1813,7 +2005,7 @@ bool QWebPage::focusNextPrevChild(bool next)
}
/*!
- \property QWebPage::editable
+ \property QWebPage::contentEditable
\brief whether the content in this QWebPage is editable or not
\since 4.5
@@ -1821,7 +2013,7 @@ bool QWebPage::focusNextPrevChild(bool next)
cursor. If disabled (the default) only HTML elements in the web page with their
\c{contenteditable} attribute set are editable.
*/
-void QWebPage::setEditable(bool editable)
+void QWebPage::setContentEditable(bool editable)
{
if (d->editable != editable) {
d->editable = editable;
@@ -1841,7 +2033,7 @@ void QWebPage::setEditable(bool editable)
}
}
-bool QWebPage::isEditable() const
+bool QWebPage::isContentEditable() const
{
return d->editable;
}
@@ -1974,7 +2166,11 @@ void QWebPage::updatePositionDependentActions(const QPoint &pos)
This enum describes the types of extensions that the page can support. Before using these extensions, you
should verify that the extension is supported by calling supportsExtension().
- Currently there are no extensions.
+ \value ChooseMultipleFilesExtension Whether the web page supports multiple file selection.
+ This extension is invoked when the web content requests one or more file names, for example
+ as a result of the user clicking on a "file upload" button in a HTML form where multiple
+ file selection is allowed.
+
*/
/*!
@@ -1986,11 +2182,27 @@ void QWebPage::updatePositionDependentActions(const QPoint &pos)
*/
/*!
- \class QWebPage::ExtensionReturn
- \since 4.4
- \brief The ExtensionOption class provides an extended output argument to QWebPage's extension support.
+ \class QWebPage::ChooseMultipleFilesExtensionOption
+ \since 4.5
+ \brief The ChooseMultipleFilesExtensionOption class describes the option
+ for the multiple files selection extension.
- \sa QWebPage::extension()
+ The ChooseMultipleFilesExtensionOption class holds the frame originating the request
+ and the suggested filenames which might be provided.
+
+ \sa QWebPage::chooseFile(), QWebPage::ChooseMultipleFilesExtensionReturn
+*/
+
+/*!
+ \class QWebPage::ChooseMultipleFilesExtensionReturn
+ \since 4.5
+ \brief The ChooseMultipleFilesExtensionReturn describes the return value
+ for the multiple files selection extension.
+
+ The ChooseMultipleFilesExtensionReturn class holds the filenames selected by the user
+ when the extension is invoked.
+
+ \sa QWebPage::ChooseMultipleFilesExtensionOption
*/
/*!
@@ -2001,15 +2213,22 @@ void QWebPage::updatePositionDependentActions(const QPoint &pos)
You can call supportsExtension() to check if an extension is supported by the page.
- By default, no extensions are supported, and this function returns false.
+ Returns true if the extension was called successfully; otherwise returns false.
\sa supportsExtension(), Extension
*/
bool QWebPage::extension(Extension extension, const ExtensionOption *option, ExtensionReturn *output)
{
- Q_UNUSED(extension)
- Q_UNUSED(option)
- Q_UNUSED(output)
+#ifndef QT_NO_FILEDIALOG
+ if (extension == ChooseMultipleFilesExtension) {
+ // FIXME: do not ignore suggestedFiles
+ QStringList suggestedFiles = static_cast<const ChooseMultipleFilesExtensionOption*>(option)->suggestedFileNames;
+ QStringList names = QFileDialog::getOpenFileNames(d->view, QString::null);
+ static_cast<ChooseMultipleFilesExtensionReturn*>(output)->fileNames = names;
+ return true;
+ }
+#endif
+
return false;
}
@@ -2020,8 +2239,12 @@ bool QWebPage::extension(Extension extension, const ExtensionOption *option, Ext
*/
bool QWebPage::supportsExtension(Extension extension) const
{
- Q_UNUSED(extension)
+#ifndef QT_NO_FILEDIALOG
+ return extension == ChooseMultipleFilesExtension;
+#else
+ Q_UNUSED(extension);
return false;
+#endif
}
/*!
@@ -2155,8 +2378,8 @@ QWebPluginFactory *QWebPage::pluginFactory() const
}
/*!
- This function is called when a user agent for HTTP requests is needed. You can re-implement this
- function to dynamically return different user agent's for different urls, based on the \a url parameter.
+ This function is called when a user agent for HTTP requests is needed. You can reimplement this
+ function to dynamically return different user agents for different URLs, based on the \a url parameter.
The default implementation returns the following value:
@@ -2428,10 +2651,12 @@ quint64 QWebPage::bytesReceived() const {
/*!
\fn void QWebPage::contentsChanged()
+ \since 4.5
- This signal is emitted whenever the content changes during editing.
+ This signal is emitted whenever the text in form elements changes
+ as well as other editable content.
- \sa selectedText()
+ \sa contentEditable, QWebFrame::toHtml(), QWebFrame::toPlainText()
*/
/*!
@@ -2540,4 +2765,38 @@ quint64 QWebPage::bytesReceived() const {
window that hosts QWebPage should be changed to \a visible.
*/
+/*!
+ \fn void QWebPage::databaseQuotaExceeded(QWebFrame* frame, QString databaseName);
+ \since 4.5
+
+ This signal is emitted whenever the web site shown in \a frame is asking to store data
+ to the database \a databaseName and the quota allocated to that web site is exceeded.
+*/
+
+/*!
+ \since 4.5
+ \fn void QWebPage::saveFrameStateRequested(QWebFrame* frame, QWebHistoryItem* item);
+
+ This signal is emitted shortly before the history of navigated pages
+ in \a frame is changed, for example when navigating back in the history.
+
+ The provided QWebHistoryItem, \a item, holds the history entry of the frame before
+ the change.
+
+ A potential use-case for this signal is to store custom data in
+ the QWebHistoryItem associated to the frame, using QWebHistoryItem::setUserData().
+*/
+
+/*!
+ \since 4.5
+ \fn void QWebPage::restoreFrameStateRequested(QWebFrame* frame);
+
+ This signal is emitted when the load of \a frame is finished and the application may now update its state accordingly.
+*/
+
+/*!
+ \fn QWebPagePrivate* QWebPage::handle() const
+ \internal
+*/
+
#include "moc_qwebpage.cpp"
diff --git a/WebKit/qt/Api/qwebpage.h b/WebKit/qt/Api/qwebpage.h
index 5b978d8..2bbbc2a 100644
--- a/WebKit/qt/Api/qwebpage.h
+++ b/WebKit/qt/Api/qwebpage.h
@@ -46,6 +46,7 @@ class QWebFrameData;
class QWebNetworkInterface;
class QWebPluginFactory;
class QWebHitTestResult;
+class QWebHistoryItem;
namespace WebCore {
class ChromeClientQt;
@@ -64,10 +65,12 @@ class QWEBKIT_EXPORT QWebPage : public QObject
Q_PROPERTY(bool modified READ isModified)
Q_PROPERTY(QString selectedText READ selectedText)
Q_PROPERTY(QSize viewportSize READ viewportSize WRITE setViewportSize)
+ Q_PROPERTY(QSize fixedLayoutSize READ fixedLayoutSize WRITE setFixedLayoutSize)
+ Q_PROPERTY(bool useFixedLayout READ useFixedLayout WRITE setUseFixedLayout)
Q_PROPERTY(bool forwardUnsupportedContent READ forwardUnsupportedContent WRITE setForwardUnsupportedContent)
Q_PROPERTY(LinkDelegationPolicy linkDelegationPolicy READ linkDelegationPolicy WRITE setLinkDelegationPolicy)
Q_PROPERTY(QPalette palette READ palette WRITE setPalette)
- Q_PROPERTY(bool editable READ isEditable WRITE setEditable)
+ Q_PROPERTY(bool contentEditable READ isContentEditable WRITE setContentEditable)
Q_ENUMS(LinkDelegationPolicy NavigationType WebAction)
public:
enum NavigationType {
@@ -145,6 +148,8 @@ public:
InsertParagraphSeparator,
InsertLineSeparator,
+ SelectAll,
+
WebActionCount
};
@@ -212,6 +217,12 @@ public:
QSize viewportSize() const;
void setViewportSize(const QSize &size) const;
+ QSize fixedLayoutSize() const;
+ void setFixedLayoutSize(const QSize &size) const;
+
+ bool useFixedLayout() const;
+ void setUseFixedLayout(bool useFixedLayout);
+
virtual bool event(QEvent*);
bool focusNextPrevChild(bool next);
@@ -228,8 +239,8 @@ public:
void setPalette(const QPalette &palette);
QPalette palette() const;
- void setEditable(bool editable);
- bool isEditable() const;
+ void setContentEditable(bool editable);
+ bool isContentEditable() const;
#ifndef QT_NO_CONTEXTMENU
bool swallowContextMenuEvent(QContextMenuEvent *event);
@@ -239,14 +250,29 @@ public:
QMenu *createStandardContextMenu();
enum Extension {
+ ChooseMultipleFilesExtension
};
class ExtensionOption
{};
class ExtensionReturn
{};
+
+ class ChooseMultipleFilesExtensionOption : public ExtensionOption {
+ public:
+ QWebFrame *parentFrame;
+ QStringList suggestedFileNames;
+ };
+
+ class ChooseMultipleFilesExtensionReturn : public ExtensionReturn {
+ public:
+ QStringList fileNames;
+ };
+
virtual bool extension(Extension extension, const ExtensionOption *option = 0, ExtensionReturn *output = 0);
virtual bool supportsExtension(Extension extension) const;
+ inline QWebPagePrivate* handle() const { return d; }
+
Q_SIGNALS:
void loadStarted();
void loadProgress(int progress);
@@ -274,6 +300,10 @@ Q_SIGNALS:
void microFocusChanged();
void contentsChanged();
+ void databaseQuotaExceeded(QWebFrame* frame, QString databaseName);
+
+ void saveFrameStateRequested(QWebFrame* frame, QWebHistoryItem* item);
+ void restoreFrameStateRequested(QWebFrame* frame);
protected:
virtual QWebPage *createWindow(WebWindowType type);
diff --git a/WebKit/qt/Api/qwebpage_p.h b/WebKit/qt/Api/qwebpage_p.h
index 8fae81c..fd915a2 100644
--- a/WebKit/qt/Api/qwebpage_p.h
+++ b/WebKit/qt/Api/qwebpage_p.h
@@ -1,5 +1,5 @@
/*
- Copyright (C) 2008 Nokia Corporation and/or its subsidiary(-ies)
+ Copyright (C) 2008, 2009 Nokia Corporation and/or its subsidiary(-ies)
Copyright (C) 2008 Holger Hans Peter Freyther
This library is free software; you can redistribute it and/or
@@ -112,6 +112,11 @@ public:
void leaveEvent(QEvent *);
bool handleScrolling(QKeyEvent*);
+#ifndef QT_NO_SHORTCUT
+ static QWebPage::WebAction editorActionForKeyEvent(QKeyEvent* event);
+#endif
+ static const char* editorCommandForWebActions(QWebPage::WebAction action);
+
WebCore::ChromeClientQt *chromeClient;
WebCore::ContextMenuClientQt *contextMenuClient;
WebCore::EditorClientQt *editorClient;
@@ -149,6 +154,7 @@ public:
QWebPage::LinkDelegationPolicy linkPolicy;
QSize viewportSize;
+ QSize fixedLayoutSize;
QWebHistory history;
QWebHitTestResult hitTestResult;
#ifndef QT_NO_CONTEXTMENU
@@ -157,10 +163,13 @@ public:
QWebSettings *settings;
QPalette palette;
bool editable;
+ bool useFixedLayout;
QAction *actions[QWebPage::WebActionCount];
QWebPluginFactory *pluginFactory;
+
+ static bool drtRun;
};
#endif
diff --git a/WebKit/qt/Api/qwebpluginfactory.cpp b/WebKit/qt/Api/qwebpluginfactory.cpp
index 0d2390c..d2bb124 100644
--- a/WebKit/qt/Api/qwebpluginfactory.cpp
+++ b/WebKit/qt/Api/qwebpluginfactory.cpp
@@ -136,7 +136,7 @@ void QWebPluginFactory::refreshPlugins()
For example:
\code
- <object type="application/x-pdf" data="http://www.trolltech.com/document.pdf" width="500" height="400">
+ <object type="application/x-pdf" data="http://qtsoftware.com/document.pdf" width="500" height="400">
<param name="showTableOfContents" value="true" />
<param name="hideThumbnails" value="false" />
</object>
@@ -149,7 +149,7 @@ void QWebPluginFactory::refreshPlugins()
\row \o mimeType
\o "application/x-pdf"
\row \o url
- \o "http://www.trolltech.com/document.pdf"
+ \o "http://qtsoftware.com/document.pdf"
\row \o argumentNames
\o "showTableOfContents" "hideThumbnails"
\row \o argumentVaues
diff --git a/WebKit/qt/Api/qwebsecurityorigin.cpp b/WebKit/qt/Api/qwebsecurityorigin.cpp
new file mode 100644
index 0000000..5217362
--- /dev/null
+++ b/WebKit/qt/Api/qwebsecurityorigin.cpp
@@ -0,0 +1,176 @@
+/*
+ Copyright (C) 2008 Nokia Corporation and/or its subsidiary(-ies)
+
+ This library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Library General Public
+ License as published by the Free Software Foundation; either
+ version 2 of the License, or (at your option) any later version.
+
+ This library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Library General Public License for more details.
+
+ You should have received a copy of the GNU Library General Public License
+ along with this library; see the file COPYING.LIB. If not, write to
+ the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+ Boston, MA 02110-1301, USA.
+*/
+
+#include "config.h"
+#include "qwebsecurityorigin.h"
+#include "qwebsecurityorigin_p.h"
+#include "qwebdatabase.h"
+#include "qwebdatabase_p.h"
+
+#include "DatabaseTracker.h"
+#include "KURL.h"
+#include "SecurityOrigin.h"
+#include <QStringList>
+
+using namespace WebCore;
+
+/*!
+ \class QWebSecurityOrigin
+ \since 4.5
+ \brief The QWebSecurityOrigin class defines a security boundary for web sites.
+
+ QWebSecurityOrigin provides access to the security domains defined by web sites.
+ An origin consists of a host name, a scheme, and a port number. Web sites with the same
+ security origin can access each other's resources for client-side scripting or databases.
+
+ ### diagram
+
+ For example the site \c{http://www.example.com/my/page.html} is allowed to share the same
+ database as \c{http://www.example.com/my/overview.html}, or access each other's
+ documents when used in HTML frame sets and JavaScript. At the same time it prevents
+ \c{http://www.malicious.com/evil.html} from accessing \c{http://www.example.com/}'s resources,
+ because they are of a different security origin.
+
+ QWebSecurity also provides access to all databases defined within a security origin.
+
+ For more information refer to the
+ \l{http://en.wikipedia.org/wiki/Same_origin_policy}{"Same origin policy" Wikipedia Article}.
+
+ \sa QWebFrame::securityOrigin()
+*/
+
+/*!
+ Constructs a security origin from \a other.
+*/
+QWebSecurityOrigin::QWebSecurityOrigin(const QWebSecurityOrigin& other) : d(other.d)
+{
+}
+
+/*!
+ Assigns the \a other security origin to this.
+*/
+QWebSecurityOrigin& QWebSecurityOrigin::operator=(const QWebSecurityOrigin& other)
+{
+ d = other.d;
+ return *this;
+}
+
+/*!
+ Returns the scheme defining the security origin.
+*/
+QString QWebSecurityOrigin::scheme() const
+{
+ return d->origin->protocol();
+}
+
+/*!
+ Returns the host name defining the security origin.
+*/
+QString QWebSecurityOrigin::host() const
+{
+ return d->origin->host();
+}
+
+/*!
+ Returns the port number defining the security origin.
+*/
+int QWebSecurityOrigin::port() const
+{
+ return d->origin->port();
+}
+
+/*!
+ Returns the number of bytes all databases in the security origin
+ use on the disk.
+*/
+qint64 QWebSecurityOrigin::databaseUsage() const
+{
+ return DatabaseTracker::tracker().usageForOrigin(d->origin.get());
+}
+
+/*!
+ Returns the quota for the databases in the security origin.
+*/
+qint64 QWebSecurityOrigin::databaseQuota() const
+{
+ return DatabaseTracker::tracker().quotaForOrigin(d->origin.get());
+}
+
+/*!
+ Sets the quota for the databases in the security origin to \a quota bytes.
+
+ If the quota is set to a value less than the current usage, the quota will remain
+ and no data will be purged to meet the new quota. However, no new data can be added
+ to databases in this origin.
+*/
+void QWebSecurityOrigin::setDatabaseQuota(qint64 quota)
+{
+ DatabaseTracker::tracker().setQuota(d->origin.get(), quota);
+}
+
+/*!
+ Destroys the security origin.
+*/
+QWebSecurityOrigin::~QWebSecurityOrigin()
+{
+}
+
+/*!
+ \internal
+*/
+QWebSecurityOrigin::QWebSecurityOrigin(QWebSecurityOriginPrivate* priv)
+{
+ d = priv;
+}
+
+/*!
+ Returns a list of all security origins with a database quota defined.
+*/
+QList<QWebSecurityOrigin> QWebSecurityOrigin::allOrigins()
+{
+ Vector<RefPtr<SecurityOrigin> > coreOrigins;
+ DatabaseTracker::tracker().origins(coreOrigins);
+ QList<QWebSecurityOrigin> webOrigins;
+
+ for (unsigned i = 0; i < coreOrigins.size(); ++i) {
+ QWebSecurityOriginPrivate* priv = new QWebSecurityOriginPrivate(coreOrigins[i].get());
+ webOrigins.append(priv);
+ }
+ return webOrigins;
+}
+
+/*!
+ Returns a list of all databases defined in the security origin.
+*/
+QList<QWebDatabase> QWebSecurityOrigin::databases() const
+{
+ Vector<String> nameVector;
+ QList<QWebDatabase> databases;
+ if (!DatabaseTracker::tracker().databaseNamesForOrigin(d->origin.get(), nameVector))
+ return databases;
+ for (unsigned i = 0; i < nameVector.size(); ++i) {
+ QWebDatabasePrivate* priv = new QWebDatabasePrivate();
+ priv->name = nameVector[i];
+ priv->origin = this->d->origin;
+ QWebDatabase webDatabase(priv);
+ databases.append(webDatabase);
+ }
+ return databases;
+}
+
diff --git a/WebKit/qt/Api/qwebsecurityorigin.h b/WebKit/qt/Api/qwebsecurityorigin.h
new file mode 100644
index 0000000..ebe4a77
--- /dev/null
+++ b/WebKit/qt/Api/qwebsecurityorigin.h
@@ -0,0 +1,67 @@
+/*
+ Copyright (C) 2008 Nokia Corporation and/or its subsidiary(-ies)
+
+ This library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Library General Public
+ License as published by the Free Software Foundation; either
+ version 2 of the License, or (at your option) any later version.
+
+ This library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Library General Public License for more details.
+
+ You should have received a copy of the GNU Library General Public License
+ along with this library; see the file COPYING.LIB. If not, write to
+ the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+ Boston, MA 02110-1301, USA.
+*/
+
+#ifndef _WEBSECURITYORIGIN_H_
+#define _WEBSECURITYORIGIN_H_
+
+#include <QtCore/qurl.h>
+#include <QtCore/qshareddata.h>
+
+#include "qwebkitglobal.h"
+
+namespace WebCore {
+ class SecurityOrigin;
+ class ChromeClientQt;
+};
+
+class QWebSecurityOriginPrivate;
+class QWebDatabase;
+class QWebFrame;
+
+class QWEBKIT_EXPORT QWebSecurityOrigin
+{
+public:
+ static QList<QWebSecurityOrigin> allOrigins();
+
+ ~QWebSecurityOrigin();
+
+ QString scheme() const;
+ QString host() const;
+ int port() const;
+
+ qint64 databaseUsage() const;
+ qint64 databaseQuota() const;
+
+ void setDatabaseQuota(qint64 quota);
+
+ QList<QWebDatabase> databases() const;
+
+ QWebSecurityOrigin(const QWebSecurityOrigin& other);
+ QWebSecurityOrigin &operator=(const QWebSecurityOrigin& other);
+private:
+ friend class QWebDatabase;
+ friend class QWebFrame;
+ friend class WebCore::ChromeClientQt;
+ QWebSecurityOrigin(QWebSecurityOriginPrivate* priv);
+
+private:
+ QExplicitlySharedDataPointer<QWebSecurityOriginPrivate> d;
+};
+
+#endif
diff --git a/WebKit/qt/Api/qwebsecurityorigin_p.h b/WebKit/qt/Api/qwebsecurityorigin_p.h
new file mode 100644
index 0000000..73fe8ed
--- /dev/null
+++ b/WebKit/qt/Api/qwebsecurityorigin_p.h
@@ -0,0 +1,40 @@
+/*
+ Copyright (C) 2008 Nokia Corporation and/or its subsidiary(-ies)
+
+ This library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Library General Public
+ License as published by the Free Software Foundation; either
+ version 2 of the License, or (at your option) any later version.
+
+ This library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Library General Public License for more details.
+
+ You should have received a copy of the GNU Library General Public License
+ along with this library; see the file COPYING.LIB. If not, write to
+ the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+ Boston, MA 02110-1301, USA.
+*/
+
+#ifndef _WEBSECURITYORIGIN_P_H_
+#define _WEBSECURITYORIGIN_P_H_
+
+#include "SecurityOrigin.h"
+#include "RefPtr.h"
+
+class QWebSecurityOriginPrivate : public QSharedData
+{
+public:
+ QWebSecurityOriginPrivate(WebCore::SecurityOrigin* o)
+ {
+ Q_ASSERT(o);
+ origin = o;
+ }
+ ~QWebSecurityOriginPrivate()
+ {
+ }
+ WTF::RefPtr<WebCore::SecurityOrigin> origin;
+};
+
+#endif
diff --git a/WebKit/qt/Api/qwebsettings.cpp b/WebKit/qt/Api/qwebsettings.cpp
index 132eb0c..42baf93 100644
--- a/WebKit/qt/Api/qwebsettings.cpp
+++ b/WebKit/qt/Api/qwebsettings.cpp
@@ -32,6 +32,8 @@
#include "IconDatabase.h"
#include "Image.h"
#include "IntSize.h"
+#include "ApplicationCacheStorage.h"
+#include "DatabaseTracker.h"
#include <QHash>
#include <QSharedData>
@@ -50,6 +52,9 @@ public:
QHash<int, int> fontSizes;
QHash<int, bool> attributes;
QUrl userStyleSheetLocation;
+ QString localStorageDatabasePath;
+ QString offlineWebApplicationCachePath;
+ qint64 offlineStorageDefaultQuota;
void apply();
WebCore::Settings *settings;
@@ -156,9 +161,28 @@ void QWebSettingsPrivate::apply()
QUrl location = !userStyleSheetLocation.isEmpty() ? userStyleSheetLocation : global->userStyleSheetLocation;
settings->setUserStyleSheetLocation(WebCore::KURL(location));
+ QString localStoragePath = !localStorageDatabasePath.isEmpty() ? localStorageDatabasePath : global->localStorageDatabasePath;
+ settings->setLocalStorageDatabasePath(localStoragePath);
+
value = attributes.value(QWebSettings::ZoomTextOnly,
global->attributes.value(QWebSettings::ZoomTextOnly));
settings->setZoomsTextOnly(value);
+
+ value = attributes.value(QWebSettings::PrintElementBackgrounds,
+ global->attributes.value(QWebSettings::PrintElementBackgrounds));
+ settings->setShouldPrintBackgrounds(value);
+
+ value = attributes.value(QWebSettings::OfflineStorageDatabaseEnabled,
+ global->attributes.value(QWebSettings::OfflineStorageDatabaseEnabled));
+ settings->setDatabasesEnabled(value);
+
+ value = attributes.value(QWebSettings::OfflineWebApplicationCacheEnabled,
+ global->attributes.value(QWebSettings::OfflineWebApplicationCacheEnabled));
+ settings->setOfflineWebApplicationCacheEnabled(value);
+
+ value = attributes.value(QWebSettings::LocalStorageDatabaseEnabled,
+ global->attributes.value(QWebSettings::LocalStorageDatabaseEnabled));
+ settings->setLocalStorageEnabled(value);
} else {
QList<QWebSettingsPrivate *> settings = *::allSettings();
for (int i = 0; i < settings.count(); ++i)
@@ -195,9 +219,26 @@ QWebSettings *QWebSettings::globalSettings()
family, the location of a custom stylesheet, and generic attributes like java
script, plugins, etc. The \l{QWebSettings::WebAttribute}{WebAttribute}
enum further describes this.
-
+
QWebSettings also configures global properties such as the web page memory
- cache and the web page icon database.
+ cache and the web page icon database, local database storage and offline
+ applications storage.
+
+ \section1 Web Application Support
+
+ WebKit provides support for features specified in \l{HTML 5} that improve the
+ performance and capabilities of Web applications. These include client-side
+ (offline) storage and the use of a Web application cache.
+
+ Client-side (offline) storage is an improvement over the use of cookies to
+ store persistent data in Web applications. Applications can configure and
+ enable the use of an offline storage database by calling the
+ setOfflineStoragePath() with an appropriate file path, and can limit the quota
+ for each application by calling setOfflineStorageDefaultQuota().
+
+ The performance of Web applications can be enhanced with the use of an
+ offline cache. This can be enabled by calling setOfflineWebApplicationCache()
+ with an appropriate file path.
\sa QWebPage::settings(), QWebView::settings(), {Browser}
*/
@@ -266,6 +307,14 @@ QWebSettings *QWebSettings::globalSettings()
included in the keyboard focus chain.
\value ZoomTextOnly Specifies whether the zoom factor on a frame applies to
only the text or all content.
+ \value PrintElementBackgrounds Specifies whether the background color and images
+ are also drawn when the page is printed.
+ \value OfflineStorageDatabaseEnabled Specifies whether support for the HTML 5
+ offline storage feature is enabled or not.
+ \value OfflineWebApplicationCacheEnabled Specifies whether support for the HTML 5
+ web application cache feature is enabled or not.
+ \value LocalStorageDatabaseEnabled Specifies whether support for the HTML 5
+ local storage feature is enabled or not.
*/
/*!
@@ -275,9 +324,8 @@ QWebSettings::QWebSettings()
: d(new QWebSettingsPrivate)
{
// Initialize our global defaults
- // changing any of those will likely break the LayoutTests
- d->fontSizes.insert(QWebSettings::MinimumFontSize, 5);
- d->fontSizes.insert(QWebSettings::MinimumLogicalFontSize, 5);
+ d->fontSizes.insert(QWebSettings::MinimumFontSize, 0);
+ d->fontSizes.insert(QWebSettings::MinimumLogicalFontSize, 0);
d->fontSizes.insert(QWebSettings::DefaultFontSize, 14);
d->fontSizes.insert(QWebSettings::DefaultFixedFontSize, 14);
d->fontFamilies.insert(QWebSettings::StandardFont, QLatin1String("Arial"));
@@ -291,6 +339,12 @@ QWebSettings::QWebSettings()
d->attributes.insert(QWebSettings::JavascriptEnabled, true);
d->attributes.insert(QWebSettings::LinksIncludedInFocusChain, true);
d->attributes.insert(QWebSettings::ZoomTextOnly, false);
+ d->attributes.insert(QWebSettings::PrintElementBackgrounds, true);
+ d->attributes.insert(QWebSettings::OfflineStorageDatabaseEnabled, true);
+ d->attributes.insert(QWebSettings::OfflineWebApplicationCacheEnabled, true);
+ d->attributes.insert(QWebSettings::LocalStorageDatabaseEnabled, true);
+ d->offlineStorageDefaultQuota = 5 * 1024 * 1024;
+
}
/*!
@@ -600,3 +654,130 @@ void QWebSettings::resetAttribute(WebAttribute attr)
}
}
+/*!
+ \since 4.5
+
+ Sets the path for HTML5 offline storage to \a path.
+
+ \a path must point to an existing directory where the databases are stored.
+
+ Setting an empty path disables the feature.
+
+ \sa offlineStoragePath()
+*/
+void QWebSettings::setOfflineStoragePath(const QString& path)
+{
+#if ENABLE(DATABASE)
+ WebCore::DatabaseTracker::tracker().setDatabaseDirectoryPath(path);
+#endif
+}
+
+/*!
+ \since 4.5
+
+ Returns the path of the HTML5 offline storage or an empty string if the
+ feature is disabled.
+
+ \sa setOfflineStoragePath()
+*/
+QString QWebSettings::offlineStoragePath()
+{
+#if ENABLE(DATABASE)
+ return WebCore::DatabaseTracker::tracker().databaseDirectoryPath();
+#else
+ return QString();
+#endif
+}
+
+/*!
+ \since 4.5
+
+ Sets the value of the default quota for new offline storage databases
+ to \a maximumSize.
+*/
+void QWebSettings::setOfflineStorageDefaultQuota(qint64 maximumSize)
+{
+ QWebSettings::globalSettings()->d->offlineStorageDefaultQuota = maximumSize;
+}
+
+/*!
+ \since 4.5
+
+ Returns the value of the default quota for new offline storage databases.
+*/
+qint64 QWebSettings::offlineStorageDefaultQuota()
+{
+ return QWebSettings::globalSettings()->d->offlineStorageDefaultQuota;
+}
+
+/*!
+ \since 4.5
+
+ Sets the path for HTML5 offline web application cache storage to \a path.
+
+ \a path must point to an existing directory where the cache is stored.
+
+ Setting an empty path disables the feature.
+
+ \sa offlineWebApplicationCachePath()
+*/
+void QWebSettings::setOfflineWebApplicationCachePath(const QString& path)
+{
+#if ENABLE(OFFLINE_WEB_APPLICATIONS)
+ WebCore::cacheStorage().setCacheDirectory(path);
+#endif
+}
+
+/*!
+ \since 4.5
+
+ Returns the path of the HTML5 offline web application cache storage
+ or an empty string if the feature is disabled.
+
+ \sa setOfflineWebApplicationCachePath()
+*/
+QString QWebSettings::offlineWebApplicationCachePath()
+{
+#if ENABLE(OFFLINE_WEB_APPLICATIONS)
+ return WebCore::cacheStorage().cacheDirectory();
+#else
+ return QString();
+#endif
+}
+
+/*
+ \since 4.5
+
+ Sets the path for HTML5 local storage databases to \a path.
+
+ \a path must point to an existing directory where the cache is stored.
+
+ Setting an empty path disables the feature.
+
+ \sa localStorageDatabasePath()
+*/
+
+void QWEBKIT_EXPORT qt_websettings_setLocalStorageDatabasePath(QWebSettings* settings, const QString& path)
+{
+ QWebSettingsPrivate *d = settings->handle();
+ d->localStorageDatabasePath = path;
+ d->apply();
+}
+
+/*
+ \since 4.5
+
+ Returns the path for HTML5 local storage databases
+ or an empty string if the feature is disabled.
+
+ \sa setLocalStorageDatabasePath()
+*/
+QString QWEBKIT_EXPORT qt_websettings_localStorageDatabasePath(QWebSettings* settings)
+{
+ return settings->handle()->localStorageDatabasePath;
+}
+
+/*!
+ \fn QWebSettingsPrivate* QWebSettings::handle() const
+ \internal
+*/
diff --git a/WebKit/qt/Api/qwebsettings.h b/WebKit/qt/Api/qwebsettings.h
index 9a75dbf..4251fbb 100644
--- a/WebKit/qt/Api/qwebsettings.h
+++ b/WebKit/qt/Api/qwebsettings.h
@@ -59,7 +59,11 @@ public:
JavascriptCanAccessClipboard,
DeveloperExtrasEnabled,
LinksIncludedInFocusChain,
- ZoomTextOnly
+ ZoomTextOnly,
+ PrintElementBackgrounds,
+ OfflineStorageDatabaseEnabled,
+ OfflineWebApplicationCacheEnabled,
+ LocalStorageDatabaseEnabled
};
enum WebGraphic {
MissingImageGraphic,
@@ -103,6 +107,16 @@ public:
static int maximumPagesInCache();
static void setObjectCacheCapacities(int cacheMinDeadCapacity, int cacheMaxDead, int totalCapacity);
+ static void setOfflineStoragePath(const QString& path);
+ static QString offlineStoragePath();
+ static void setOfflineStorageDefaultQuota(qint64 maximumSize);
+ static qint64 offlineStorageDefaultQuota();
+
+ static void setOfflineWebApplicationCachePath(const QString& path);
+ static QString offlineWebApplicationCachePath();
+
+ inline QWebSettingsPrivate* handle() const { return d; }
+
private:
friend class QWebPagePrivate;
friend class QWebSettingsPrivate;
diff --git a/WebKit/qt/Api/qwebview.cpp b/WebKit/qt/Api/qwebview.cpp
index ad0b12a..ea503a1 100644
--- a/WebKit/qt/Api/qwebview.cpp
+++ b/WebKit/qt/Api/qwebview.cpp
@@ -156,15 +156,10 @@ QWebView::QWebView(QWidget *parent)
{
d = new QWebViewPrivate(this);
- QPalette pal = palette();
- pal.setBrush(QPalette::Background, Qt::white);
-
- setAttribute(Qt::WA_OpaquePaintEvent);
#if !defined(Q_WS_QWS)
setAttribute(Qt::WA_InputMethodEnabled);
#endif
- setPalette(pal);
setAcceptDrops(true);
setMouseTracking(true);
@@ -245,6 +240,7 @@ void QWebView::setPage(QWebPage *page)
connect(d->page, SIGNAL(microFocusChanged()),
this, SLOT(updateMicroFocus()));
}
+ setAttribute(Qt::WA_OpaquePaintEvent, d->page);
update();
}
@@ -290,8 +286,8 @@ void QWebView::load(const QNetworkRequest &request,
/*!
Sets the content of the web view to the specified \a html.
- External objects referenced in the HTML document are located relative to
- \a baseUrl.
+ External objects such as stylesheets or images referenced in the HTML
+ document are located relative to \a baseUrl.
When using this method, WebKit assumes that external resources such as
JavaScript programs or style sheets are encoded in UTF-8 unless otherwise
@@ -515,11 +511,18 @@ qreal QWebView::zoomFactor() const
By default, this property contains a value of 1.0.
*/
+/*!
+ Sets the value of the multiplier used to scale the text in a Web page to
+ the \a factor specified.
+*/
void QWebView::setTextSizeMultiplier(qreal factor)
{
page()->mainFrame()->setTextSizeMultiplier(factor);
}
+/*!
+ Returns the value of the multiplier used to scale the text in a Web page.
+*/
qreal QWebView::textSizeMultiplier() const
{
return page()->mainFrame()->textSizeMultiplier();
@@ -546,6 +549,8 @@ bool QWebView::event(QEvent *e)
if (d->page) {
#ifndef QT_NO_CONTEXTMENU
if (e->type() == QEvent::ContextMenu) {
+ if (!isEnabled())
+ return false;
QContextMenuEvent *event = static_cast<QContextMenuEvent *>(e);
if (d->page->swallowContextMenuEvent(event)) {
e->accept();
diff --git a/WebKit/qt/ChangeLog b/WebKit/qt/ChangeLog
index 3186068..04575c9 100644
--- a/WebKit/qt/ChangeLog
+++ b/WebKit/qt/ChangeLog
@@ -1,3 +1,1310 @@
+2009-02-03 Mark Rowe <mrowe@apple.com>
+
+ Merge r40508.
+
+ 2009-02-02 Geoffrey Garen <ggaren@apple.com>
+
+ Reviewed by Sam Weinig.
+
+ Track redirects in global history.
+
+ Keep Qt building.
+
+ * WebCoreSupport/FrameLoaderClientQt.cpp:
+ (WebCore::FrameLoaderClientQt::updateGlobalHistoryForRedirectWithoutHistoryItem):
+ (WebCore::FrameLoaderClientQt::createFrame):
+ * WebCoreSupport/FrameLoaderClientQt.h:
+
+2009-02-03 Mark Rowe <mrowe@apple.com>
+
+ Merge r40436.
+
+ 2009-01-30 Geoffrey Garen <ggaren@apple.com>
+
+ Build fix.
+
+ * WebCoreSupport/FrameLoaderClientQt.cpp:
+ (WebCore::FrameLoaderClientQt::createFrame):
+
+2009-02-03 Mark Rowe <mrowe@apple.com>
+
+ Merge r40432.
+
+ 2009-01-30 Geoffrey Garen <ggaren@apple.com>
+
+ Reviewed by Sam Weinig.
+
+ Split "lockHistory" into "lockHistory" and "lockBackForwardList" in
+ preparation for setting them differently during a redirect.
+
+ * Api/qwebpage.cpp:
+ (QWebPage::triggerAction):
+
+2009-01-27 Brady Eidson <beidson@apple.com>
+
+ Reviewed by Dan Bernstein
+
+ Rework FrameLoaderClient to work on a CachedFrame basis instead of CachedPage
+
+ * WebCoreSupport/FrameLoaderClientQt.cpp:
+ (WebCore::FrameLoaderClientQt::savePlatformDataToCachedFrame):
+ (WebCore::FrameLoaderClientQt::transitionToCommittedFromCachedFrame):
+ * WebCoreSupport/FrameLoaderClientQt.h:
+
+2009-01-26 Simon Fraser <simon.fraser@apple.com>
+
+ Reviewed by David Hyatt
+
+ Back out r40285, because it was checked in with no bug number, no
+ testcase, is rendering change that did not get thorough review,
+ and broke the Mac build.
+
+ * Api/qwebframe.cpp:
+ (QWebFrame::hitTestContent):
+
+2009-01-26 Adam Treat <adam.treat@torchmobile.com>
+
+ Reviewed by Nikolas Zimmermann.
+
+ Do not clip the QWebFrame::hitTestContent method to the visible viewport.
+
+ * Api/qwebframe.cpp:
+ (QWebFrame::hitTestContent):
+
+2009-01-26 David Boddie <dboddie@trolltech.com>
+
+ Reviewed by Simon Hausmann.
+
+ Doc: qdoc fix for a link to a property and added a basic description of the offline caching and storage features from HTML 5.
+
+ * Api/qwebpage.cpp:
+ * Api/qwebsettings.cpp:
+
+2009-01-25 Urs Wolfer <uwolfer@kde.org>
+
+ Reviewed by Simon Hausmann.
+
+ Add QWebPage::SelectAll to WebAction enum to select all content.
+
+ https://bugs.webkit.org/show_bug.cgi?id=22946
+
+ * Api/qwebpage.cpp:
+ (QWebPagePrivate::editorActionForKeyEvent):
+ * Api/qwebpage.h:
+
+2009-01-25 David Boddie <dboddie@trolltech.com>
+
+ Reviewed by Simon Hausmann.
+
+ Doc: Fixed the terminology used.
+
+ * Api/qwebpage.cpp:
+
+2009-01-25 Thiago Macieira <thiago.macieira@nokia.com>
+
+ Reviewed by Simon Hausmann.
+
+ Rename links from trolltech.com to qtsoftware.com
+
+ * Api/qwebpluginfactory.cpp:
+
+2009-01-25 Tor Arne Vestbø <tavestbo@trolltech.com>
+
+ Reviewed by Simon Hausmann.
+
+ Make QWebPage auto-test more robust by cleaning up generated files
+
+ Sometimes the auto-test may segfault, leaving behind files because the
+ call to cleanupTestCase() never happens, so we also clean up the files
+ at initTestCase() just to make sure we're running in a clean environment.
+
+ * tests/qwebpage/tst_qwebpage.cpp:
+ (tst_QWebPage::cleanupFiles):
+ (tst_QWebPage::initTestCase):
+ (tst_QWebPage::cleanupTestCase):
+
+2008-12-20 Urs Wolfer <uwolfer@kde.org>
+
+ Reviewed by Simon Hausmann.
+
+ Fix: compile qwebhistory.h with pendantic comiler flag.
+
+ https://bugs.webkit.org/show_bug.cgi?id=22947
+
+ * Api/qwebhistory.h:
+
+2009-01-24 Adam Treat <adam.treat@torchmobile.com>
+
+ Oops, fix the Qt build.
+
+ * Api/qwebframe.cpp:
+ (QWebFrame::render):
+
+2009-01-24 Adam Treat <adam.treat@torchmobile.com>
+
+ Reviewed by Nikolas Zimmermann.
+
+ Add QWebFrame::renderContents() method which allows arbitary rendering
+ of any content region within the QWebFrame. It also does not draw any
+ scrollbars.
+
+ * Api/qwebframe.cpp:
+ (QWebFrame::renderContents):
+ * Api/qwebframe.h:
+
+2009-01-23 Ariya Hidayat <ariya.hidayat@trolltech.com>
+
+ Reviewed by Simon Hausmann.
+
+ Make the test more robust by taking into account the platform-specific
+ cursor flashing time.
+
+ * tests/qwebframe/tst_qwebframe.cpp:
+
+2009-01-20 Friedemann Kleint <Friedemann.Kleint@nokia.com>
+
+ Reviewed by Simon Hausmann.
+
+ Fix spelling error in QWebPage
+
+ * Api/qwebpage.cpp:
+ (QWebPage::action):
+
+2009-01-19 Simon Hausmann <simon.hausmann@nokia.com>
+
+ Reviewed by Tor Arne Vestbø.
+
+ Fix calling of onkeypress event handlers on input elements when pressing enter
+ and other text insertion commands in the Qt port.
+
+ Similar to the win and mac ports don't execute text inserting editor
+ commands on RawKeyDown but continue processing the event first in
+ WebCore, i.e. also get a keypress event sent. If unhandled it will
+ come back to EditorClientQt::handleKeyboardEvent later and we execute
+ it then.
+
+ This also fixes search by pressing enter on www.trafikanten.no.
+
+ * Api/qwebpage.cpp:
+ (QWebPagePrivate::editorCommandForWebActions): Make function
+ accessible from other files.
+ (QWebPage::triggerAction): Adjust to new function visibility.
+ * Api/qwebpage_p.h: Ditto.
+ * WebCoreSupport/EditorClientQt.cpp:
+ (WebCore::EditorClientQt::handleKeyboardEvent): Don't execute
+ text inserting commands on RawKeyPressDown.
+
+2009-01-16 Ariya Hidayat <ariya.hidayat@trolltech.com>
+
+ Rubber-stamped by Simon Hausmann.
+
+ [Qt] Increase popup focus delay time to a sensible 500 ms.
+
+ * tests/qwebframe/tst_qwebframe.cpp:
+
+2009-01-16 Ariya Hidayat <ariya.hidayat@trolltech.com>
+
+ Reviewed by Adam Roben.
+
+ [Qt] Prevent crash if plugin data is NULL.
+
+ * WebCoreSupport/FrameLoaderClientQt.cpp: NULL check.
+ (WebCore::FrameLoaderClientQt::objectContentType):
+
+2009-01-16 Ariya Hidayat <ariya.hidayat@trolltech.com>
+
+ Rubber-stamped by Simon Hausmann.
+
+ [Qt] Per-line cursor movement tests depend on platform-specific font
+ metrics. Remove them to avoid test failures on different platforms.
+
+ * tests/qwebpage/tst_qwebpage.cpp:
+ (tst_QWebPage::cursorMovements):
+
+2009-01-16 Ariya Hidayat <ariya.hidayat@trolltech.com>
+
+ Rubber-stamped by Simon Hausmann.
+
+ http://www.qtsoftware.com/developer/task-tracker/index_html?id=219344&method=entry
+
+ [Qt] API documentation for QWebPage::WebAction enum.
+
+ * Api/qwebpage.cpp:
+
+2009-01-16 Ariya Hidayat <ariya.hidayat@trolltech.com>
+
+ Another attempt at fixing the Qt build.
+
+ * Api/qwebframe.cpp:
+ (QWebFrame::addToJavaScriptWindowObject):
+
+2009-01-14 Ariya Hidayat <ariya.hidayat@trolltech.com>
+
+ Reviewed by Tor Arne Vestbø.
+
+ [Qt] Unit tests for text selection and editing actions of QWebPage.
+ The following are tested:
+ - the actions are not NULL
+ - the actions are disabled when contentEditable is false
+ - the actions are enabled when contentEditable is true
+
+ * tests/qwebpage/tst_qwebpage.cpp:
+ (tst_QWebPage::textSelection):
+ (tst_QWebPage::textEditing):
+
+2009-01-14 Simon Hausmann <simon.hausmann@nokia.com>
+
+ Reviewed by Tor Arne Vestbø.
+
+ Fix failing assertion when pressing an extra mouse button on a
+ QWebView.
+
+ Mice with more than three buttons - for example with a dedicated
+ "back" button - can generate Qt::XButton1 or Button2.
+ WebCore::MouseButton contains only Left, Middle and Right, so in
+ Qt's PlatformMouseEvent we map to NoButton, resulting in a mouse
+ press or release even with no button set. That triggers an assertion
+ in EventTargetNode::dispatchMouseEvent requiring that either a button
+ is set or it is just a mouse move event, which is correct.
+
+ In QWebPage decide not to dispatch such mouse events where we cannot
+ map the mouse button to a WebCore::MouseButton.
+
+ * Api/qwebpage.cpp:
+ (QWebPagePrivate::mousePressEvent):
+ (QWebPagePrivate::mouseDoubleClickEvent):
+ (QWebPagePrivate::mouseTripleClickEvent):
+ (QWebPagePrivate::mouseReleaseEvent):
+
+2009-01-14 Ariya Hidayat <ariya.hidayat@trolltech.com>
+
+ Reviewed by Simon Hausmann.
+
+ http://www.qtsoftware.com/developer/task-tracker/index_html?id=241144&method=entry
+
+ [Qt] Create actions for text selection and editing for QWebPage.
+ Also properly disable and enable them when contentEditable is toggled.
+
+ * Api/qwebpage.cpp:
+ (QWebPagePrivate::updateAction):
+ (QWebPagePrivate::updateEditorActions):
+ (QWebPage::action):
+
+2009-01-14 Ariya Hidayat <ariya.hidayat@trolltech.com>
+
+ Reviewed by Simon Hausmann.
+
+ [Qt] Unit tests for cursor movements. The following are tested:
+ - the actions are not NULL
+ - the actions are disabled when contentEditable is false
+ - the actions are enabled when contentEditable is true
+ - the cursor moves properly when the actions are triggered
+
+ * tests/qwebpage/tst_qwebpage.cpp:
+ (CursorTrackedPage::CursorTrackedPage):
+ (CursorTrackedPage::selectedText):
+ (CursorTrackedPage::selectionStartOffset):
+ (CursorTrackedPage::selectionEndOffset):
+ (CursorTrackedPage::isSelectionCollapsed):
+ (tst_QWebPage::cursorMovements):
+
+2009-01-08 Yongjun Zhang <yongjun.zhang@nokia.com>
+
+ Reviewed by Simon Hausmann.
+
+ https://bugs.webkit.org/show_bug.cgi?id=23187
+
+ Update webview with the intersected rect.
+
+ In ChromeClientQt::repaint, view should be updated with the
+ intersected rect, not the whole windowRect;
+
+ This generally is not a problem for normal viewport setup where
+ viewport size is the same as the qwebview widget size. However, if we
+ set the viewport size smaller than qwebkit widget, we will see
+ unwanted painting outside the viewport.
+
+ * WebCoreSupport/ChromeClientQt.cpp:
+ (WebCore::ChromeClientQt::repaint):
+
+2009-01-13 Ariya Hidayat <ariya.hidayat@trolltech.com>
+
+ Rubber-stamped by Tor Arne Vestbø.
+
+ [Qt] Missing piece from my previous commit:
+ Disable and enable the cursor navigation actions when contentEditable
+ is changed.
+
+ * Api/qwebpage.cpp:
+ (QWebPagePrivate::updateEditorActions):
+
+2009-01-13 Ariya Hidayat <ariya.hidayat@trolltech.com>
+
+ Reviewed by Tor Arne Vestbø.
+
+ [Qt] Create actions for cursor navigation for QWebPage.
+ Also properly disable and enable them when contentEditable is toggled.
+
+ * Api/qwebpage.cpp:
+ (QWebPagePrivate::updateAction):
+ (QWebPage::action):
+
+2009-01-13 Simon Hausmann <simon.hausmann@nokia.com>
+
+ Reviewed by Tor Arne Vestbø.
+
+ https://bugs.webkit.org/show_bug.cgi?id=23171
+
+ Based on patch by Yael Aharon <yael.aharon@nokia.com>
+
+ Make the QWebSettings functions for setting the path for the local
+ storage database private QtWebkit API, including the ability to
+ associated a QWebPage with a named page group.
+
+ * Api/qwebpage.cpp:
+ (qt_webpage_setGroupName): Added.
+ (qt_webpage_groupName): Added.
+ * Api/qwebpage.h:
+ (ExtensionOption::handle): Added internal helper function.
+ * Api/qwebsettings.cpp:
+ (qt_websettings_setLocalStorageDatabasePath): Made private API.
+ (qt_websettings_localStorageDatabasePath): Made private API.
+ * Api/qwebsettings.h:
+ * tests/qwebpage/tst_qwebpage.cpp:
+ (tst_QWebPage::database): Small cleanup.
+ (tst_QWebPage::multiplePageGroupsAndLocalStorage): New test for the
+ page group handling, written by Yael.
+
+2009-01-12 Tor Arne Vestbø <tavestbo@trolltech.com>
+
+ Reviewed by Simon Hausmann.
+
+ [Qt] Ensure that we're always notified of navigation actions for local anchors
+
+ FrameLoader::checkNavigationPolicy() does not notify us if the request has
+ been checked before (which happens for local anchors), but in the case of
+ our clients not accepting the navigation request we do want to be notified
+ again later on, so we clear the lastCheckedRequest flag.
+
+ * WebCoreSupport/FrameLoaderClientQt.cpp:
+ (WebCore::FrameLoaderClientQt::dispatchDecidePolicyForNewWindowAction):
+ (WebCore::FrameLoaderClientQt::dispatchDecidePolicyForNavigationAction):
+
+2009-01-12 Ariya Hidayat <ariya.hidayat@trolltech.com>
+
+ Rubber-stamped by Tor Arne Vestbø.
+
+ Build fix: use qobject_cast which does not rely on RTTI. This fixes the
+ unit test when building it with a version of Qt (e.g. Qt/Embedded)
+ configured without RTTI.
+
+ * tests/qwebframe/tst_qwebframe.cpp:
+
+2009-01-12 Simon Hausmann <simon.hausmann@nokia.com>
+
+ Rubber-stamped by Tor Arne Vestbø.
+
+ When the QWebView is disabled context menus implemented in JavaScript should not pop up.
+
+ Just like in QWidget::event() we have to check for the disabled state and
+ ignore context menu events.
+
+ * Api/qwebview.cpp:
+
+2009-01-12 Simon Hausmann <simon.hausmann@nokia.com
+
+ Reviewed by Tor Arne Vestbø.
+
+ Fix QWebView appearance when showed uninitialized without page.
+
+ Only set WA_OpaquePaintEvent if we have a page set that will actually
+ paint the entire contents, otherwise the optimization does not apply
+ as we do not have a paintEvent() implementation and Qt has to fill the
+ view with its default background instead.
+
+ * Api/qwebview.cpp:
+ (QWebView::QWebView):
+ (QWebView::setPage):
+
+2009-01-11 Ariya Hidayat <ariya.hidayat@trolltech.com>
+
+ Rubber-stamped by Tor Arne Vestbø.
+
+ Do not create a QVariant from QObject* directly, use the
+ template-specialized function.
+
+ * tests/qwebframe/tst_qwebframe.cpp:
+ (MyQObject::myOverloadedSlot):
+
+2009-01-09 Simon Hausmann <simon.hausmann@nokia.com>
+
+ Rubber-stamped by Tor Arne Vestbø.
+
+ Documentation fixes, remove duplicated docs, document missing
+ parameters and return values.
+
+ * Api/qwebdatabase.cpp:
+ * Api/qwebpage.cpp:
+
+2009-01-09 Simon Hausmann <simon.hausmann@nokia.com>
+
+ Reviewed by Tor Arne Vestbø.
+
+ Fix linking against QtWebKit on Windows, by defining the EXPORT macros
+ _exactly_ the same way as in qglobal.h, depending on QT_NODLL,
+ QT_MAKEDLL and QT_SHARED.
+
+ * Api/qwebkitglobal.h:
+
+2009-01-09 Simon Hausmann <simon.hausmann@nokia.com>
+
+ Reviewed by Tor Arne Vestbø.
+
+ Remove qwebnetworkinterface.h from WEBKIT_API_HEADERS as it's not
+ public Qt 4.4/4.5 API.
+
+ * Api/headers.pri:
+
+2009-01-09 Simon Hausmann <simon.hausmann@nokia.com>
+
+ Unreviewed Qt build fix, remove qcookiejar.h from the API headers and
+ therefore HEADERS. It's not part of the API and it moc shouldn't be
+ called on it.
+
+ * Api/headers.pri:
+
+2009-01-09 Simon Hausmann <simon.hausmann@nokia.com>
+
+ Rubber-stamped by Tor Arne Vestbø.
+
+ Remove files not present anymore from the WEBKIT_API_HEADERS variable.
+
+ * Api/headers.pri:
+
+2009-01-08 Adam Treat <adam.treat@torchmobile.com>
+
+ Reviewed by Simon Hausmann.
+
+ Don't set the minimumFontSize and minimumLogicalFontSize as these are
+ just for accessibility and should be left up to the client application.
+
+ * Api/qwebsettings.cpp:
+ (QWebSettings::QWebSettings):
+
+2009-01-08 Kavindra Palaraja <kdpalara@trolltech.com>
+
+ Reviewed by Simon Hausmann.
+
+ Small fixes to the API documentation, missing 4.5 tags and
+ undocumented parameters.
+
+ * Api/qwebhistory.cpp:
+ * Api/qwebpage.cpp:
+ * Api/qwebsettings.cpp:
+
+2009-01-07 Adam Treat <adam.treat@torchmobile.com>
+
+ Reviewed by George Staikos.
+
+ Add Qt API to QWebHitTestResult::isScrollBar method
+
+ * Api/qwebframe.cpp:
+ (QWebHitTestResultPrivate::QWebHitTestResultPrivate):
+ (QWebHitTestResult::isScrollBar):
+ * Api/qwebframe.h:
+ * Api/qwebframe_p.h:
+ (QWebHitTestResultPrivate::QWebHitTestResultPrivate):
+
+2009-01-07 Adam Treat <adam.treat@torchmobile.com>
+
+ Reviewed by George Staikos.
+
+ Add Qt API for QWebFrame::scrollBarGeometry method
+
+ * Api/qwebframe.cpp:
+ (QWebFrame::scrollBarGeometry):
+ * Api/qwebframe.h:
+
+2009-01-07 Adam Treat <adam.treat@torchmobile.com>
+
+ Reviewed by George Staikos.
+
+ Fix unused variable warnings
+
+ * tests/qwebpage/tst_qwebpage.cpp:
+ (TestPage::createWindow):
+
+2009-01-07 Ariya Hidayat <ariya.hidayat@trolltech.com>
+
+ Rubber-stamped by Simon Hausmann.
+
+ Qt build fix after r39670.
+
+ * Api/qwebframe.cpp:
+ (QWebFrame::evaluateJavaScript):
+
+2009-01-06 Ariya Hidayat <ariya.hidayat@trolltech.com>
+
+ Reviewed by Holger Freyther.
+
+ Allow building QtWebKit statically (within Qt).
+
+ http://trolltech.com/developer/task-tracker/index_html?id=211273&method=entry
+
+ * Api/qwebkitglobal.h:
+
+2009-01-06 Adam Treat <adam.treat@torchmobile.com>
+
+ Reviewed by Simon Hausmann.
+
+ Update the documentation to reflect when these API changes will land in
+ upstream Qt
+
+ * Api/qwebframe.cpp:
+ * Api/qwebpage.cpp:
+
+2009-01-05 Adam Treat <adam.treat@torchmobile.com>
+
+ Reviewed by George Staikos.
+
+ Add Qt API for QWebFrame::contentsSizeChanged signal
+
+ * Api/qwebframe.cpp:
+ * Api/qwebframe.h:
+ * WebCoreSupport/ChromeClientQt.cpp:
+ (WebCore::ChromeClientQt::contentsSizeChanged):
+ * WebCoreSupport/ChromeClientQt.h:
+
+2009-01-05 Adam Treat <adam.treat@torchmobile.com>
+
+ Reviewed by George Staikos.
+
+ Fixes QWebFrame::setScrollBarPolicy(..) to actually work. Also happens
+ to fix 192 layout tests that were previously failing for Qt.
+
+ * Api/qwebframe.cpp:
+ (QWebFrame::setScrollBarPolicy):
+ * WebCoreSupport/FrameLoaderClientQt.cpp:
+ (WebCore::FrameLoaderClientQt::transitionToCommittedForNewPage):
+
+2009-01-04 Adam Treat <adam.treat@torchmobile.com>
+
+ Reviewed by George Staikos.
+
+ Add new API to QWebHitTestResult to return a rect for the smallest enclosing
+ block element of the hit test
+
+ * Api/qwebframe.cpp:
+ (QWebHitTestResultPrivate::QWebHitTestResultPrivate):
+ (QWebHitTestResult::enclosingBlock):
+ * Api/qwebframe.h:
+ * Api/qwebframe_p.h:
+
+2008-12-30 Adam Treat <adam.treat@torchmobile.com>
+
+ Reviewed by George Staikos.
+
+ Make the qt port build and work with the new fixedLayoutSize feature
+
+ * Api/qwebpage.cpp:
+ (QWebPagePrivate::QWebPagePrivate):
+ (QWebPage::fixedLayoutSize):
+ (QWebPage::setFixedLayoutSize):
+ (QWebPage::useFixedLayout):
+ (QWebPage::setUseFixedLayout):
+ * Api/qwebpage.h:
+ * Api/qwebpage_p.h:
+ * WebCoreSupport/FrameLoaderClientQt.cpp:
+ (WebCore::FrameLoaderClientQt::transitionToCommittedForNewPage):
+
+2008-12-19 Jade Han <jade.han@nokia.com>
+
+ Reviewed by Tor Arne Vestbø.
+
+ [Qt] Allow conversion of JavaScript Number and Boolean types to Qt types
+
+ https://bugs.webkit.org/show_bug.cgi?id=22880
+
+ * tests/qwebframe/tst_qwebframe.cpp:
+ (MyQObject::myInvokableWithBoolArg):
+
+2008-12-18 Yael Aharon <yael.aharon@nokia.com>
+
+ Reviewed by Tor Arne Vestbø.
+
+ When Web Inspector is launched without an associated node,
+ call show() instead of inspect().
+
+ * Api/qwebpage.cpp:
+ (QWebPage::triggerAction):
+
+2008-12-18 Dan Bernstein <mitz@apple.com>
+
+ Reviewed by Sam Weinig.
+
+ - stub out FrameLoaderClient::shouldUseCredentialStorage().
+
+ * WebCoreSupport/FrameLoaderClientQt.cpp:
+ (WebCore::FrameLoaderClientQt::shouldUseCredentialStorage):
+ * WebCoreSupport/FrameLoaderClientQt.h:
+
+2008-12-18 Sam Weinig <sam@webkit.org>
+
+ Reviewed by John Sullivan.
+
+ Stub out FrameLoaderClient::dispatchDidFirstVisuallyNonEmptyLayout()
+
+ * WebCoreSupport/FrameLoaderClientQt.cpp:
+ (WebCore::FrameLoaderClientQt::dispatchDidFirstVisuallyNonEmptyLayout):
+ * WebCoreSupport/FrameLoaderClientQt.h:
+
+2008-12-16 Simon Hausmann <hausmann@webkit.org>
+
+ Reviewed by Holger Freyther.
+
+ Added support for unload event counting to the Qt DRT.
+
+ * Api/qwebpage.cpp:
+ (qt_drt_run): Moved function here.
+ * Api/qwebpage_p.h: Moved drt run boolean here.
+ * WebCoreSupport/EditorClientQt.cpp: Moved drt run boolean.
+ (WebCore::EditorClientQt::shouldShowDeleteInterface): Use the new drt
+ run variable.
+ * WebCoreSupport/FrameLoaderClientQt.cpp:
+ (WebCore::FrameLoaderClientQt::dispatchDidFinishDocumentLoad): Add DRT
+ output for unload event handler counting.
+
+2008-12-15 Holger Hans Peter Freyther <zecke@selfish.org>
+
+ Reviewed by Simon Hausmann.
+
+ Change the order of sub frame initialisation to avoid crashes
+
+ Add the newly created frame to the FrameTree before calling
+ WebCore::Frame::init to not segfault on
+ LayoutTests/fast/loader/frame-creation-removal.html.
+
+ * Api/qwebframe.cpp:
+ (QWebFramePrivate::init):
+ * WebCoreSupport/FrameLoaderClientQt.cpp:
+ (WebCore::FrameLoaderClientQt::createFrame):
+
+2008-12-15 Simon Hausmann <hausmann@webkit.org>
+
+ Reviewed by Holger Freyther.
+
+ Implement setJavaScriptProfilingEnabled in the Qt DRT to pass fast/profiler.
+
+ * Api/qwebframe.cpp:
+ (qt_drt_setJavaScriptProfilingEnabled):
+
+2008-12-12 Simon Hausmann <hausmann@webkit.org>
+
+ Reviewed by Tor Arne Vestbø.
+
+ Fix pressing return/enter not triggering any action on web sites
+ that define event handlers, such as the JS console in the web
+ inspector.
+
+ Process the key events in the DOM first and if not handled map them
+ to editor actions.
+
+ * Api/qwebpage.cpp:
+ (QWebPagePrivate::editorActionForKeyEvent): Made a class method.
+ (QWebPagePrivate::keyPressEvent): Pass the key event first to the DOM.
+ * WebCoreSupport/EditorClientQt.cpp:
+ (WebCore::EditorClientQt::handleKeyboardEvent): Map the key event to
+ actions and trigger them.
+
+2008-12-12 Ariya Hidayat <ariya.hidayat@trolltech.com>
+
+ Reviewed by Simon Hausmann.
+
+ Create the plugin widget even though the web page has no associated
+ view. This prevents the plugin to be uselessly constructed more than once.
+
+ * WebCoreSupport/FrameLoaderClientQt.cpp:
+ (WebCore::FrameLoaderClientQt::createPlugin):
+ * tests/qwebpage/tst_qwebpage.cpp:
+ (tst_QWebPage::createViewlessPlugin):
+
+2008-12-11 Enrico Ros <enrico.ros@m31.com>
+
+ Reviewed by Simon Hausmann.
+
+ Fix the broken focus behavior that happened when QWebPage lost
+ focus to a popup menu.
+
+ The previous code didn't notify the QWebPage at all when the
+ focus was back in (breaking focus rects, caret blinking, ...).
+ By the way when a popup is show, 2 FocusOut events are delivered
+ to the QWebPage, but this doesn't seem to hurt.
+
+ Added a test to check popup opening, closing a lineedit blinks.
+
+ * Api/qwebpage.cpp:
+ (QWebPagePrivate::focusInEvent):
+ (QWebPagePrivate::focusOutEvent):
+ * tests/qwebframe/tst_qwebframe.cpp:
+ (tst_QWebFrame::):
+
+2008-12-11 Ariya Hidayat <ariya.hidayat@trolltech.com>
+
+ Reviewed by Tor Arne Vestbø.
+
+ When the web page is navigated away, delete the instance
+ of the native plugin.
+
+ http://trolltech.com/developer/task-tracker/index_html?id=214946&method=entry
+
+ * WebCoreSupport/FrameLoaderClientQt.cpp:
+ (WebCore::):
+ * tests/qwebpage/tst_qwebpage.cpp:
+ (PluginTrackedPage::PluginTrackedPage):
+ (PluginTrackedPage::createPlugin):
+ (tst_QWebPage::destroyPlugin):
+
+2008-12-11 Yael Aharon <yael.aharon@nokia.com>
+
+ Reviewed by Simon Hausmann.
+
+ Allow applications to save and restore their state between loads.
+
+ * Api/qwebframe.cpp:
+ * Api/qwebframe.h:
+ * WebCoreSupport/FrameLoaderClientQt.cpp:
+ (WebCore::FrameLoaderClientQt::restoreViewState):
+ (WebCore::FrameLoaderClientQt::saveViewStateToItem):
+ * tests/qwebpage/tst_qwebpage.cpp:
+ (tst_QWebPage::modified):
+
+2008-12-08 Tor Arne Vestbø <tavestbo@trolltech.com>
+
+ Reviewed by Darin Adler and Holger Freyther.
+
+ Make Widget::frameRectsChanged() and overrides non-const
+
+ This will hopefully allow us to get rid of some of the mutables in
+ the classes that react to the callback by changing their own state.
+
+ * WebCoreSupport/FrameLoaderClientQt.cpp:
+ (WebCore::):
+
+2008-12-10 Holger Hans Peter Freyther <zecke@selfish.org>
+
+ Reviewed by Simon Hausmann.
+
+ API changes discussed with Simon Hausmann, Tor Arne
+ Vestbø, Ariya Hidayat...
+
+ * Api/qwebdatabase.cpp:
+ (QWebDatabase::fileName):
+ (QWebDatabase::removeDatabase):
+ * Api/qwebdatabase.h:
+ * Api/qwebframe.cpp:
+ (QWebFrame::scroll):
+ (QWebFrame::scrollPosition):
+ (QWebFrame::setScrollPosition):
+ * Api/qwebframe.h:
+ * Api/qwebpage.cpp:
+ (QWebPage::setContentEditable):
+ (QWebPage::isContentEditable):
+ (QWebPage::extension):
+ * Api/qwebpage.h:
+ * Api/qwebsecurityorigin.cpp:
+ * Api/qwebsettings.cpp:
+ (QWebSettingsPrivate::apply):
+ (QWebSettings::QWebSettings):
+ * Api/qwebsettings.h:
+ * QtLauncher/main.cpp:
+ (MainWindow::setEditable):
+ * WebCoreSupport/ChromeClientQt.cpp:
+ (WebCore::ChromeClientQt::exceededDatabaseQuota):
+ (WebCore::ChromeClientQt::runOpenPanel):
+ * WebCoreSupport/EditorClientQt.cpp:
+ (WebCore::EditorClientQt::isEditable):
+ * tests/qwebpage/tst_qwebpage.cpp:
+ (tst_QWebPage::database):
+
+2008-12-09 Balazs Kelemen <Kelemen.Balazs.3@stud.u-szeged.hu>
+
+ Reviewed by Simon Hausmann.
+
+ Extended QtLauncher so now it can load pages from an url list
+ one by one. This can be useful for testing purposes (eq. leak hunting).
+ The -r option activates this feature.
+
+ https://bugs.webkit.org/show_bug.cgi?id=20932
+
+ * QtLauncher/main.cpp:
+ (MainWindow::webPage):
+ Just a coding style repairing (* written with no space between the return type name)
+ (MainWindow::webView):
+ I need the webView to connect it with the URLLoader object.
+ (URLLoader::URLLoader):
+ (URLLoader::loadNext):
+ (URLLoader::init):
+ (URLLoader::getUrl):
+ (main):
+
+2008-12-10 Simon Hausmann <hausmann@webkit.org>
+
+ Fix the Qt build, added const to Node* parameter after change
+ in signature.
+
+ * WebCoreSupport/ChromeClientQt.h:
+ (WebCore::ChromeClientQt::formStateDidChange):
+
+2008-12-09 Brett Wilson <brettw@chromium.org>
+
+ Reviewed by Dave Hyatt.
+
+ https://bugs.webkit.org/show_bug.cgi?id=22177
+
+ Add a callback on ChromeClient that the state of form elements on
+ the page has changed. This is to allow clients implementing session
+ saving to know when the current state is dirty.
+
+ * WebCoreSupport/ChromeClientQt.h:
+ (WebCore::ChromeClientQt::formStateDidChange):
+
+2008-12-09 Ariya Hidayat <ariya.hidayat@trolltech.com>
+
+ Reviewed by Simon Hausmann.
+
+ Fix the documentation of the localStorageDatabasePath setters/getters.
+
+ * Api/qwebsettings.cpp:
+
+2008-12-08 Ariya Hidayat <ariya.hidayat@trolltech.com>
+
+ Reviewed by Simon Hausmann.
+
+ Multiple files support for the file chooser.
+
+ * Api/qwebpage.cpp:
+ (QWebPage::chooseFiles):
+ * Api/qwebpage.h:
+ * WebCoreSupport/ChromeClientQt.cpp:
+ (WebCore::ChromeClientQt::runOpenPanel):
+
+2008-12-06 Simon Fraser <simon.fraser@apple.com>
+
+ Reviewed by Dave Hyatt
+
+ https://bugs.webkit.org/show_bug.cgi?id=15671
+
+ Renderer::caretRect() is now localCaretRect(), which needs
+ converting to absolute coordinates (taking transforms into account).
+
+ * Api/qwebpage.cpp:
+ (QWebPage::inputMethodQuery):
+
+2008-12-03 Tor Arne Vestbø <tavestbo@trolltech.com>
+
+ Reviewed by Simon Hausmann.
+
+ Allow passing jsNull and jsUndefined to Qt plugins
+
+ Currently limited to functions with QString and QVariant arguments,
+ and properties of these types. Both jsNull and jsUndefined ends up
+ as default-constructed QStrings and QVariants, which means you can
+ check for isEmpty() and isValid() in the native plugin code.
+
+ Based on patches by Jade Han <jade.han@nokia.com>
+
+ * tests/qwebframe/tst_qwebframe.cpp:
+
+2008-12-02 Simon Hausmann <hausmann@webkit.org>
+
+ Rubber-stamped by Tor Arne Vestbø.
+
+ Initial API documentation for QWebDatabase, QWebSecurityOrigin and
+ QWebFrame::securityOrigin().
+
+ * Api/qwebdatabase.cpp:
+ * Api/qwebframe.cpp:
+ * Api/qwebsecurityorigin.cpp:
+
+2008-11-27 Kent Hansen <khansen@trolltech.com>
+
+ Reviewed by Simon Hausmann.
+
+ Added auto tests for making JavaScript bindings for Qt plugin widgets
+ work again.
+
+ * tests/qwebpage/tst_qwebpage.cpp:
+ (PluginPage::PluginPage):
+ (PluginPage::CallInfo::CallInfo):
+ (PluginPage::createPlugin):
+ (tst_QWebPage::createPlugin):
+
+2008-11-25 Holger Hans Peter Freyther <zecke@selfish.org>
+
+ Build fix. Use WebCore::Frame::loader instead of QWebFrame
+
+ * WebCoreSupport/FrameLoaderClientQt.cpp:
+ (WebCore::FrameLoaderClientQt::updateGlobalHistory):
+
+2008-11-24 Darin Fisher <darin@chromium.org>
+
+ Fix bustage.
+
+ http://bugs.webkit.org/show_bug.cgi?id=15643
+
+ * WebCoreSupport/EditorClientQt.cpp:
+ (WebCore::EditorClientQt::isSelectTrailingWhitespaceEnabled):
+ * WebCoreSupport/EditorClientQt.h:
+
+2008-11-24 Darin Adler <darin@apple.com>
+
+ Reviewed by Dan Bernstein.
+
+ - https://bugs.webkit.org/show_bug.cgi?id=22470
+ remove unneeded URL argument from FrameLoaderClient::updateGlobalHistory
+
+ * WebCoreSupport/FrameLoaderClientQt.cpp:
+ (WebCore::FrameLoaderClientQt::updateGlobalHistory): Get the URL from the
+ DocumentLoader.
+ * WebCoreSupport/FrameLoaderClientQt.h: Remove argument.
+
+2008-11-24 Darin Fisher <darin@chromium.org>
+
+ Fix bustage.
+
+ https://bugs.webkit.org/show_bug.cgi?id=22448
+
+ * Api/qwebframe.cpp:
+ (QWebFrame::evaluateJavaScript):
+
+2008-11-20 Sam Weinig <sam@webkit.org>
+
+ Fix Qt build.
+
+ * Api/qwebframe.cpp:
+ (QWebFrame::evaluateJavaScript):
+
+2008-11-19 Darin Fisher <darin@chromium.org>
+
+ Fix bustage.
+
+ https://bugs.webkit.org/show_bug.cgi?id=22373
+ Ports busted by addition of ScriptValue.{h,cpp}
+
+ * Api/qwebframe.cpp:
+ (QWebFrame::evaluateJavaScript):
+
+2008-11-19 Darin Fisher <darin@chromium.org>
+
+ Fix bustage.
+
+ https://bugs.webkit.org/show_bug.cgi?id=22373
+ Ports busted by addition of ScriptValue.{h,cpp}
+
+ * Api/qwebframe.cpp:
+
+2008-11-19 Simon Hausmann <hausmann@webkit.org>
+
+ Fix the Qt build, remove file referenced in the qrc file that does not
+ exist and is not needed.
+
+ * tests/qwebframe/qwebframe.qrc:
+
+2008-11-18 Ariya Hidayat <ariya.hidayat@trolltech.com>
+
+ Rubber-stamped by Tor Arne Vestbø.
+
+ Missing file in new unit test for QWebFrame (r38493).
+
+ * tests/qwebframe/qwebframe.pro:
+ * tests/qwebframe/qwebframe.qrc: Added.
+
+2008-11-18 Tor Arne Vestbø <tavestbo@trolltech.com>
+
+ Rubber-stamped by Simon Hausmann.
+
+ Make sure QWidget based plugins are invisible until placed into the layout
+
+ * WebCoreSupport/FrameLoaderClientQt.cpp:
+ (WebCore::FrameLoaderClientQt::createPlugin):
+
+2008-11-18 Tor Arne Vestbø <tavestbo@trolltech.com>
+
+ Reviewed by Simon Hausmann.
+
+ React properly to frame rect changes for QWidget based plugins
+
+ We now set the geometry of the QWidget in frameRectsChanged,
+ intead of setFrameRect, which means we pick up the changes to
+ the frame rect when scrolling. We also set a mask on the
+ widget to keep it from painting over scrollbars and the like
+
+ * WebCoreSupport/FrameLoaderClientQt.cpp:
+ (WebCore::):
+
+2008-11-18 Ariya Hidayat <ariya.hidayat@trolltech.com>
+
+ Reviewed by Tor Arne Vestbø.
+
+ Fix crash when trying to pick a file using the file chooser.
+
+ * WebCoreSupport/ChromeClientQt.cpp:
+ (WebCore::ChromeClientQt::runOpenPanel):
+
+2008-11-18 Holger Hans Peter Freyther <zecke@selfish.org>
+
+ Reviewed by Simon Hausmann.
+
+ Attempt to share transitionToCommittedForNewPage of FrameLoaderClient with the different ports
+
+ After Hyatt's work on Widget and ScrollView there is little difference
+ between the implementation of Qt, Gtk+ and Win. In fact any kind of
+ difference is mostly a bug. Alp has fixed two of such errors for the Gtk+
+ port and the Qt port has at least one of them left.
+
+ The only difference between the implementations is in getting the the
+ IntSize for the new FrameView, the background color to be applied and
+ eventually some post processing.
+
+ Unify the implementations by providing a static helper function that
+ takes a Frame, IntSize, color and transparency bit and calling it from
+ the Gtk+, the Qt and the Windows port.
+
+ * Api/qwebframe.cpp:
+ * Api/qwebframe_p.h:
+ * Api/qwebpage.cpp:
+ (QWebPage::setPalette):
+ * WebCoreSupport/FrameLoaderClientQt.cpp:
+ (WebCore::FrameLoaderClientQt::transitionToCommittedForNewPage):
+
+2008-11-17 Geoffrey Garen <ggaren@apple.com>
+
+ Not reviewed.
+
+ Try to fix qt build.
+
+ * Api/qwebframe.cpp:
+
+2008-11-17 Ariya Hidayat <ariya.hidayat@trolltech.com>
+
+ Reviewed by Tor Arne Vestbø and Simon Hausmann.
+
+ Fix regression when loading resources from Qt resource system using qrc:/.
+
+ Added a unit test to catch future regression.
+
+ * Api/qwebpage.cpp:
+ (QWebPagePrivate::QWebPagePrivate):
+ * tests/qwebframe/image.png: Added.
+ * tests/qwebframe/tst_qwebframe.cpp:
+
+2008-11-16 Darin Adler <darin@apple.com>
+
+ - try to fix build
+
+ * Api/qwebhistory.cpp: Added include of "KURL.h".
+
+2008-10-24 Yael Aharon <yael.aharon@nokia.com>
+
+ Reviewed by Simon Hausmann.
+
+ Added some basic unit tests for the public database API.
+
+ * tests/qwebpage/tst_qwebpage.cpp:
+ (tst_QWebPage::initTestCase):
+ (tst_QWebPage::cleanupTestCase):
+ (tst_QWebPage::database):
+
+2008-11-14 Simon Hausmann <hausmann@webkit.org>
+
+ Fix the Qt build, add missing export macros for the new classes.
+
+ * Api/qwebdatabase.h:
+ * Api/qwebsecurityorigin.h:
+
+2008-10-24 Yael Aharon <yael.aharon@nokia.com>
+
+ Reviewed by Simon Hausmann.
+
+ Adding public API to provide access to the security origin
+ (QWebSecurityOrigin) and the databases used for the offline
+ storage (QWebDatabase).
+
+ In addition QWebSettings gains configuration functions for
+ enabling/disabling offline storage, web application cache
+ and DOM local storage.
+
+ This commits lands the core feature(s), the unit tests and the
+ documentation are going to follow in the comming days/weeks.
+
+ Note: The API is not frozen yet.
+
+ * Api/headers.pri:
+ * Api/qwebdatabase.cpp: Added.
+ (QWebDatabase::QWebDatabase):
+ (QWebDatabase::operator=):
+ (QWebDatabase::name):
+ (QWebDatabase::displayName):
+ (QWebDatabase::expectedSize):
+ (QWebDatabase::size):
+ (QWebDatabase::absoluteFilePath):
+ (QWebDatabase::origin):
+ (QWebDatabase::remove):
+ (QWebDatabase::~QWebDatabase):
+ * Api/qwebdatabase.h: Added.
+ * Api/qwebdatabase_p.h: Added.
+ * Api/qwebframe.cpp:
+ (QWebFrame::securityOrigin):
+ * Api/qwebframe.h:
+ * Api/qwebpage.cpp:
+ * Api/qwebpage.h:
+ * Api/qwebsecurityorigin.cpp: Added.
+ (QWebSecurityOrigin::QWebSecurityOrigin):
+ (QWebSecurityOrigin::operator=):
+ (QWebSecurityOrigin::scheme):
+ (QWebSecurityOrigin::host):
+ (QWebSecurityOrigin::port):
+ (QWebSecurityOrigin::databaseUsage):
+ (QWebSecurityOrigin::databaseQuota):
+ (QWebSecurityOrigin::setDatabaseQuota):
+ (QWebSecurityOrigin::~QWebSecurityOrigin):
+ (QWebSecurityOrigin::allOrigins):
+ (QWebSecurityOrigin::databases):
+ * Api/qwebsecurityorigin.h: Added.
+ * Api/qwebsecurityorigin_p.h: Added.
+ (QWebSecurityOriginPrivate::QWebSecurityOriginPrivate):
+ (QWebSecurityOriginPrivate::~QWebSecurityOriginPrivate):
+ * Api/qwebsettings.cpp:
+ (QWebSettingsPrivate::apply):
+ (QWebSettings::QWebSettings):
+ (QWebSettings::setOfflineStoragePath):
+ (QWebSettings::offlineStoragePath):
+ (QWebSettings::setOfflineStorageDefaultQuota):
+ (QWebSettings::offlineStorageDefaultQuota):
+ (QWebSettings::setOfflineWebApplicationCachePath):
+ (QWebSettings::offlineWebApplicationCachePath):
+ (QWebSettings::setLocalStorageDatabasePath):
+ (QWebSettings::localStorageDatabasePath):
+ * Api/qwebsettings.h:
+ * WebCoreSupport/ChromeClientQt.cpp:
+ (WebCore::ChromeClientQt::exceededDatabaseQuota):
+
+2008-11-12 Ariya Hidayat <ariya.hidayat@trolltech.com>
+
+ Rubber-stamped by Tor Arne Vestbø.
+
+ Mention the color role change (r38331) in the API doc.
+
+ * Api/qwebpage.cpp:
+
+2008-11-11 Ariya Hidayat <ariya.hidayat@trolltech.com>
+
+ Reviewed by Tor Arne Vestbø and Simon Hausmann.
+
+ Use QPalette::Base (instead of QPalette::Background) for the page
+ background.
+
+ * Api/qwebframe.cpp:
+ (QWebFramePrivate::updateBackground):
+ * Api/qwebview.cpp:
+ (QWebView::QWebView):
+
+2008-11-11 Cameron Zwarich <zwarich@apple.com>
+
+ Reviewed by Geoff Garen.
+
+ Remove pointless dependencies on the now-deleted kjs directory.
+
+ * WebKit_pch.h:
+
+2008-11-10 Ariya Hidayat <ariya.hidayat@trolltech.com>
+
+ Rubber-stamped by Simon Hausmann.
+
+ To fit Qt API, scroll offset is a QPoint instead of a QSize.
+
+ * Api/qwebframe.cpp:
+ (QWebFrame::scrollOffset):
+ (QWebFrame::setScrollOffset):
+ * Api/qwebframe.h:
+
+2008-11-10 David Boddie <dboddie@trolltech.com>
+
+ Reviewed by Simon Hausmann.
+
+ Doc: Fixed qdoc warnings by supplying function documentation.
+
+ * Api/qwebframe.cpp:
+ * Api/qwebview.cpp:
+
+2008-11-10 Tobias Koenig <tobias.koenig@trolltech.com>
+
+ Reviewed by Simon Hausmann.
+
+ Removed old and stale prf file that breaks the MingW build.
+
+ * Api/qtwebkit.prf: Removed.
+
+2008-11-10 Kavindra Palaraja <kdpalara@trolltech.com>
+
+ Reviewed by Simon Hausmann.
+
+ Clarify QWebFrame/View::setHTML docs with regards to relative URLs
+
+ * Api/qwebframe.cpp:
+ * Api/qwebview.cpp:
+
+2008-11-10 Joerg Bornemann <joerg.bornemann@nokia.com>
+
+ Reviewed by Simon Hausmann
+
+ Don't define _CRT_RAND_S on Windows CE in the precompiled
+ header, to fix the CE build.
+
+ * WebKit_pch.h:
+
+2008-11-07 Ariya Hidayat <ariya.hidayat@trolltech.com>
+
+ Reviewed by Tor Arne Vestbø and Simon Hausmann.
+
+ Added an option to allow printing the background color and images.
+ Mostly reworked from a patch by Holger.
+ This setting is enabled by default.
+
+ * Api/qwebsettings.cpp:
+ (QWebSettingsPrivate::apply):
+ (QWebSettings::QWebSettings):
+ * Api/qwebsettings.h:
+
+2008-11-06 Simon Hausmann <hausmann@webkit.org>
+
+ Reviewed by Tor Arne Vestbø.
+
+ Added a unit tests for QWebFrame::metaData().
+
+ * tests/qwebframe/tst_qwebframe.cpp:
+
+2008-11-06 Simon Hausmann <hausmann@webkit.org>
+
+ Reviewed by Tor Arne Vestbø.
+
+ Improved documentation for QWebFrame::metaData().
+
+ * Api/qwebframe.cpp:
+
+2008-11-05 Sriram Yadavalli <sriram.yadavalli@nokia.com>
+
+ Reviewed by Simon Hausmann.
+
+ Added QWebFrame::metaData() to provide a way in the public API
+ to retrieve the values of the <meta> tags.
+
+ See https://bugs.webkit.org/show_bug.cgi?id=22071
+
+ * Api/qwebframe.cpp:
+ (QWebFrame::metaData):
+ * Api/qwebframe.h:
+
2008-10-24 Yael Aharon <yael.aharon@nokia.com>
Reviewed by Simon Hausmann.
@@ -3686,7 +4993,7 @@
* Api/qwebhistoryinterface.h:
-2008-01-21 Adam Treat <treat@kde.org>
+2008-01-21 Adam Treat <adam.treat@torchmobile.com>
Reviewed by Simon.
@@ -5057,7 +6364,7 @@
* Api/qwebframe.cpp:
(QWebFramePrivate::init):
-2007-11-21 Adam Treat <treat@kde.org>
+2007-11-21 Adam Treat <adam.treat@torchmobile.com>
Reviewed by Simon.
@@ -5070,7 +6377,7 @@
2007-11-20 Simon Hausmann <hausmann@kde.org>
- Reviewed by Adam Treat <treat@kde.org>.
+ Reviewed by Adam Treat <adam.treat@torchmobile.com>.
Remove static linkage of QtWebKit against the ICO image format plugin.
@@ -5101,7 +6408,7 @@
(QWebPage::mouseMoveEvent):
* Api/qwebpage.h:
-2007-11-20 Adam Treat <treat@kde.org>
+2007-11-20 Adam Treat <adam.treat@torchmobile.com>
Reviewed by Simon and George.
@@ -5110,7 +6417,7 @@
* WebCoreSupport/FrameLoaderClientQt.cpp:
(WebCore::FrameLoaderClientQt::representationExistsForURLScheme):
-2007-11-19 Adam Treat <treat@kde.org>
+2007-11-19 Adam Treat <adam.treat@torchmobile.com>
Reviewed by Simon.
@@ -6861,7 +8168,7 @@
* WebKitPart/WebKitPartInterface.h: Renamed from WebKitQt/WebKitPart/WebKitPartInterface.h.
* WebKitPart/org.kde.WebKitPart.xml: Renamed from WebKitQt/WebKitPart/org.kde.WebKitPart.xml.
-2007-10-02 Adam Treat <treat@kde.org>
+2007-10-02 Adam Treat <adam.treat@torchmobile.com>
Reviewed by Eric Seidel.
@@ -6963,7 +8270,7 @@
* WebCoreSupport/EditCommandQt.cpp:
* WebCoreSupport/EditCommandQt.h:
-2007-09-25 Adam Treat <treat@kde.org>
+2007-09-25 Adam Treat <adam.treat@torchmobile.com>
Reviewed by Simon and Lars.
@@ -7200,7 +8507,7 @@
* WebCoreSupport/FrameLoaderClientQt.cpp:
(WebCore::FrameLoaderClientQt::userAgent):
-2007-08-01 Adam Treat <treat@kde.org>
+2007-08-01 Adam Treat <adam.treat@torchmobile.com>
Reviewed by George Staikos.
@@ -7215,7 +8522,7 @@
(QWebHistoryInterface::QWebHistoryInterface):
* Api/qwebhistoryinterface.h: Added.
-2007-07-30 Adam Treat <treat@kde.org>
+2007-07-30 Adam Treat <adam.treat@torchmobile.com>
Fix build.
@@ -7231,7 +8538,7 @@
* QtLauncher/QtLauncher.pro:
-2007-07-29 Adam Treat <treat@kde.org>
+2007-07-29 Adam Treat <adam.treat@torchmobile.com>
Reviewed by George Staikos.
@@ -7249,7 +8556,7 @@
* WebCoreSupport/ChromeClientQt.cpp:
(WebCore::ChromeClientQt::addToDirtyRegion):
-2007-07-29 Adam Treat <treat@kde.org>
+2007-07-29 Adam Treat <adam.treat@torchmobile.com>
Reviewed by Alexey Proskuryakov.
@@ -7290,7 +8597,7 @@
* Api/qwebpage.h:
* WebCoreSupport/FrameLoaderClientQt.cpp:
-2007-07-24 Adam Treat <treat@kde.org>
+2007-07-24 Adam Treat <adam.treat@torchmobile.com>
Reviewed by Niko and Lars.
@@ -7315,7 +8622,7 @@
(WebCore::FrameLoaderClientQt::dispatchDidFirstLayout):
(WebCore::FrameLoaderClientQt::dispatchDecidePolicyForNavigationAction):
-2007-07-19 Adam Treat <treat@kde.org>
+2007-07-19 Adam Treat <adam.treat@torchmobile.com>
Reviewed by George.
@@ -7360,7 +8667,7 @@
(QWebFrame::horizontalScrollBarPolicy):
* Api/qwebframe.h:
-2007-07-17 Adam Treat <treat@kde.org>
+2007-07-17 Adam Treat <adam.treat@torchmobile.com>
Build fix.
diff --git a/WebKit/qt/QtLauncher/main.cpp b/WebKit/qt/QtLauncher/main.cpp
index 4d57e56..5d9fef6 100644
--- a/WebKit/qt/QtLauncher/main.cpp
+++ b/WebKit/qt/QtLauncher/main.cpp
@@ -42,6 +42,11 @@
#include <QtUiTools/QUiLoader>
+#include <QVector>
+#include <QTextStream>
+#include <QFile>
+#include <cstdio>
+
class WebPage : public QWebPage
{
public:
@@ -83,10 +88,14 @@ public:
}
}
- QWebPage *webPage() const {
+ QWebPage* webPage() const {
return view->page();
}
+ QWebView* webView() const {
+ return view;
+ }
+
protected slots:
void changeLocation() {
@@ -165,7 +174,7 @@ protected slots:
}
void setEditable(bool on) {
- view->page()->setEditable(on);
+ view->page()->setContentEditable(on);
formatMenuAction->setVisible(on);
}
@@ -322,6 +331,69 @@ QObject *WebPage::createPlugin(const QString &classId, const QUrl &url, const QS
return loader.createWidget(classId, view());
}
+class URLLoader : public QObject
+{
+ Q_OBJECT
+public:
+ URLLoader(QWebView* view, const QString& inputFileName)
+ : m_view(view)
+ , m_stdOut(stdout)
+ {
+ init(inputFileName);
+ }
+
+public slots:
+ void loadNext()
+ {
+ QString qstr;
+ if (getUrl(qstr)) {
+ QUrl url(qstr, QUrl::StrictMode);
+ if (url.isValid()) {
+ m_stdOut << "Loading " << qstr << " ......" << endl;
+ m_view->load(url);
+ } else
+ loadNext();
+ } else
+ disconnect(m_view, 0, this, 0);
+ }
+
+private:
+ void init(const QString& inputFileName)
+ {
+ QFile inputFile(inputFileName);
+ if (inputFile.open(QIODevice::ReadOnly | QIODevice::Text)) {
+ QTextStream stream(&inputFile);
+ QString line;
+ while (true) {
+ line = stream.readLine();
+ if (line.isNull())
+ break;
+ m_urls.append(line);
+ }
+ } else {
+ qDebug() << "Cant't open list file";
+ exit(0);
+ }
+ m_index = 0;
+ inputFile.close();
+ }
+
+ bool getUrl(QString& qstr)
+ {
+ if (m_index == m_urls.size())
+ return false;
+
+ qstr = m_urls[m_index++];
+ return true;
+ }
+
+private:
+ QVector<QString> m_urls;
+ int m_index;
+ QWebView* m_view;
+ QTextStream m_stdOut;
+};
+
#include "main.moc"
int main(int argc, char **argv)
@@ -342,12 +414,26 @@ int main(int argc, char **argv)
QWebSettings::globalSettings()->setAttribute(QWebSettings::DeveloperExtrasEnabled, true);
const QStringList args = app.arguments();
- if (args.count() > 1)
- url = args.at(1);
-
- MainWindow window(url);
- window.show();
- return app.exec();
+ // robotized
+ if (args.contains(QLatin1String("-r"))) {
+ QString listFile = args.at(2);
+ if (!(args.count() == 3) && QFile::exists(listFile)) {
+ qDebug() << "Usage: QtLauncher -r listfile";
+ exit(0);
+ }
+ MainWindow window(url);
+ QWebView *view = window.webView();
+ URLLoader loader(view, listFile);
+ QObject::connect(view, SIGNAL(loadFinished(bool)), &loader, SLOT(loadNext()));
+ window.show();
+ return app.exec();
+ } else {
+ if (args.count() > 1)
+ url = args.at(1);
+
+ MainWindow window(url);
+ window.show();
+ return app.exec();
+ }
}
-
diff --git a/WebKit/qt/WebCoreSupport/ChromeClientQt.cpp b/WebKit/qt/WebCoreSupport/ChromeClientQt.cpp
index 8a4de6b..c545769 100644
--- a/WebKit/qt/WebCoreSupport/ChromeClientQt.cpp
+++ b/WebKit/qt/WebCoreSupport/ChromeClientQt.cpp
@@ -37,10 +37,14 @@
#include "HitTestResult.h"
#include "NotImplemented.h"
#include "WindowFeatures.h"
+#include "DatabaseTracker.h"
+#include "SecurityOrigin.h"
#include "qwebpage.h"
#include "qwebpage_p.h"
#include "qwebframe_p.h"
+#include "qwebsecurityorigin.h"
+#include "qwebsecurityorigin_p.h"
#include <qtooltip.h>
@@ -305,8 +309,8 @@ void ChromeClientQt::repaint(const IntRect& windowRect, bool contentChanged, boo
if (view) {
QRect rect(windowRect);
rect = rect.intersected(QRect(QPoint(0, 0), m_webPage->viewportSize()));
- if (!windowRect.isEmpty())
- view->update(windowRect);
+ if (!rect.isEmpty())
+ view->update(rect);
}
emit m_webPage->repaintRequested(windowRect);
}
@@ -340,6 +344,11 @@ PlatformWidget ChromeClientQt::platformWindow() const
return m_webPage->view();
}
+void ChromeClientQt::contentsSizeChanged(Frame* frame, const IntSize& size) const
+{
+ emit QWebFramePrivate::kit(frame)->contentsSizeChanged(size);
+}
+
void ChromeClientQt::mouseDidMoveOverElement(const HitTestResult& result, unsigned modifierFlags)
{
if (result.absoluteLinkURL() != lastHoverURL
@@ -377,20 +386,46 @@ void ChromeClientQt::print(Frame *frame)
emit m_webPage->printRequested(QWebFramePrivate::kit(frame));
}
-void ChromeClientQt::exceededDatabaseQuota(Frame*, const String&)
+void ChromeClientQt::exceededDatabaseQuota(Frame* frame, const String& databaseName)
{
- notImplemented();
+ quint64 quota = QWebSettings::offlineStorageDefaultQuota();
+#if ENABLE(DATABASE)
+ if (!DatabaseTracker::tracker().hasEntryForOrigin(frame->document()->securityOrigin()))
+ DatabaseTracker::tracker().setQuota(frame->document()->securityOrigin(), quota);
+#endif
+ emit m_webPage->databaseQuotaExceeded(QWebFramePrivate::kit(frame), databaseName);
}
void ChromeClientQt::runOpenPanel(Frame* frame, PassRefPtr<FileChooser> prpFileChooser)
{
- // FIXME: Support multiple files.
-
RefPtr<FileChooser> fileChooser = prpFileChooser;
- QString suggestedFile = fileChooser->filenames()[0];
- QString file = m_webPage->chooseFile(QWebFramePrivate::kit(frame), suggestedFile);
- if (!file.isEmpty())
- fileChooser->chooseFile(file);
+ bool supportMulti = m_webPage->supportsExtension(QWebPage::ChooseMultipleFilesExtension);
+
+ if (fileChooser->allowsMultipleFiles() && supportMulti) {
+ QWebPage::ChooseMultipleFilesExtensionOption option;
+ option.parentFrame = QWebFramePrivate::kit(frame);
+
+ if (!fileChooser->filenames().isEmpty())
+ for (int i = 0; i < fileChooser->filenames().size(); ++i)
+ option.suggestedFileNames += fileChooser->filenames()[i];
+
+ QWebPage::ChooseMultipleFilesExtensionReturn output;
+ m_webPage->extension(QWebPage::ChooseMultipleFilesExtension, &option, &output);
+
+ if (!output.fileNames.isEmpty()) {
+ Vector<String> names;
+ for (int i = 0; i < output.fileNames.count(); ++i)
+ names.append(output.fileNames.at(i));
+ fileChooser->chooseFiles(names);
+ }
+ } else {
+ QString suggestedFile;
+ if (!fileChooser->filenames().isEmpty())
+ suggestedFile = fileChooser->filenames()[0];
+ QString file = m_webPage->chooseFile(QWebFramePrivate::kit(frame), suggestedFile);
+ if (!file.isEmpty())
+ fileChooser->chooseFile(file);
+ }
}
}
diff --git a/WebKit/qt/WebCoreSupport/ChromeClientQt.h b/WebKit/qt/WebCoreSupport/ChromeClientQt.h
index 440f29e..a13bb7c 100644
--- a/WebKit/qt/WebCoreSupport/ChromeClientQt.h
+++ b/WebKit/qt/WebCoreSupport/ChromeClientQt.h
@@ -106,6 +106,7 @@ namespace WebCore {
virtual IntPoint screenToWindow(const IntPoint&) const;
virtual IntRect windowToScreen(const IntRect&) const;
virtual PlatformWidget platformWindow() const;
+ virtual void contentsSizeChanged(Frame*, const IntSize&) const;
virtual void mouseDidMoveOverElement(const HitTestResult&, unsigned modifierFlags);
@@ -117,6 +118,8 @@ namespace WebCore {
virtual void runOpenPanel(Frame*, PassRefPtr<FileChooser>);
+ virtual void formStateDidChange(const Node*) { }
+
QWebPage* m_webPage;
WebCore::KURL lastHoverURL;
WebCore::String lastHoverTitle;
diff --git a/WebKit/qt/WebCoreSupport/EditorClientQt.cpp b/WebKit/qt/WebCoreSupport/EditorClientQt.cpp
index a25ff18..a688779 100644
--- a/WebKit/qt/WebCoreSupport/EditorClientQt.cpp
+++ b/WebKit/qt/WebCoreSupport/EditorClientQt.cpp
@@ -1,7 +1,8 @@
/*
* Copyright (C) 2006 Nikolas Zimmermann <zimmermann@kde.org>
* Copyright (C) 2006 Zack Rusin <zack@kde.org>
- * Copyright (C) 2006 Apple Computer, Inc.
+ * Copyright (C) 2006, 2008 Apple Computer, Inc.
+ * Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies)
*
* All rights reserved.
*
@@ -53,16 +54,11 @@
#define methodDebug() qDebug("EditorClientQt: %s", __FUNCTION__);
static bool dumpEditingCallbacks = false;
-static bool drt_run = false;
static bool acceptsEditing = true;
void QWEBKIT_EXPORT qt_dump_editing_callbacks(bool b)
{
dumpEditingCallbacks = b;
}
-void QWEBKIT_EXPORT qt_drt_run(bool b)
-{
- drt_run = b;
-}
void QWEBKIT_EXPORT qt_dump_set_accepts_editing(bool b)
{
@@ -109,7 +105,7 @@ bool EditorClientQt::shouldDeleteRange(Range* range)
bool EditorClientQt::shouldShowDeleteInterface(HTMLElement* element)
{
- if (drt_run)
+ if (QWebPagePrivate::drtRun)
return element->className() == "needsDeletionUI";
return false;
}
@@ -246,7 +242,7 @@ bool EditorClientQt::selectWordBeforeMenuEvent()
bool EditorClientQt::isEditable()
{
- return m_page->isEditable();
+ return m_page->isContentEditable();
}
void EditorClientQt::registerCommandForUndo(WTF::PassRefPtr<WebCore::EditCommand> cmd)
@@ -333,6 +329,12 @@ bool EditorClientQt::smartInsertDeleteEnabled()
return false;
}
+bool EditorClientQt::isSelectTrailingWhitespaceEnabled()
+{
+ notImplemented();
+ return false;
+}
+
void EditorClientQt::toggleContinuousSpellChecking()
{
notImplemented();
@@ -359,6 +361,20 @@ void EditorClientQt::handleKeyboardEvent(KeyboardEvent* event)
// FIXME: refactor all of this to use Actions or something like them
if (start->isContentEditable()) {
+#ifndef QT_NO_SHORTCUT
+ QWebPage::WebAction action = QWebPagePrivate::editorActionForKeyEvent(kevent->qtEvent());
+ if (action != QWebPage::NoWebAction) {
+ const char* cmd = QWebPagePrivate::editorCommandForWebActions(action);
+ // WebKit doesn't have enough information about mode to decide how commands that just insert text if executed via Editor should be treated,
+ // so we leave it upon WebCore to either handle them immediately (e.g. Tab that changes focus) or let a keypress event be generated
+ // (e.g. Tab that inserts a Tab character, or Enter).
+ if (cmd && frame->editor()->command(cmd).isTextInsertion()
+ && kevent->type() == PlatformKeyboardEvent::RawKeyDown)
+ return;
+
+ m_page->triggerAction(action);
+ } else
+#endif // QT_NO_SHORTCUT
switch (kevent->windowsVirtualKeyCode()) {
#if QT_VERSION < 0x040500
case VK_RETURN:
@@ -424,24 +440,9 @@ void EditorClientQt::handleKeyboardEvent(KeyboardEvent* event)
case VK_B:
frame->editor()->command("ToggleBold").execute();
break;
- case VK_C:
- frame->editor()->command("Copy").execute();
- break;
case VK_I:
frame->editor()->command("ToggleItalic").execute();
break;
- case VK_V:
- frame->editor()->command("Paste").execute();
- break;
- case VK_X:
- frame->editor()->command("Cut").execute();
- break;
- case VK_Y:
- frame->editor()->command("Redo").execute();
- break;
- case VK_Z:
- frame->editor()->command("Undo").execute();
- break;
default:
// catch combination AltGr+key or Ctrl+Alt+key
if (kevent->type() != PlatformKeyboardEvent::KeyDown && kevent->altKey() && !kevent->text().isEmpty()) {
@@ -453,6 +454,11 @@ void EditorClientQt::handleKeyboardEvent(KeyboardEvent* event)
} else return;
}
} else {
+#ifndef QT_NO_SHORTCUT
+ if (kevent->qtEvent() == QKeySequence::Copy) {
+ m_page->triggerAction(QWebPage::Copy);
+ } else
+#endif // QT_NO_SHORTCUT
switch (kevent->windowsVirtualKeyCode()) {
case VK_UP:
frame->editor()->command("MoveUp").execute();
@@ -480,9 +486,6 @@ void EditorClientQt::handleKeyboardEvent(KeyboardEvent* event)
case VK_A:
frame->editor()->command("SelectAll").execute();
break;
- case VK_C: case VK_X:
- frame->editor()->command("Copy").execute();
- break;
default:
return;
}
diff --git a/WebKit/qt/WebCoreSupport/EditorClientQt.h b/WebKit/qt/WebCoreSupport/EditorClientQt.h
index 35020b2..b39f02b 100644
--- a/WebKit/qt/WebCoreSupport/EditorClientQt.h
+++ b/WebKit/qt/WebCoreSupport/EditorClientQt.h
@@ -48,6 +48,7 @@ public:
virtual bool shouldDeleteRange(Range*);
virtual bool shouldShowDeleteInterface(HTMLElement*);
virtual bool smartInsertDeleteEnabled();
+ virtual bool isSelectTrailingWhitespaceEnabled();
virtual bool isContinuousSpellCheckingEnabled();
virtual void toggleContinuousSpellChecking();
virtual bool isGrammarCheckingEnabled();
diff --git a/WebKit/qt/WebCoreSupport/FrameLoaderClientQt.cpp b/WebKit/qt/WebCoreSupport/FrameLoaderClientQt.cpp
index 6235ed6..af96201 100644
--- a/WebKit/qt/WebCoreSupport/FrameLoaderClientQt.cpp
+++ b/WebKit/qt/WebCoreSupport/FrameLoaderClientQt.cpp
@@ -3,6 +3,7 @@
* Copyright (C) 2006 Apple Computer, Inc. All rights reserved.
* Copyright (C) 2008 Nokia Corporation and/or its subsidiary(-ies)
* Copyright (C) 2008 Collabora Ltd. All rights reserved.
+ * Coypright (C) 2008 Holger Hans Peter Freyther
*
* All rights reserved.
*
@@ -197,12 +198,12 @@ bool FrameLoaderClientQt::hasWebView() const
return true;
}
-void FrameLoaderClientQt::savePlatformDataToCachedPage(CachedPage*)
+void FrameLoaderClientQt::savePlatformDataToCachedFrame(CachedFrame*)
{
notImplemented();
}
-void FrameLoaderClientQt::transitionToCommittedFromCachedPage(CachedPage*)
+void FrameLoaderClientQt::transitionToCommittedFromCachedFrame(CachedFrame*)
{
}
@@ -211,28 +212,14 @@ void FrameLoaderClientQt::transitionToCommittedForNewPage()
ASSERT(m_frame);
ASSERT(m_webFrame);
- Page* page = m_frame->page();
- ASSERT(page);
-
- bool isMainFrame = m_frame == page->mainFrame();
-
- m_frame->setView(0);
-
- FrameView* frameView;
- if (isMainFrame)
- frameView = new FrameView(m_frame, m_webFrame->page()->viewportSize());
- else
- frameView = new FrameView(m_frame);
-
- m_frame->setView(frameView);
- // FrameViews are created with a ref count of 1. Release this ref since we've assigned it to frame.
- frameView->deref();
-
- if (m_webFrame && m_webFrame->page())
- m_webFrame->d->updateBackground();
-
- if (m_frame->ownerRenderer())
- m_frame->ownerRenderer()->setWidget(frameView);
+ QBrush brush = m_webFrame->page()->palette().brush(QPalette::Base);
+ QColor backgroundColor = brush.style() == Qt::SolidPattern ? brush.color() : QColor();
+ WebCore::FrameLoaderClient::transitionToCommittedForNewPage(m_frame, m_webFrame->page()->viewportSize(),
+ backgroundColor, !backgroundColor.alpha(),
+ m_webFrame->page()->fixedLayoutSize(),
+ m_webFrame->page()->useFixedLayout(),
+ (ScrollbarMode)m_webFrame->scrollBarPolicy(Qt::Horizontal),
+ (ScrollbarMode)m_webFrame->scrollBarPolicy(Qt::Vertical));
}
@@ -370,6 +357,12 @@ void FrameLoaderClientQt::dispatchDidFinishDocumentLoad()
if (dumpFrameLoaderCallbacks)
printf("%s - didFinishDocumentLoadForFrame\n", qPrintable(drtDescriptionSuitableForTestResult(m_frame)));
+ if (QWebPagePrivate::drtRun) {
+ int unloadEventCount = m_frame->eventHandler()->pendingFrameUnloadEventCount();
+ if (unloadEventCount)
+ printf("%s - has %u onunload handler(s)\n", qPrintable(drtDescriptionSuitableForTestResult(m_frame)), unloadEventCount);
+ }
+
if (m_frame->tree()->parent() || !m_webFrame)
return;
@@ -396,6 +389,10 @@ void FrameLoaderClientQt::dispatchDidFirstLayout()
emit m_webFrame->initialLayoutCompleted();
}
+void FrameLoaderClientQt::dispatchDidFirstVisuallyNonEmptyLayout()
+{
+ notImplemented();
+}
void FrameLoaderClientQt::dispatchShow()
{
@@ -541,7 +538,9 @@ void FrameLoaderClientQt::frameLoadCompleted()
void FrameLoaderClientQt::restoreViewState()
{
- notImplemented();
+ if (!m_webFrame)
+ return;
+ emit m_webFrame->page()->restoreFrameStateRequested(m_webFrame);
}
@@ -621,11 +620,15 @@ void FrameLoaderClientQt::registerForIconNotification(bool)
notImplemented();
}
-void FrameLoaderClientQt::updateGlobalHistory(const WebCore::KURL& url)
+void FrameLoaderClientQt::updateGlobalHistory()
{
QWebHistoryInterface *history = QWebHistoryInterface::defaultInterface();
if (history)
- history->addHistoryEntry(url.prettyURL());
+ history->addHistoryEntry(m_frame->loader()->documentLoader()->urlForHistory().prettyURL());
+}
+
+void FrameLoaderClientQt::updateGlobalHistoryForRedirectWithoutHistoryItem()
+{
}
bool FrameLoaderClientQt::shouldGoToHistoryItem(WebCore::HistoryItem *item) const
@@ -636,7 +639,7 @@ bool FrameLoaderClientQt::shouldGoToHistoryItem(WebCore::HistoryItem *item) cons
void FrameLoaderClientQt::saveViewStateToItem(WebCore::HistoryItem* item)
{
QWebHistoryItem historyItem(new QWebHistoryItemPrivate(item));
- emit m_webFrame->aboutToUpdateHistory(&historyItem);
+ emit m_webFrame->page()->saveFrameStateRequested(m_webFrame, &historyItem);
}
bool FrameLoaderClientQt::canCachePage() const
@@ -785,6 +788,13 @@ void FrameLoaderClientQt::dispatchWillSendRequest(WebCore::DocumentLoader*, unsi
//qDebug() << "FrameLoaderClientQt::dispatchWillSendRequest" << request.isNull() << request.url().string`();
}
+bool
+FrameLoaderClientQt::shouldUseCredentialStorage(DocumentLoader*, unsigned long)
+{
+ notImplemented();
+ return false;
+}
+
void FrameLoaderClientQt::dispatchDidReceiveAuthenticationChallenge(DocumentLoader*, unsigned long, const AuthenticationChallenge&)
{
notImplemented();
@@ -881,6 +891,12 @@ void FrameLoaderClientQt::dispatchDecidePolicyForNewWindowAction(FramePolicyFunc
if (!page->d->acceptNavigationRequest(0, r, QWebPage::NavigationType(action.type()))) {
if (action.type() == NavigationTypeFormSubmitted || action.type() == NavigationTypeFormResubmitted)
m_frame->loader()->resetMultipleFormSubmissionProtection();
+
+ if (action.type() == NavigationTypeLinkClicked && r.url().hasFragment()) {
+ ResourceRequest emptyRequest;
+ m_frame->loader()->activeDocumentLoader()->setLastCheckedRequest(emptyRequest);
+ }
+
slotCallPolicyFunction(PolicyIgnore);
return;
}
@@ -902,6 +918,12 @@ void FrameLoaderClientQt::dispatchDecidePolicyForNavigationAction(FramePolicyFun
if (!page->d->acceptNavigationRequest(m_webFrame, r, QWebPage::NavigationType(action.type()))) {
if (action.type() == NavigationTypeFormSubmitted || action.type() == NavigationTypeFormResubmitted)
m_frame->loader()->resetMultipleFormSubmissionProtection();
+
+ if (action.type() == NavigationTypeLinkClicked && r.url().hasFragment()) {
+ ResourceRequest emptyRequest;
+ m_frame->loader()->activeDocumentLoader()->setLastCheckedRequest(emptyRequest);
+ }
+
slotCallPolicyFunction(PolicyIgnore);
return;
}
@@ -944,13 +966,10 @@ PassRefPtr<Frame> FrameLoaderClientQt::createFrame(const KURL& url, const String
RefPtr<Frame> childFrame = adoptRef(webFrame->d->frame);
- // FIXME: All of the below should probably be moved over into WebCore
- childFrame->tree()->setName(name);
- m_frame->tree()->appendChild(childFrame);
// ### set override encoding if we have one
FrameLoadType loadType = m_frame->loader()->loadType();
- FrameLoadType childLoadType = FrameLoadTypeRedirectWithLockedHistory;
+ FrameLoadType childLoadType = FrameLoadTypeRedirectWithLockedBackForwardList;
childFrame->loader()->loadURL(frameData.url, frameData.referrer, String(), childLoadType, 0, 0);
@@ -985,7 +1004,7 @@ ObjectContentType FrameLoaderClientQt::objectContentType(const KURL& url, const
if (PluginDatabase::installedPlugins()->isMIMETypeRegistered(mimeType))
return ObjectContentNetscapePlugin;
- if (m_frame->page() && m_frame->page()->pluginData()->supportsMimeType(mimeType))
+ if (m_frame->page() && m_frame->page()->pluginData() && m_frame->page()->pluginData()->supportsMimeType(mimeType))
return ObjectContentOtherPlugin;
if (MIMETypeRegistry::isSupportedNonImageMIMEType(mimeType))
@@ -1011,11 +1030,34 @@ class QtPluginWidget: public Widget
{
public:
QtPluginWidget(QWidget* w = 0): Widget(w) {}
+ ~QtPluginWidget()
+ {
+ if (platformWidget())
+ platformWidget()->deleteLater();
+ }
virtual void invalidateRect(const IntRect& r)
{
if (platformWidget())
platformWidget()->update(r);
}
+ virtual void frameRectsChanged()
+ {
+ if (!platformWidget())
+ return;
+
+ IntRect windowRect = convertToContainingWindow(IntRect(0, 0, frameRect().width(), frameRect().height()));
+ platformWidget()->setGeometry(windowRect);
+
+ ScrollView* parentScrollView = parent();
+ if (!parentScrollView)
+ return;
+
+ ASSERT(parentScrollView->isFrameView());
+ IntRect clipRect(static_cast<FrameView*>(parentScrollView)->windowClipRect());
+ clipRect.move(-windowRect.x(), -windowRect.y());
+ clipRect.intersect(platformWidget()->rect());
+ platformWidget()->setMask(QRegion(clipRect.x(), clipRect.y(), clipRect.width(), clipRect.height()));
+ }
};
Widget* FrameLoaderClientQt::createPlugin(const IntSize& pluginSize, Element* element, const KURL& url, const Vector<String>& paramNames,
@@ -1042,12 +1084,12 @@ Widget* FrameLoaderClientQt::createPlugin(const IntSize& pluginSize, Element* el
QString urlStr(url.string());
QUrl qurl = urlStr;
- QObject *object = 0;
+ QObject* object = 0;
if (mimeType == "application/x-qt-plugin" || mimeType == "application/x-qt-styled-widget") {
object = m_webFrame->page()->createPlugin(classid, qurl, params, values);
#ifndef QT_NO_STYLE_STYLESHEET
- QWidget *widget = qobject_cast<QWidget *>(object);
+ QWidget* widget = qobject_cast<QWidget*>(object);
if (widget && mimeType == "application/x-qt-styled-widget") {
QString styleSheet = element->getAttribute("style");
@@ -1077,12 +1119,15 @@ Widget* FrameLoaderClientQt::createPlugin(const IntSize& pluginSize, Element* el
#endif
if (object) {
- QWidget *widget = qobject_cast<QWidget *>(object);
- QWidget *view = m_webFrame->page()->view();
- if (widget && view) {
- widget->setParent(view);
- QtPluginWidget* w= new QtPluginWidget();
+ QWidget* widget = qobject_cast<QWidget*>(object);
+ if (widget) {
+ QWidget* view = m_webFrame->page()->view();
+ if (view)
+ widget->setParent(view);
+ QtPluginWidget* w = new QtPluginWidget();
w->setPlatformWidget(widget);
+ // Make sure it's invisible until properly placed into the layout
+ w->setFrameRect(IntRect(0, 0, 0, 0));
return w;
}
// FIXME: make things work for widgetless plugins as well
diff --git a/WebKit/qt/WebCoreSupport/FrameLoaderClientQt.h b/WebKit/qt/WebCoreSupport/FrameLoaderClientQt.h
index 0156412..908d2aa 100644
--- a/WebKit/qt/WebCoreSupport/FrameLoaderClientQt.h
+++ b/WebKit/qt/WebCoreSupport/FrameLoaderClientQt.h
@@ -90,6 +90,7 @@ namespace WebCore {
virtual void assignIdentifierToInitialRequest(unsigned long identifier, WebCore::DocumentLoader*, const WebCore::ResourceRequest&);
virtual void dispatchWillSendRequest(WebCore::DocumentLoader*, unsigned long, WebCore::ResourceRequest&, const WebCore::ResourceResponse&);
+ virtual bool shouldUseCredentialStorage(DocumentLoader*, unsigned long identifier);
virtual void dispatchDidReceiveAuthenticationChallenge(DocumentLoader*, unsigned long identifier, const AuthenticationChallenge&);
virtual void dispatchDidCancelAuthenticationChallenge(DocumentLoader*, unsigned long identifier, const AuthenticationChallenge&);
virtual void dispatchDidReceiveResponse(WebCore::DocumentLoader*, unsigned long, const WebCore::ResourceResponse&);
@@ -113,6 +114,7 @@ namespace WebCore {
virtual void dispatchDidFinishDocumentLoad();
virtual void dispatchDidFinishLoad();
virtual void dispatchDidFirstLayout();
+ virtual void dispatchDidFirstVisuallyNonEmptyLayout();
virtual WebCore::Frame* dispatchCreatePage();
virtual void dispatchShow();
@@ -144,7 +146,8 @@ namespace WebCore {
virtual void committedLoad(WebCore::DocumentLoader*, const char*, int);
virtual void finishedLoading(DocumentLoader*);
- virtual void updateGlobalHistory(const KURL&);
+ virtual void updateGlobalHistory();
+ virtual void updateGlobalHistoryForRedirectWithoutHistoryItem();
virtual bool shouldGoToHistoryItem(HistoryItem*) const;
virtual ResourceError cancelledError(const ResourceRequest&);
@@ -175,8 +178,8 @@ namespace WebCore {
virtual String userAgent(const WebCore::KURL&);
- virtual void savePlatformDataToCachedPage(WebCore::CachedPage*);
- virtual void transitionToCommittedFromCachedPage(WebCore::CachedPage*);
+ virtual void savePlatformDataToCachedFrame(WebCore::CachedFrame*);
+ virtual void transitionToCommittedFromCachedFrame(WebCore::CachedFrame*);
virtual void transitionToCommittedForNewPage();
virtual bool canCachePage() const;
diff --git a/WebKit/qt/WebKit_pch.h b/WebKit/qt/WebKit_pch.h
index 114121d..9ef73f6 100644
--- a/WebKit/qt/WebKit_pch.h
+++ b/WebKit/qt/WebKit_pch.h
@@ -33,13 +33,13 @@
#if defined __cplusplus
-#if defined (_WIN32)
+#if defined(_WIN32) && !defined(_WIN32_WCE)
#define _CRT_RAND_S
#define _WIN32_WINNT 0x0500
#include <windows.h>
#endif
-#include "../../JavaScriptCore/kjs/config.h"
+#include "../../JavaScriptCore/config.h"
#include <math.h>
#include <stdio.h>
@@ -79,5 +79,5 @@
#include <wtf/GetPtr.h>
#include "../../WebCore/bindings/js/JSDOMBinding.h"
-#include "../../JavaScriptCore/kjs/MathObject.h"
+#include "../../JavaScriptCore/runtime/MathObject.h"
#endif
diff --git a/WebKit/qt/tests/qwebframe/image.png b/WebKit/qt/tests/qwebframe/image.png
new file mode 100644
index 0000000..8d70364
--- /dev/null
+++ b/WebKit/qt/tests/qwebframe/image.png
Binary files differ
diff --git a/WebKit/qt/tests/qwebframe/qwebframe.pro b/WebKit/qt/tests/qwebframe/qwebframe.pro
index 9715fd6..e45e6dc 100644
--- a/WebKit/qt/tests/qwebframe/qwebframe.pro
+++ b/WebKit/qt/tests/qwebframe/qwebframe.pro
@@ -2,5 +2,6 @@ TEMPLATE = app
TARGET = tst_qwebframe
include(../../../../WebKit.pri)
SOURCES += tst_qwebframe.cpp
+RESOURCES += qwebframe.qrc
QT += testlib network
QMAKE_RPATHDIR = $$OUTPUT_DIR/lib $$QMAKE_RPATHDIR
diff --git a/WebKit/qt/tests/qwebframe/qwebframe.qrc b/WebKit/qt/tests/qwebframe/qwebframe.qrc
new file mode 100644
index 0000000..69e62d9
--- /dev/null
+++ b/WebKit/qt/tests/qwebframe/qwebframe.qrc
@@ -0,0 +1,5 @@
+<!DOCTYPE RCC><RCC version="1.0">
+<qresource prefix="/">
+<file>image.png</file>
+</qresource>
+</RCC>
diff --git a/WebKit/qt/tests/qwebframe/tst_qwebframe.cpp b/WebKit/qt/tests/qwebframe/tst_qwebframe.cpp
index 3e4657c..38a3543 100644
--- a/WebKit/qt/tests/qwebframe/tst_qwebframe.cpp
+++ b/WebKit/qt/tests/qwebframe/tst_qwebframe.cpp
@@ -25,6 +25,9 @@
#include <qwebview.h>
#include <qwebframe.h>
#include <qwebhistory.h>
+#include <QAbstractItemView>
+#include <QApplication>
+#include <QComboBox>
#include <QRegExp>
#include <QNetworkRequest>
//TESTED_CLASS=
@@ -356,6 +359,10 @@ public:
const_cast<MyQObject*>(this)->m_qtFunctionInvoked = 51;
m_actuals << qVariantFromValue(arg);
}
+ Q_INVOKABLE void myInvokableWithBoolArg(bool arg) {
+ m_qtFunctionInvoked = 52;
+ m_actuals << arg;
+ }
void emitMySignal() {
emit mySignal();
@@ -398,7 +405,7 @@ public Q_SLOTS:
}
void myOverloadedSlot(QObject* arg) {
m_qtFunctionInvoked = 41;
- m_actuals << arg;
+ m_actuals << qVariantFromValue(arg);
}
void myOverloadedSlot(bool arg) {
m_qtFunctionInvoked = 25;
@@ -538,6 +545,7 @@ class tst_QWebFrame : public QObject
public:
tst_QWebFrame();
virtual ~tst_QWebFrame();
+ bool eventFilter(QObject* watched, QEvent* event);
public slots:
void init();
@@ -564,7 +572,10 @@ private slots:
void progressSignal();
void domCycles();
void setHtml();
+ void setHtmlWithResource();
void ipv6HostEncoding();
+ void metaData();
+ void popupFocus();
private:
QString evalJS(const QString&s) {
// Convert an undefined return variant to the string "undefined"
@@ -610,6 +621,15 @@ private:
evalJS("delete retvalue; delete typevalue");
return ret;
}
+ QObject* firstChildByClassName(QObject* parent, const char* className) {
+ const QObjectList & children = parent->children();
+ foreach (QObject* child, children) {
+ if (!strcmp(child->metaObject()->className(), className)) {
+ return child;
+ }
+ }
+ return 0;
+ }
const QString sTrue;
const QString sFalse;
@@ -625,11 +645,13 @@ private:
QWebView* m_view;
QWebPage* m_page;
MyQObject* m_myObject;
+ QWebView* m_popupTestView;
+ int m_popupTestPaintCount;
};
tst_QWebFrame::tst_QWebFrame()
: sTrue("true"), sFalse("false"), sUndefined("undefined"), sArray("array"), sFunction("function"), sError("error"),
- sString("string"), sObject("object"), sNumber("number")
+ sString("string"), sObject("object"), sNumber("number"), m_popupTestView(0), m_popupTestPaintCount(0)
{
}
@@ -637,6 +659,16 @@ tst_QWebFrame::~tst_QWebFrame()
{
}
+bool tst_QWebFrame::eventFilter(QObject* watched, QEvent* event)
+{
+ // used on the popupFocus test
+ if (watched == m_popupTestView) {
+ if (event->type() == QEvent::Paint)
+ m_popupTestPaintCount++;
+ }
+ return QObject::eventFilter(watched, event);
+}
+
void tst_QWebFrame::init()
{
m_view = new QWebView();
@@ -749,6 +781,27 @@ void tst_QWebFrame::getSetStaticProperty()
QCOMPARE(evalJS("myObject.stringProperty = 123;"
"myObject.stringProperty"), QLatin1String("123"));
QCOMPARE(m_myObject->stringProperty(), QLatin1String("123"));
+ QCOMPARE(evalJS("myObject.stringProperty = null"), QString());
+ QCOMPARE(evalJS("myObject.stringProperty"), QString());
+ QCOMPARE(m_myObject->stringProperty(), QString());
+ QCOMPARE(evalJS("myObject.stringProperty = undefined"), sUndefined);
+ QCOMPARE(evalJS("myObject.stringProperty"), QString());
+ QCOMPARE(m_myObject->stringProperty(), QString());
+
+ QCOMPARE(evalJS("myObject.variantProperty = new Number(1234);"
+ "myObject.variantProperty").toDouble(), 1234.0);
+ QCOMPARE(m_myObject->variantProperty().toDouble(), 1234.0);
+
+ QCOMPARE(evalJS("myObject.variantProperty = new Boolean(1234);"
+ "myObject.variantProperty"), sTrue);
+ QCOMPARE(m_myObject->variantProperty().toBool(), true);
+
+ QCOMPARE(evalJS("myObject.variantProperty = null;"
+ "myObject.variantProperty.valueOf()"), sUndefined);
+ QCOMPARE(m_myObject->variantProperty(), QVariant());
+ QCOMPARE(evalJS("myObject.variantProperty = undefined;"
+ "myObject.variantProperty.valueOf()"), sUndefined);
+ QCOMPARE(m_myObject->variantProperty(), QVariant());
QCOMPARE(evalJS("myObject.variantProperty = 'foo';"
"myObject.variantProperty.valueOf()"), QLatin1String("foo"));
@@ -757,7 +810,6 @@ void tst_QWebFrame::getSetStaticProperty()
"myObject.variantProperty").toDouble(), 42.0);
QCOMPARE(m_myObject->variantProperty().toDouble(), 42.0);
-
QCOMPARE(evalJS("myObject.variantListProperty = [1, 'two', true];"
"myObject.variantListProperty.length == 3"), sTrue);
QCOMPARE(evalJS("myObject.variantListProperty[0] === 1"), sTrue);
@@ -921,6 +973,18 @@ void tst_QWebFrame::callQtInvokable()
QCOMPARE(m_myObject->qtFunctionActuals().at(0).toDouble(), 123.5);
m_myObject->resetQtFunctionInvoked();
+ QCOMPARE(evalJS("typeof myObject.myInvokableWithDoubleArg(new Number(1234.5))"), sUndefined);
+ QCOMPARE(m_myObject->qtFunctionInvoked(), 4);
+ QCOMPARE(m_myObject->qtFunctionActuals().size(), 1);
+ QCOMPARE(m_myObject->qtFunctionActuals().at(0).toDouble(), 1234.5);
+
+ m_myObject->resetQtFunctionInvoked();
+ QCOMPARE(evalJS("typeof myObject.myInvokableWithBoolArg(new Boolean(true))"), sUndefined);
+ QCOMPARE(m_myObject->qtFunctionInvoked(), 52);
+ QCOMPARE(m_myObject->qtFunctionActuals().size(), 1);
+ QCOMPARE(m_myObject->qtFunctionActuals().at(0).toBool(), true);
+
+ m_myObject->resetQtFunctionInvoked();
QCOMPARE(evalJS("typeof myObject.myInvokableWithStringArg('ciao')"), sUndefined);
QCOMPARE(m_myObject->qtFunctionInvoked(), 5);
QCOMPARE(m_myObject->qtFunctionActuals().size(), 1);
@@ -933,6 +997,20 @@ void tst_QWebFrame::callQtInvokable()
QCOMPARE(m_myObject->qtFunctionActuals().at(0).toString(), QLatin1String("123"));
m_myObject->resetQtFunctionInvoked();
+ QCOMPARE(evalJS("typeof myObject.myInvokableWithStringArg(null)"), sUndefined);
+ QCOMPARE(m_myObject->qtFunctionInvoked(), 5);
+ QCOMPARE(m_myObject->qtFunctionActuals().size(), 1);
+ QCOMPARE(m_myObject->qtFunctionActuals().at(0).toString(), QString());
+ QVERIFY(m_myObject->qtFunctionActuals().at(0).toString().isEmpty());
+
+ m_myObject->resetQtFunctionInvoked();
+ QCOMPARE(evalJS("typeof myObject.myInvokableWithStringArg(undefined)"), sUndefined);
+ QCOMPARE(m_myObject->qtFunctionInvoked(), 5);
+ QCOMPARE(m_myObject->qtFunctionActuals().size(), 1);
+ QCOMPARE(m_myObject->qtFunctionActuals().at(0).toString(), QString());
+ QVERIFY(m_myObject->qtFunctionActuals().at(0).toString().isEmpty());
+
+ m_myObject->resetQtFunctionInvoked();
QCOMPARE(evalJS("typeof myObject.myInvokableWithIntArgs(123, 456)"), sUndefined);
QCOMPARE(m_myObject->qtFunctionInvoked(), 6);
QCOMPARE(m_myObject->qtFunctionActuals().size(), 2);
@@ -1057,6 +1135,28 @@ void tst_QWebFrame::callQtInvokable()
QCOMPARE(ret.toInt(),123);
}
+ m_myObject->resetQtFunctionInvoked();
+ {
+ QString type;
+ QVariant ret = evalJSV("myObject.myInvokableWithVariantArg(null)", type);
+ QCOMPARE(type, sObject);
+ QCOMPARE(m_myObject->qtFunctionInvoked(), 15);
+ QCOMPARE(m_myObject->qtFunctionActuals().size(), 1);
+ QCOMPARE(m_myObject->qtFunctionActuals().at(0), QVariant());
+ QVERIFY(!m_myObject->qtFunctionActuals().at(0).isValid());
+ }
+
+ m_myObject->resetQtFunctionInvoked();
+ {
+ QString type;
+ QVariant ret = evalJSV("myObject.myInvokableWithVariantArg(undefined)", type);
+ QCOMPARE(type, sObject);
+ QCOMPARE(m_myObject->qtFunctionInvoked(), 15);
+ QCOMPARE(m_myObject->qtFunctionActuals().size(), 1);
+ QCOMPARE(m_myObject->qtFunctionActuals().at(0), QVariant());
+ QVERIFY(!m_myObject->qtFunctionActuals().at(0).isValid());
+ }
+
/* XFAIL - variant support
m_myObject->resetQtFunctionInvoked();
{
@@ -2036,6 +2136,24 @@ void tst_QWebFrame::setHtml()
QCOMPARE(m_view->page()->mainFrame()->toHtml(), html);
}
+void tst_QWebFrame::setHtmlWithResource()
+{
+ QString html("<html><body><p>hello world</p><img src='qrc:/image.png'/></body></html>");
+
+ QWebPage page;
+ QWebFrame* frame = page.mainFrame();
+
+ // in few seconds, the image should be completey loaded
+ QSignalSpy spy(&page, SIGNAL(loadFinished(bool)));
+ frame->setHtml(html);
+ QTest::qWait(200);
+ QCOMPARE(spy.count(), 1);
+
+ QCOMPARE(frame->evaluateJavaScript("document.images.length").toInt(), 1);
+ QCOMPARE(frame->evaluateJavaScript("document.images[0].width").toInt(), 128);
+ QCOMPARE(frame->evaluateJavaScript("document.images[0].height").toInt(), 128);
+}
+
class TestNetworkManager : public QNetworkAccessManager
{
public:
@@ -2068,5 +2186,91 @@ void tst_QWebFrame::ipv6HostEncoding()
QCOMPARE(networkManager->requestedUrls.at(0), QUrl::fromEncoded("http://[::1]/test.xml"));
}
+void tst_QWebFrame::metaData()
+{
+ m_view->setHtml("<html>"
+ " <head>"
+ " <meta name=\"description\" content=\"Test description\">"
+ " <meta name=\"keywords\" content=\"HTML, JavaScript, Css\">"
+ " </head>"
+ "</html>");
+
+ QMultiMap<QString, QString> metaData = m_view->page()->mainFrame()->metaData();
+
+ QCOMPARE(metaData.count(), 2);
+
+ QCOMPARE(metaData.value("description"), QString("Test description"));
+ QCOMPARE(metaData.value("keywords"), QString("HTML, JavaScript, Css"));
+ QCOMPARE(metaData.value("nonexistant"), QString());
+
+ m_view->setHtml("<html>"
+ " <head>"
+ " <meta name=\"samekey\" content=\"FirstValue\">"
+ " <meta name=\"samekey\" content=\"SecondValue\">"
+ " </head>"
+ "</html>");
+
+ metaData = m_view->page()->mainFrame()->metaData();
+
+ QCOMPARE(metaData.count(), 2);
+
+ QStringList values = metaData.values("samekey");
+ QCOMPARE(values.count(), 2);
+
+ QVERIFY(values.contains("FirstValue"));
+ QVERIFY(values.contains("SecondValue"));
+
+ QCOMPARE(metaData.value("nonexistant"), QString());
+}
+
+void tst_QWebFrame::popupFocus()
+{
+ QWebView view;
+ view.setHtml("<html>"
+ " <body>"
+ " <select name=\"select\">"
+ " <option>1</option>"
+ " <option>2</option>"
+ " </select>"
+ " <input type=\"text\"> </input>"
+ " <textarea name=\"text_area\" rows=\"3\" cols=\"40\">"
+ "This test checks whether showing and hiding a popup"
+ "takes the focus away from the webpage."
+ " </textarea>"
+ " </body>"
+ "</html>");
+ view.resize(400, 100);
+ view.show();
+ view.setFocus();
+ QTest::qWait(200);
+ QVERIFY2(view.hasFocus(),
+ "The WebView should be created");
+
+ // open the popup by clicking. check if focus is on the popup
+ QTest::mouseClick(&view, Qt::LeftButton, 0, QPoint(25, 25));
+ QObject* webpopup = firstChildByClassName(&view, "WebCore::QWebPopup");
+ QComboBox* combo = qobject_cast<QComboBox*>(webpopup);
+ QTest::qWait(500);
+ QVERIFY2(!view.hasFocus() && combo->view()->hasFocus(),
+ "Focus sould be on the Popup");
+
+ // hide the popup and check if focus is on the page
+ combo->hidePopup();
+ QTest::qWait(500);
+ QVERIFY2(view.hasFocus() && !combo->view()->hasFocus(),
+ "Focus sould be back on the WebView");
+
+ // triple the flashing time, should at least blink twice already
+ int delay = qApp->cursorFlashTime() * 3;
+
+ // focus the lineedit and check if it blinks
+ QTest::mouseClick(&view, Qt::LeftButton, 0, QPoint(200, 25));
+ m_popupTestView = &view;
+ view.installEventFilter( this );
+ QTest::qWait(delay);
+ QVERIFY2(m_popupTestPaintCount >= 4,
+ "The input field should have a blinking caret");
+}
+
QTEST_MAIN(tst_QWebFrame)
#include "tst_qwebframe.moc"
diff --git a/WebKit/qt/tests/qwebpage/tst_qwebpage.cpp b/WebKit/qt/tests/qwebpage/tst_qwebpage.cpp
index 13b9bd2..6f2ce3b 100644
--- a/WebKit/qt/tests/qwebpage/tst_qwebpage.cpp
+++ b/WebKit/qt/tests/qwebpage/tst_qwebpage.cpp
@@ -27,7 +27,11 @@
#include <qwebhistory.h>
#include <qnetworkrequest.h>
#include <QDebug>
+#include <QLineEdit>
#include <QMenu>
+#include <qwebsecurityorigin.h>
+#include <qwebdatabase.h>
+#include <QPushButton>
// Will try to wait for the condition while allowing event processing
#define QTRY_COMPARE(__expr, __expected) \
@@ -81,14 +85,26 @@ public:
public slots:
void init();
void cleanup();
+ void cleanupFiles();
private slots:
+ void initTestCase();
+ void cleanupTestCase();
+
void acceptNavigationRequest();
void loadFinished();
void acceptNavigationRequestWithNewWindow();
void userStyleSheet();
void modified();
void contextMenuCrash();
+ void database();
+ void createPlugin();
+ void destroyPlugin();
+ void createViewlessPlugin();
+ void multiplePageGroupsAndLocalStorage();
+ void cursorMovements();
+ void textSelection();
+ void textEditing();
private:
@@ -117,6 +133,23 @@ void tst_QWebPage::cleanup()
delete m_view;
}
+void tst_QWebPage::cleanupFiles()
+{
+ QFile::remove("Databases.db");
+ QDir::current().rmdir("http_www.myexample.com_0");
+ QFile::remove("http_www.myexample.com_0.localstorage");
+}
+
+void tst_QWebPage::initTestCase()
+{
+ cleanupFiles(); // In case there are old files from previous runs
+}
+
+void tst_QWebPage::cleanupTestCase()
+{
+ cleanupFiles(); // Be nice
+}
+
class NavigationRequestOverride : public QWebPage
{
public:
@@ -203,7 +236,7 @@ public:
return true;
}
- virtual QWebPage* createWindow(WebWindowType type) {
+ virtual QWebPage* createWindow(WebWindowType) {
QWebPage* page = new TestPage(this);
createdWindows.append(page);
return page;
@@ -320,7 +353,7 @@ void tst_QWebPage::modified()
m_page->mainFrame()->setUrl(QUrl("data:text/html,<body>This is fourth page"));
QVERIFY(m_page->history()->count() == 2);
m_page->mainFrame()->setUrl(QUrl("data:text/html,<body>This is fifth page"));
- QVERIFY(::waitForSignal(m_page->mainFrame(), SIGNAL(aboutToUpdateHistory(QWebHistoryItem*))));
+ QVERIFY(::waitForSignal(m_page, SIGNAL(saveFrameStateRequested(QWebFrame*, QWebHistoryItem*))));
}
void tst_QWebPage::contextMenuCrash()
@@ -338,5 +371,613 @@ void tst_QWebPage::contextMenuCrash()
delete contextMenu;
}
+void tst_QWebPage::database()
+{
+ QString path = QDir::currentPath();
+ m_page->settings()->setOfflineStoragePath(path);
+ QVERIFY(m_page->settings()->offlineStoragePath() == path);
+
+ QWebSettings::setOfflineStorageDefaultQuota(1024 * 1024);
+ QVERIFY(QWebSettings::offlineStorageDefaultQuota() == 1024 * 1024);
+
+ QString dbFileName = path + "Databases.db";
+
+ if (QFile::exists(dbFileName))
+ QFile::remove(dbFileName);
+
+ qRegisterMetaType<QWebFrame*>("QWebFrame*");
+ QSignalSpy spy(m_page, SIGNAL(databaseQuotaExceeded(QWebFrame *, QString)));
+ m_view->setHtml(QString("<html><head><script>var db; db=openDatabase('testdb', '1.0', 'test database API', 50000); </script></head><body><div></div></body></html>"), QUrl("http://www.myexample.com"));
+ QTRY_COMPARE(spy.count(), 1);
+ m_page->mainFrame()->evaluateJavaScript("var db2; db2=openDatabase('testdb', '1.0', 'test database API', 50000);");
+ QTRY_COMPARE(spy.count(),1);
+
+ m_page->mainFrame()->evaluateJavaScript("localStorage.test='This is a test for local storage';");
+ m_view->setHtml(QString("<html><body id='b'>text</body></html>"), QUrl("http://www.myexample.com"));
+
+ QVariant s1 = m_page->mainFrame()->evaluateJavaScript("localStorage.test");
+ QCOMPARE(s1.toString(), QString("This is a test for local storage"));
+
+ m_page->mainFrame()->evaluateJavaScript("sessionStorage.test='This is a test for session storage';");
+ m_view->setHtml(QString("<html><body id='b'>text</body></html>"), QUrl("http://www.myexample.com"));
+ QVariant s2 = m_page->mainFrame()->evaluateJavaScript("sessionStorage.test");
+ QCOMPARE(s2.toString(), QString("This is a test for session storage"));
+
+ m_view->setHtml(QString("<html><head></head><body><div></div></body></html>"), QUrl("http://www.myexample.com"));
+ m_page->mainFrame()->evaluateJavaScript("var db3; db3=openDatabase('testdb', '1.0', 'test database API', 50000);db3.transaction(function(tx) { tx.executeSql('CREATE TABLE IF NOT EXISTS Test (text TEXT)', []); }, function(tx, result) { }, function(tx, error) { });");
+ QTest::qWait(200);
+
+ QWebSecurityOrigin origin = m_page->mainFrame()->securityOrigin();
+ QList<QWebDatabase> dbs = origin.databases();
+ if (dbs.count() > 0) {
+ QString fileName = dbs[0].fileName();
+ QVERIFY(QFile::exists(fileName));
+ QWebDatabase::removeDatabase(dbs[0]);
+ QVERIFY(!QFile::exists(fileName));
+ }
+ QTest::qWait(1000);
+}
+
+class PluginPage : public QWebPage
+{
+public:
+ PluginPage(QObject *parent = 0)
+ : QWebPage(parent) {}
+
+ struct CallInfo
+ {
+ CallInfo(const QString &c, const QUrl &u,
+ const QStringList &pn, const QStringList &pv,
+ QObject *r)
+ : classid(c), url(u), paramNames(pn),
+ paramValues(pv), returnValue(r)
+ {}
+ QString classid;
+ QUrl url;
+ QStringList paramNames;
+ QStringList paramValues;
+ QObject *returnValue;
+ };
+
+ QList<CallInfo> calls;
+
+protected:
+ virtual QObject *createPlugin(const QString &classid, const QUrl &url,
+ const QStringList &paramNames,
+ const QStringList &paramValues)
+ {
+ QObject *result = 0;
+ if (classid == "pushbutton")
+ result = new QPushButton();
+ else if (classid == "lineedit")
+ result = new QLineEdit();
+ if (result)
+ result->setObjectName(classid);
+ calls.append(CallInfo(classid, url, paramNames, paramValues, result));
+ return result;
+ }
+};
+
+void tst_QWebPage::createPlugin()
+{
+ QSignalSpy loadSpy(m_view, SIGNAL(loadFinished(bool)));
+
+ PluginPage* newPage = new PluginPage(m_view);
+ m_view->setPage(newPage);
+
+ // plugins not enabled by default, so the plugin shouldn't be loaded
+ m_view->setHtml(QString("<html><body><object type='application/x-qt-plugin' classid='pushbutton' id='mybutton'/></body></html>"));
+ QTRY_COMPARE(loadSpy.count(), 1);
+ QCOMPARE(newPage->calls.count(), 0);
+
+ m_view->settings()->setAttribute(QWebSettings::PluginsEnabled, true);
+
+ // type has to be application/x-qt-plugin
+ m_view->setHtml(QString("<html><body><object type='application/x-foobarbaz' classid='pushbutton' id='mybutton'/></body></html>"));
+ QTRY_COMPARE(loadSpy.count(), 2);
+ QCOMPARE(newPage->calls.count(), 0);
+
+ m_view->setHtml(QString("<html><body><object type='application/x-qt-plugin' classid='pushbutton' id='mybutton'/></body></html>"));
+ QTRY_COMPARE(loadSpy.count(), 3);
+ QCOMPARE(newPage->calls.count(), 1);
+ {
+ PluginPage::CallInfo ci = newPage->calls.takeFirst();
+ QCOMPARE(ci.classid, QString::fromLatin1("pushbutton"));
+ QCOMPARE(ci.url, QUrl());
+ QCOMPARE(ci.paramNames.count(), 3);
+ QCOMPARE(ci.paramValues.count(), 3);
+ QCOMPARE(ci.paramNames.at(0), QString::fromLatin1("type"));
+ QCOMPARE(ci.paramValues.at(0), QString::fromLatin1("application/x-qt-plugin"));
+ QCOMPARE(ci.paramNames.at(1), QString::fromLatin1("classid"));
+ QCOMPARE(ci.paramValues.at(1), QString::fromLatin1("pushbutton"));
+ QCOMPARE(ci.paramNames.at(2), QString::fromLatin1("id"));
+ QCOMPARE(ci.paramValues.at(2), QString::fromLatin1("mybutton"));
+ QVERIFY(ci.returnValue != 0);
+ QVERIFY(ci.returnValue->inherits("QPushButton"));
+ }
+ // test JS bindings
+ QCOMPARE(newPage->mainFrame()->evaluateJavaScript("document.getElementById('mybutton').toString()").toString(),
+ QString::fromLatin1("[object HTMLObjectElement]"));
+ QCOMPARE(newPage->mainFrame()->evaluateJavaScript("mybutton.toString()").toString(),
+ QString::fromLatin1("[object HTMLObjectElement]"));
+ QCOMPARE(newPage->mainFrame()->evaluateJavaScript("typeof mybutton.objectName").toString(),
+ QString::fromLatin1("string"));
+ QCOMPARE(newPage->mainFrame()->evaluateJavaScript("mybutton.objectName").toString(),
+ QString::fromLatin1("pushbutton"));
+ QCOMPARE(newPage->mainFrame()->evaluateJavaScript("typeof mybutton.clicked").toString(),
+ QString::fromLatin1("function"));
+ QCOMPARE(newPage->mainFrame()->evaluateJavaScript("mybutton.clicked.toString()").toString(),
+ QString::fromLatin1("function clicked() {\n [native code]\n}"));
+
+ m_view->setHtml(QString("<html><body><table>"
+ "<tr><object type='application/x-qt-plugin' classid='lineedit' id='myedit'/></tr>"
+ "<tr><object type='application/x-qt-plugin' classid='pushbutton' id='mybutton'/></tr>"
+ "</table></body></html>"), QUrl("http://foo.bar.baz"));
+ QTRY_COMPARE(loadSpy.count(), 4);
+ QCOMPARE(newPage->calls.count(), 2);
+ {
+ PluginPage::CallInfo ci = newPage->calls.takeFirst();
+ QCOMPARE(ci.classid, QString::fromLatin1("lineedit"));
+ QCOMPARE(ci.url, QUrl());
+ QCOMPARE(ci.paramNames.count(), 3);
+ QCOMPARE(ci.paramValues.count(), 3);
+ QCOMPARE(ci.paramNames.at(0), QString::fromLatin1("type"));
+ QCOMPARE(ci.paramValues.at(0), QString::fromLatin1("application/x-qt-plugin"));
+ QCOMPARE(ci.paramNames.at(1), QString::fromLatin1("classid"));
+ QCOMPARE(ci.paramValues.at(1), QString::fromLatin1("lineedit"));
+ QCOMPARE(ci.paramNames.at(2), QString::fromLatin1("id"));
+ QCOMPARE(ci.paramValues.at(2), QString::fromLatin1("myedit"));
+ QVERIFY(ci.returnValue != 0);
+ QVERIFY(ci.returnValue->inherits("QLineEdit"));
+ }
+ {
+ PluginPage::CallInfo ci = newPage->calls.takeFirst();
+ QCOMPARE(ci.classid, QString::fromLatin1("pushbutton"));
+ QCOMPARE(ci.url, QUrl());
+ QCOMPARE(ci.paramNames.count(), 3);
+ QCOMPARE(ci.paramValues.count(), 3);
+ QCOMPARE(ci.paramNames.at(0), QString::fromLatin1("type"));
+ QCOMPARE(ci.paramValues.at(0), QString::fromLatin1("application/x-qt-plugin"));
+ QCOMPARE(ci.paramNames.at(1), QString::fromLatin1("classid"));
+ QCOMPARE(ci.paramValues.at(1), QString::fromLatin1("pushbutton"));
+ QCOMPARE(ci.paramNames.at(2), QString::fromLatin1("id"));
+ QCOMPARE(ci.paramValues.at(2), QString::fromLatin1("mybutton"));
+ QVERIFY(ci.returnValue != 0);
+ QVERIFY(ci.returnValue->inherits("QPushButton"));
+ }
+
+ m_view->settings()->setAttribute(QWebSettings::PluginsEnabled, false);
+
+ m_view->setHtml(QString("<html><body><object type='application/x-qt-plugin' classid='pushbutton' id='mybutton'/></body></html>"));
+ QTRY_COMPARE(loadSpy.count(), 5);
+ QCOMPARE(newPage->calls.count(), 0);
+}
+
+class PluginTrackedPage : public QWebPage
+{
+public:
+
+ int count;
+ QPointer<QWidget> widget;
+
+ PluginTrackedPage(QWidget *parent = 0) : QWebPage(parent), count(0) {
+ settings()->setAttribute(QWebSettings::PluginsEnabled, true);
+ }
+
+ virtual QObject* createPlugin(const QString&, const QUrl&, const QStringList&, const QStringList&) {
+ count++;
+ QWidget *w = new QWidget;
+ widget = w;
+ return w;
+ }
+};
+
+void tst_QWebPage::destroyPlugin()
+{
+ PluginTrackedPage* page = new PluginTrackedPage(m_view);
+ m_view->setPage(page);
+
+ // we create the plugin, so the widget should be constructed
+ QString content("<html><body><object type=\"application/x-qt-plugin\" classid=\"QProgressBar\"></object></body></html>");
+ m_view->setHtml(content);
+ QVERIFY(page->widget != 0);
+ QCOMPARE(page->count, 1);
+
+ // navigate away, the plugin widget should be destructed
+ m_view->setHtml("<html><body>Hi</body></html>");
+ QTestEventLoop::instance().enterLoop(1);
+ QVERIFY(page->widget == 0);
+}
+
+void tst_QWebPage::createViewlessPlugin()
+{
+ PluginTrackedPage* page = new PluginTrackedPage;
+ QString content("<html><body><object type=\"application/x-qt-plugin\" classid=\"QProgressBar\"></object></body></html>");
+ page->mainFrame()->setHtml(content);
+ QCOMPARE(page->count, 1);
+ QVERIFY(page->widget != 0);
+ delete page;
+}
+
+// import private API
+void QWEBKIT_EXPORT qt_webpage_setGroupName(QWebPage* page, const QString& groupName);
+QString QWEBKIT_EXPORT qt_webpage_groupName(QWebPage* page);
+void QWEBKIT_EXPORT qt_websettings_setLocalStorageDatabasePath(QWebSettings* settings, const QString& path);
+
+void tst_QWebPage::multiplePageGroupsAndLocalStorage()
+{
+ QDir dir(QDir::currentPath());
+ dir.mkdir("path1");
+ dir.mkdir("path2");
+
+ QWebView view1;
+ QWebView view2;
+
+ qt_websettings_setLocalStorageDatabasePath(view1.page()->settings(), QDir::toNativeSeparators(QDir::currentPath() + "/path1"));
+ qt_webpage_setGroupName(view1.page(), "group1");
+ qt_websettings_setLocalStorageDatabasePath(view2.page()->settings(), QDir::toNativeSeparators(QDir::currentPath() + "/path2"));
+ qt_webpage_setGroupName(view2.page(), "group2");
+ QCOMPARE(qt_webpage_groupName(view1.page()), QString("group1"));
+ QCOMPARE(qt_webpage_groupName(view2.page()), QString("group2"));
+
+
+ view1.setHtml(QString("<html><body> </body></html>"), QUrl("http://www.myexample.com"));
+ view2.setHtml(QString("<html><body> </body></html>"), QUrl("http://www.myexample.com"));
+
+ view1.page()->mainFrame()->evaluateJavaScript("localStorage.test='value1';");
+ view2.page()->mainFrame()->evaluateJavaScript("localStorage.test='value2';");
+
+ view1.setHtml(QString("<html><body> </body></html>"), QUrl("http://www.myexample.com"));
+ view2.setHtml(QString("<html><body> </body></html>"), QUrl("http://www.myexample.com"));
+
+ QVariant s1 = view1.page()->mainFrame()->evaluateJavaScript("localStorage.test");
+ QCOMPARE(s1.toString(), QString("value1"));
+
+ QVariant s2 = view2.page()->mainFrame()->evaluateJavaScript("localStorage.test");
+ QCOMPARE(s2.toString(), QString("value2"));
+
+ QTest::qWait(1000);
+
+ QFile::remove(QDir::toNativeSeparators(QDir::currentPath() + "/path1/http_www.myexample.com_0.localstorage"));
+ QFile::remove(QDir::toNativeSeparators(QDir::currentPath() + "/path2/http_www.myexample.com_0.localstorage"));
+ dir.rmdir(QDir::toNativeSeparators("./path1"));
+ dir.rmdir(QDir::toNativeSeparators("./path2"));
+}
+
+class CursorTrackedPage : public QWebPage
+{
+public:
+
+ CursorTrackedPage(QWidget *parent = 0): QWebPage(parent) {
+ setViewportSize(QSize(1024, 768)); // big space
+ }
+
+ QString selectedText() {
+ return mainFrame()->evaluateJavaScript("window.getSelection().toString()").toString();
+ }
+
+ int selectionStartOffset() {
+ return mainFrame()->evaluateJavaScript("window.getSelection().getRangeAt(0).startOffset").toInt();
+ }
+
+ int selectionEndOffset() {
+ return mainFrame()->evaluateJavaScript("window.getSelection().getRangeAt(0).endOffset").toInt();
+ }
+
+ // true if start offset == end offset, i.e. no selected text
+ int isSelectionCollapsed() {
+ return mainFrame()->evaluateJavaScript("window.getSelection().getRangeAt(0).collapsed").toBool();
+ }
+};
+
+void tst_QWebPage::cursorMovements()
+{
+ CursorTrackedPage* page = new CursorTrackedPage;
+ QString content("<html><body<p id=one>The quick brown fox</p><p id=two>jumps over the lazy dog</p><p>May the source<br/>be with you!</p></body></html>");
+ page->mainFrame()->setHtml(content);
+
+ // this will select the first paragraph
+ QString script = "var range = document.createRange(); " \
+ "var node = document.getElementById(\"one\"); " \
+ "range.selectNode(node); " \
+ "getSelection().addRange(range);";
+ page->mainFrame()->evaluateJavaScript(script);
+ QCOMPARE(page->selectedText().trimmed(), QString::fromLatin1("The quick brown fox"));
+
+ // these actions must exist
+ QVERIFY(page->action(QWebPage::MoveToNextChar) != 0);
+ QVERIFY(page->action(QWebPage::MoveToPreviousChar) != 0);
+ QVERIFY(page->action(QWebPage::MoveToNextWord) != 0);
+ QVERIFY(page->action(QWebPage::MoveToPreviousWord) != 0);
+ QVERIFY(page->action(QWebPage::MoveToNextLine) != 0);
+ QVERIFY(page->action(QWebPage::MoveToPreviousLine) != 0);
+ QVERIFY(page->action(QWebPage::MoveToStartOfLine) != 0);
+ QVERIFY(page->action(QWebPage::MoveToEndOfLine) != 0);
+ QVERIFY(page->action(QWebPage::MoveToStartOfBlock) != 0);
+ QVERIFY(page->action(QWebPage::MoveToEndOfBlock) != 0);
+ QVERIFY(page->action(QWebPage::MoveToStartOfDocument) != 0);
+ QVERIFY(page->action(QWebPage::MoveToEndOfDocument) != 0);
+
+ // right now they are disabled because contentEditable is false
+ QCOMPARE(page->action(QWebPage::MoveToNextChar)->isEnabled(), false);
+ QCOMPARE(page->action(QWebPage::MoveToPreviousChar)->isEnabled(), false);
+ QCOMPARE(page->action(QWebPage::MoveToNextWord)->isEnabled(), false);
+ QCOMPARE(page->action(QWebPage::MoveToPreviousWord)->isEnabled(), false);
+ QCOMPARE(page->action(QWebPage::MoveToNextLine)->isEnabled(), false);
+ QCOMPARE(page->action(QWebPage::MoveToPreviousLine)->isEnabled(), false);
+ QCOMPARE(page->action(QWebPage::MoveToStartOfLine)->isEnabled(), false);
+ QCOMPARE(page->action(QWebPage::MoveToEndOfLine)->isEnabled(), false);
+ QCOMPARE(page->action(QWebPage::MoveToStartOfBlock)->isEnabled(), false);
+ QCOMPARE(page->action(QWebPage::MoveToEndOfBlock)->isEnabled(), false);
+ QCOMPARE(page->action(QWebPage::MoveToStartOfDocument)->isEnabled(), false);
+ QCOMPARE(page->action(QWebPage::MoveToEndOfDocument)->isEnabled(), false);
+
+ // make it editable before navigating the cursor
+ page->setContentEditable(true);
+
+ // here the actions are enabled after contentEditable is true
+ QCOMPARE(page->action(QWebPage::MoveToNextChar)->isEnabled(), true);
+ QCOMPARE(page->action(QWebPage::MoveToPreviousChar)->isEnabled(), true);
+ QCOMPARE(page->action(QWebPage::MoveToNextWord)->isEnabled(), true);
+ QCOMPARE(page->action(QWebPage::MoveToPreviousWord)->isEnabled(), true);
+ QCOMPARE(page->action(QWebPage::MoveToNextLine)->isEnabled(), true);
+ QCOMPARE(page->action(QWebPage::MoveToPreviousLine)->isEnabled(), true);
+ QCOMPARE(page->action(QWebPage::MoveToStartOfLine)->isEnabled(), true);
+ QCOMPARE(page->action(QWebPage::MoveToEndOfLine)->isEnabled(), true);
+ QCOMPARE(page->action(QWebPage::MoveToStartOfBlock)->isEnabled(), true);
+ QCOMPARE(page->action(QWebPage::MoveToEndOfBlock)->isEnabled(), true);
+ QCOMPARE(page->action(QWebPage::MoveToStartOfDocument)->isEnabled(), true);
+ QCOMPARE(page->action(QWebPage::MoveToEndOfDocument)->isEnabled(), true);
+
+ // cursor will be before the word "jump"
+ page->triggerAction(QWebPage::MoveToNextChar);
+ QVERIFY(page->isSelectionCollapsed());
+ QCOMPARE(page->selectionStartOffset(), 0);
+
+ // cursor will be between 'j' and 'u' in the word "jump"
+ page->triggerAction(QWebPage::MoveToNextChar);
+ QVERIFY(page->isSelectionCollapsed());
+ QCOMPARE(page->selectionStartOffset(), 1);
+
+ // cursor will be between 'u' and 'm' in the word "jump"
+ page->triggerAction(QWebPage::MoveToNextChar);
+ QVERIFY(page->isSelectionCollapsed());
+ QCOMPARE(page->selectionStartOffset(), 2);
+
+ // cursor will be after the word "jump"
+ page->triggerAction(QWebPage::MoveToNextWord);
+ QVERIFY(page->isSelectionCollapsed());
+ QCOMPARE(page->selectionStartOffset(), 5);
+
+ // cursor will be after the word "lazy"
+ page->triggerAction(QWebPage::MoveToNextWord);
+ page->triggerAction(QWebPage::MoveToNextWord);
+ page->triggerAction(QWebPage::MoveToNextWord);
+ QVERIFY(page->isSelectionCollapsed());
+ QCOMPARE(page->selectionStartOffset(), 19);
+
+ // cursor will be between 'z' and 'y' in "lazy"
+ page->triggerAction(QWebPage::MoveToPreviousChar);
+ QVERIFY(page->isSelectionCollapsed());
+ QCOMPARE(page->selectionStartOffset(), 18);
+
+ // cursor will be between 'a' and 'z' in "lazy"
+ page->triggerAction(QWebPage::MoveToPreviousChar);
+ QVERIFY(page->isSelectionCollapsed());
+ QCOMPARE(page->selectionStartOffset(), 17);
+
+ // cursor will be before the word "lazy"
+ page->triggerAction(QWebPage::MoveToPreviousWord);
+ QVERIFY(page->isSelectionCollapsed());
+ QCOMPARE(page->selectionStartOffset(), 15);
+
+ // cursor will be before the word "quick"
+ page->triggerAction(QWebPage::MoveToPreviousWord);
+ page->triggerAction(QWebPage::MoveToPreviousWord);
+ page->triggerAction(QWebPage::MoveToPreviousWord);
+ page->triggerAction(QWebPage::MoveToPreviousWord);
+ page->triggerAction(QWebPage::MoveToPreviousWord);
+ page->triggerAction(QWebPage::MoveToPreviousWord);
+ QVERIFY(page->isSelectionCollapsed());
+ QCOMPARE(page->selectionStartOffset(), 4);
+
+ // cursor will be between 'p' and 's' in the word "jumps"
+ page->triggerAction(QWebPage::MoveToNextWord);
+ page->triggerAction(QWebPage::MoveToNextWord);
+ page->triggerAction(QWebPage::MoveToNextWord);
+ page->triggerAction(QWebPage::MoveToNextChar);
+ page->triggerAction(QWebPage::MoveToNextChar);
+ page->triggerAction(QWebPage::MoveToNextChar);
+ page->triggerAction(QWebPage::MoveToNextChar);
+ page->triggerAction(QWebPage::MoveToNextChar);
+ QVERIFY(page->isSelectionCollapsed());
+ QCOMPARE(page->selectionStartOffset(), 4);
+
+ // cursor will be before the word "jumps"
+ page->triggerAction(QWebPage::MoveToStartOfLine);
+ QVERIFY(page->isSelectionCollapsed());
+ QCOMPARE(page->selectionStartOffset(), 0);
+
+ // cursor will be after the word "dog"
+ page->triggerAction(QWebPage::MoveToEndOfLine);
+ QVERIFY(page->isSelectionCollapsed());
+ QCOMPARE(page->selectionStartOffset(), 23);
+
+ // cursor will be between 'w' and 'n' in "brown"
+ page->triggerAction(QWebPage::MoveToStartOfLine);
+ page->triggerAction(QWebPage::MoveToPreviousWord);
+ page->triggerAction(QWebPage::MoveToPreviousWord);
+ page->triggerAction(QWebPage::MoveToNextChar);
+ page->triggerAction(QWebPage::MoveToNextChar);
+ page->triggerAction(QWebPage::MoveToNextChar);
+ page->triggerAction(QWebPage::MoveToNextChar);
+ QVERIFY(page->isSelectionCollapsed());
+ QCOMPARE(page->selectionStartOffset(), 14);
+
+ // cursor will be after the word "fox"
+ page->triggerAction(QWebPage::MoveToEndOfLine);
+ QVERIFY(page->isSelectionCollapsed());
+ QCOMPARE(page->selectionStartOffset(), 19);
+
+ // cursor will be before the word "The"
+ page->triggerAction(QWebPage::MoveToStartOfDocument);
+ QVERIFY(page->isSelectionCollapsed());
+ QCOMPARE(page->selectionStartOffset(), 0);
+
+ // cursor will be after the word "you!"
+ page->triggerAction(QWebPage::MoveToEndOfDocument);
+ QVERIFY(page->isSelectionCollapsed());
+ QCOMPARE(page->selectionStartOffset(), 12);
+
+ // cursor will be before the word "be"
+ page->triggerAction(QWebPage::MoveToStartOfBlock);
+ QVERIFY(page->isSelectionCollapsed());
+ QCOMPARE(page->selectionStartOffset(), 2);
+
+ // cursor will be after the word "you!"
+ page->triggerAction(QWebPage::MoveToEndOfBlock);
+ QVERIFY(page->isSelectionCollapsed());
+ QCOMPARE(page->selectionStartOffset(), 12);
+
+ // try to move before the document start
+ page->triggerAction(QWebPage::MoveToStartOfDocument);
+ page->triggerAction(QWebPage::MoveToPreviousChar);
+ QVERIFY(page->isSelectionCollapsed());
+ QCOMPARE(page->selectionStartOffset(), 0);
+ page->triggerAction(QWebPage::MoveToStartOfDocument);
+ page->triggerAction(QWebPage::MoveToPreviousWord);
+ QVERIFY(page->isSelectionCollapsed());
+ QCOMPARE(page->selectionStartOffset(), 0);
+
+ // try to move past the document end
+ page->triggerAction(QWebPage::MoveToEndOfDocument);
+ page->triggerAction(QWebPage::MoveToNextChar);
+ QVERIFY(page->isSelectionCollapsed());
+ QCOMPARE(page->selectionStartOffset(), 12);
+ page->triggerAction(QWebPage::MoveToEndOfDocument);
+ page->triggerAction(QWebPage::MoveToNextWord);
+ QVERIFY(page->isSelectionCollapsed());
+ QCOMPARE(page->selectionStartOffset(), 12);
+
+ delete page;
+}
+
+void tst_QWebPage::textSelection()
+{
+ CursorTrackedPage* page = new CursorTrackedPage;
+ QString content("<html><body<p id=one>The quick brown fox</p>" \
+ "<p id=two>jumps over the lazy dog</p>" \
+ "<p>May the source<br/>be with you!</p></body></html>");
+ page->mainFrame()->setHtml(content);
+
+ // this will select the first paragraph
+ QString script = "var range = document.createRange(); " \
+ "var node = document.getElementById(\"one\"); " \
+ "range.selectNode(node); " \
+ "getSelection().addRange(range);";
+ page->mainFrame()->evaluateJavaScript(script);
+ QCOMPARE(page->selectedText().trimmed(), QString::fromLatin1("The quick brown fox"));
+
+ // these actions must exist
+ QVERIFY(page->action(QWebPage::SelectNextChar) != 0);
+ QVERIFY(page->action(QWebPage::SelectPreviousChar) != 0);
+ QVERIFY(page->action(QWebPage::SelectNextWord) != 0);
+ QVERIFY(page->action(QWebPage::SelectPreviousWord) != 0);
+ QVERIFY(page->action(QWebPage::SelectNextLine) != 0);
+ QVERIFY(page->action(QWebPage::SelectPreviousLine) != 0);
+ QVERIFY(page->action(QWebPage::SelectStartOfLine) != 0);
+ QVERIFY(page->action(QWebPage::SelectEndOfLine) != 0);
+ QVERIFY(page->action(QWebPage::SelectStartOfBlock) != 0);
+ QVERIFY(page->action(QWebPage::SelectEndOfBlock) != 0);
+ QVERIFY(page->action(QWebPage::SelectStartOfDocument) != 0);
+ QVERIFY(page->action(QWebPage::SelectEndOfDocument) != 0);
+
+ // right now they are disabled because contentEditable is false
+ QCOMPARE(page->action(QWebPage::SelectNextChar)->isEnabled(), false);
+ QCOMPARE(page->action(QWebPage::SelectPreviousChar)->isEnabled(), false);
+ QCOMPARE(page->action(QWebPage::SelectNextWord)->isEnabled(), false);
+ QCOMPARE(page->action(QWebPage::SelectPreviousWord)->isEnabled(), false);
+ QCOMPARE(page->action(QWebPage::SelectNextLine)->isEnabled(), false);
+ QCOMPARE(page->action(QWebPage::SelectPreviousLine)->isEnabled(), false);
+ QCOMPARE(page->action(QWebPage::SelectStartOfLine)->isEnabled(), false);
+ QCOMPARE(page->action(QWebPage::SelectEndOfLine)->isEnabled(), false);
+ QCOMPARE(page->action(QWebPage::SelectStartOfBlock)->isEnabled(), false);
+ QCOMPARE(page->action(QWebPage::SelectEndOfBlock)->isEnabled(), false);
+ QCOMPARE(page->action(QWebPage::SelectStartOfDocument)->isEnabled(), false);
+ QCOMPARE(page->action(QWebPage::SelectEndOfDocument)->isEnabled(), false);
+
+ // make it editable before navigating the cursor
+ page->setContentEditable(true);
+
+ // here the actions are enabled after contentEditable is true
+ QCOMPARE(page->action(QWebPage::SelectNextChar)->isEnabled(), true);
+ QCOMPARE(page->action(QWebPage::SelectPreviousChar)->isEnabled(), true);
+ QCOMPARE(page->action(QWebPage::SelectNextWord)->isEnabled(), true);
+ QCOMPARE(page->action(QWebPage::SelectPreviousWord)->isEnabled(), true);
+ QCOMPARE(page->action(QWebPage::SelectNextLine)->isEnabled(), true);
+ QCOMPARE(page->action(QWebPage::SelectPreviousLine)->isEnabled(), true);
+ QCOMPARE(page->action(QWebPage::SelectStartOfLine)->isEnabled(), true);
+ QCOMPARE(page->action(QWebPage::SelectEndOfLine)->isEnabled(), true);
+ QCOMPARE(page->action(QWebPage::SelectStartOfBlock)->isEnabled(), true);
+ QCOMPARE(page->action(QWebPage::SelectEndOfBlock)->isEnabled(), true);
+ QCOMPARE(page->action(QWebPage::SelectStartOfDocument)->isEnabled(), true);
+ QCOMPARE(page->action(QWebPage::SelectEndOfDocument)->isEnabled(), true);
+
+ delete page;
+}
+
+void tst_QWebPage::textEditing()
+{
+ CursorTrackedPage* page = new CursorTrackedPage;
+ QString content("<html><body<p id=one>The quick brown fox</p>" \
+ "<p id=two>jumps over the lazy dog</p>" \
+ "<p>May the source<br/>be with you!</p></body></html>");
+ page->mainFrame()->setHtml(content);
+
+ // this will select the first paragraph
+ QString script = "var range = document.createRange(); " \
+ "var node = document.getElementById(\"one\"); " \
+ "range.selectNode(node); " \
+ "getSelection().addRange(range);";
+ page->mainFrame()->evaluateJavaScript(script);
+ QCOMPARE(page->selectedText().trimmed(), QString::fromLatin1("The quick brown fox"));
+
+ // these actions must exist
+ QVERIFY(page->action(QWebPage::DeleteStartOfWord) != 0);
+ QVERIFY(page->action(QWebPage::DeleteEndOfWord) != 0);
+ QVERIFY(page->action(QWebPage::SetTextDirectionDefault) != 0);
+ QVERIFY(page->action(QWebPage::SetTextDirectionLeftToRight) != 0);
+ QVERIFY(page->action(QWebPage::SetTextDirectionRightToLeft) != 0);
+ QVERIFY(page->action(QWebPage::ToggleBold) != 0);
+ QVERIFY(page->action(QWebPage::ToggleItalic) != 0);
+ QVERIFY(page->action(QWebPage::ToggleUnderline) != 0);
+
+ // right now they are disabled because contentEditable is false
+ QCOMPARE(page->action(QWebPage::DeleteStartOfWord)->isEnabled(), false);
+ QCOMPARE(page->action(QWebPage::DeleteEndOfWord)->isEnabled(), false);
+ QCOMPARE(page->action(QWebPage::SetTextDirectionDefault)->isEnabled(), false);
+ QCOMPARE(page->action(QWebPage::SetTextDirectionLeftToRight)->isEnabled(), false);
+ QCOMPARE(page->action(QWebPage::SetTextDirectionRightToLeft)->isEnabled(), false);
+ QCOMPARE(page->action(QWebPage::ToggleBold)->isEnabled(), false);
+ QCOMPARE(page->action(QWebPage::ToggleItalic)->isEnabled(), false);
+ QCOMPARE(page->action(QWebPage::ToggleUnderline)->isEnabled(), false);
+
+ // make it editable before navigating the cursor
+ page->setContentEditable(true);
+
+ // here the actions are enabled after contentEditable is true
+ QCOMPARE(page->action(QWebPage::DeleteStartOfWord)->isEnabled(), true);
+ QCOMPARE(page->action(QWebPage::DeleteEndOfWord)->isEnabled(), true);
+ QCOMPARE(page->action(QWebPage::SetTextDirectionDefault)->isEnabled(), true);
+ QCOMPARE(page->action(QWebPage::SetTextDirectionLeftToRight)->isEnabled(), true);
+ QCOMPARE(page->action(QWebPage::SetTextDirectionRightToLeft)->isEnabled(), true);
+ QCOMPARE(page->action(QWebPage::ToggleBold)->isEnabled(), true);
+ QCOMPARE(page->action(QWebPage::ToggleItalic)->isEnabled(), true);
+ QCOMPARE(page->action(QWebPage::ToggleUnderline)->isEnabled(), true);
+
+ delete page;
+}
+
+
QTEST_MAIN(tst_QWebPage)
#include "tst_qwebpage.moc"
diff --git a/WebKit/win/AccessibleBase.cpp b/WebKit/win/AccessibleBase.cpp
index fdf9404..df91151 100644
--- a/WebKit/win/AccessibleBase.cpp
+++ b/WebKit/win/AccessibleBase.cpp
@@ -102,7 +102,7 @@ HRESULT STDMETHODCALLTYPE AccessibleBase::get_accParent(IDispatch** parent)
{
*parent = 0;
- if (!m_object)
+ if (!m_object || !m_object->topDocumentFrameView())
return E_FAIL;
return WebView::AccessibleObjectFromWindow(m_object->topDocumentFrameView()->hostWindow()->platformWindow(),
@@ -393,6 +393,9 @@ HRESULT STDMETHODCALLTYPE AccessibleBase::accLocation(long* left, long* top, lon
if (FAILED(hr))
return hr;
+ if (!childObj->documentFrameView())
+ return E_FAIL;
+
IntRect screenRect(childObj->documentFrameView()->contentsToScreen(childObj->boundingBoxRect()));
*left = screenRect.x();
*top = screenRect.y();
@@ -465,7 +468,7 @@ HRESULT STDMETHODCALLTYPE AccessibleBase::accHitTest(long x, long y, VARIANT* pv
::VariantInit(pvChildAtPoint);
- if (!m_object)
+ if (!m_object || !m_object->documentFrameView())
return E_FAIL;
IntPoint point = m_object->documentFrameView()->screenToContents(IntPoint(x, y));
diff --git a/WebKit/win/COMPropertyBag.h b/WebKit/win/COMPropertyBag.h
index 6bec57f..ae4a7b7 100644
--- a/WebKit/win/COMPropertyBag.h
+++ b/WebKit/win/COMPropertyBag.h
@@ -34,10 +34,10 @@
#include "COMVariantSetter.h"
-template<typename ValueType, typename HashType = typename WebCore::StringHash>
+template<typename ValueType, typename KeyType = typename WebCore::String, typename HashType = typename WebCore::StringHash>
class COMPropertyBag : public IPropertyBag, public IPropertyBag2, Noncopyable {
public:
- typedef HashMap<WebCore::String, ValueType, HashType> HashMapType;
+ typedef HashMap<KeyType, ValueType, HashType> HashMapType;
static COMPropertyBag* createInstance(const HashMapType&);
static COMPropertyBag* adopt(HashMapType&);
@@ -77,16 +77,16 @@ private:
};
// COMPropertyBag ------------------------------------------------------------------
-template<typename ValueType, typename HashType>
-COMPropertyBag<ValueType, HashType>* COMPropertyBag<typename ValueType, HashType>::createInstance(const HashMapType& hashMap)
+template<typename ValueType, typename KeyType, typename HashType>
+COMPropertyBag<ValueType, KeyType, HashType>* COMPropertyBag<typename ValueType, typename KeyType, HashType>::createInstance(const HashMapType& hashMap)
{
COMPropertyBag* instance = new COMPropertyBag(hashMap);
instance->AddRef();
return instance;
}
-template<typename ValueType, typename HashType>
-COMPropertyBag<ValueType, HashType>* COMPropertyBag<typename ValueType, HashType>::adopt(HashMapType& hashMap)
+template<typename ValueType, typename KeyType, typename HashType>
+COMPropertyBag<ValueType, KeyType, HashType>* COMPropertyBag<typename ValueType, typename KeyType, HashType>::adopt(HashMapType& hashMap)
{
COMPropertyBag* instance = new COMPropertyBag;
instance->m_hashMap.swap(hashMap);
@@ -95,8 +95,8 @@ COMPropertyBag<ValueType, HashType>* COMPropertyBag<typename ValueType, HashType
}
// IUnknown ------------------------------------------------------------------------
-template<typename ValueType, typename HashType>
-HRESULT STDMETHODCALLTYPE COMPropertyBag<ValueType, HashType>::QueryInterface(REFIID riid, void** ppvObject)
+template<typename ValueType, typename KeyType, typename HashType>
+HRESULT STDMETHODCALLTYPE COMPropertyBag<ValueType, KeyType, HashType>::QueryInterface(REFIID riid, void** ppvObject)
{
*ppvObject = 0;
if (IsEqualGUID(riid, IID_IUnknown))
@@ -112,14 +112,14 @@ HRESULT STDMETHODCALLTYPE COMPropertyBag<ValueType, HashType>::QueryInterface(RE
return S_OK;
}
-template<typename ValueType, typename HashType>
-ULONG STDMETHODCALLTYPE COMPropertyBag<ValueType, HashType>::AddRef()
+template<typename ValueType, typename KeyType, typename HashType>
+ULONG STDMETHODCALLTYPE COMPropertyBag<ValueType, KeyType, HashType>::AddRef()
{
return ++m_refCount;
}
-template<typename ValueType, typename HashType>
-ULONG STDMETHODCALLTYPE COMPropertyBag<ValueType, HashType>::Release()
+template<typename ValueType, typename KeyType, typename HashType>
+ULONG STDMETHODCALLTYPE COMPropertyBag<ValueType, KeyType, HashType>::Release()
{
ULONG newRef = --m_refCount;
if (!newRef)
@@ -130,8 +130,8 @@ ULONG STDMETHODCALLTYPE COMPropertyBag<ValueType, HashType>::Release()
// IPropertyBag --------------------------------------------------------------------
-template<typename ValueType, typename HashType>
-HRESULT STDMETHODCALLTYPE COMPropertyBag<ValueType, HashType>::Read(LPCOLESTR pszPropName, VARIANT* pVar, IErrorLog* pErrorLog)
+template<typename ValueType, typename KeyType, typename HashType>
+HRESULT STDMETHODCALLTYPE COMPropertyBag<ValueType, KeyType, HashType>::Read(LPCOLESTR pszPropName, VARIANT* pVar, IErrorLog* pErrorLog)
{
if (!pszPropName)
return E_POINTER;
@@ -145,32 +145,45 @@ HRESULT STDMETHODCALLTYPE COMPropertyBag<ValueType, HashType>::Read(LPCOLESTR ps
V_VT(pVar) = VT_EMPTY;
COMVariantSetter<ValueType>::setVariant(pVar, it->second);
- if (requestedType != COMVariantSetter<ValueType>::VariantType && requestedType != VT_EMPTY)
+ if (requestedType != COMVariantSetter<ValueType>::variantType(it->second) && requestedType != VT_EMPTY)
return ::VariantChangeType(pVar, pVar, VARIANT_NOUSEROVERRIDE | VARIANT_ALPHABOOL, requestedType);
return S_OK;
}
-template<typename ValueType, typename HashType>
-HRESULT STDMETHODCALLTYPE COMPropertyBag<ValueType, HashType>::Write(LPCOLESTR pszPropName, VARIANT* pVar)
+template<typename ValueType, typename KeyType, typename HashType>
+HRESULT STDMETHODCALLTYPE COMPropertyBag<ValueType, KeyType, HashType>::Write(LPCOLESTR pszPropName, VARIANT* pVar)
{
return E_FAIL;
}
-template<typename ValueType, typename HashType>
-HRESULT STDMETHODCALLTYPE COMPropertyBag<ValueType, HashType>::Read(ULONG cProperties, PROPBAG2*, IErrorLog*, VARIANT* pvarValue, HRESULT* phrError)
+template<typename ValueType, typename KeyType, typename HashType>
+HRESULT STDMETHODCALLTYPE COMPropertyBag<ValueType, KeyType, HashType>::Read(ULONG cProperties, PROPBAG2* pPropBag, IErrorLog* pErrorLog, VARIANT* pvarValue, HRESULT* phrError)
{
- return E_NOTIMPL;
+ if (!pPropBag || !pvarValue || !phrError)
+ return E_POINTER;
+
+ HRESULT hr = S_OK;
+
+ for (ULONG i = 0; i < cProperties; ++i) {
+ VariantInit(&pvarValue[i]);
+ pvarValue[i].vt = pPropBag[i].vt;
+ phrError[i] = Read(pPropBag[i].pstrName, &pvarValue[i], pErrorLog);
+ if (FAILED(phrError[i]))
+ hr = E_FAIL;
+ }
+
+ return hr;
}
-template<typename ValueType, typename HashType>
-HRESULT STDMETHODCALLTYPE COMPropertyBag<ValueType, HashType>::Write(ULONG cProperties, PROPBAG2*, VARIANT*)
+template<typename ValueType, typename KeyType, typename HashType>
+HRESULT STDMETHODCALLTYPE COMPropertyBag<ValueType, KeyType, HashType>::Write(ULONG cProperties, PROPBAG2*, VARIANT*)
{
return E_NOTIMPL;
}
-template<typename ValueType, typename HashType>
-HRESULT STDMETHODCALLTYPE COMPropertyBag<ValueType, HashType>::CountProperties(ULONG* pcProperties)
+template<typename ValueType, typename KeyType, typename HashType>
+HRESULT STDMETHODCALLTYPE COMPropertyBag<ValueType, KeyType, HashType>::CountProperties(ULONG* pcProperties)
{
if (!pcProperties)
return E_POINTER;
@@ -179,8 +192,8 @@ HRESULT STDMETHODCALLTYPE COMPropertyBag<ValueType, HashType>::CountProperties(U
return S_OK;
}
-template<typename ValueType, typename HashType>
-HRESULT STDMETHODCALLTYPE COMPropertyBag<ValueType, HashType>::GetPropertyInfo(ULONG iProperty, ULONG cProperties, PROPBAG2* pPropBag, ULONG* pcProperties)
+template<typename ValueType, typename KeyType, typename HashType>
+HRESULT STDMETHODCALLTYPE COMPropertyBag<ValueType, KeyType, HashType>::GetPropertyInfo(ULONG iProperty, ULONG cProperties, PROPBAG2* pPropBag, ULONG* pcProperties)
{
if (!pPropBag || !pcProperties)
return E_POINTER;
@@ -196,11 +209,11 @@ HRESULT STDMETHODCALLTYPE COMPropertyBag<ValueType, HashType>::GetPropertyInfo(U
;
for (ULONG j = 0; j < cProperties && current != end; ++j, ++current) {
// FIXME: the following fields aren't filled in
- //pPropBag[j].dwType; // (DWORD) Type of property. This will be one of the PROPBAG2_TYPE values.
- //pPropBag[j].cfType; // (CLIPFORMAT) Clipboard format or MIME type of the property.
- //pPropBag[j].clsid; // (CLSID) CLSID of the object. This member is valid only if dwType is PROPBAG2_TYPE_OBJECT.
+ //pPropBag[j].cfType; // (CLIPFORMAT) Clipboard format or MIME type of the property.
+ //pPropBag[j].clsid; // (CLSID) CLSID of the object. This member is valid only if dwType is PROPBAG2_TYPE_OBJECT.
- pPropBag[j].vt = COMVariantSetter<ValueType>::VariantType;
+ pPropBag[j].dwType = PROPBAG2_TYPE_DATA;
+ pPropBag[j].vt = COMVariantSetter<ValueType>::variantType(current->second);
pPropBag[j].dwHint = iProperty + j;
pPropBag[j].pstrName = (LPOLESTR)CoTaskMemAlloc(sizeof(wchar_t)*(current->first.length()+1));
if (!pPropBag[j].pstrName)
@@ -211,8 +224,8 @@ HRESULT STDMETHODCALLTYPE COMPropertyBag<ValueType, HashType>::GetPropertyInfo(U
return S_OK;
}
-template<typename ValueType, typename HashType>
-HRESULT STDMETHODCALLTYPE COMPropertyBag<ValueType, HashType>::LoadObject(LPCOLESTR pstrName, DWORD dwHint, IUnknown*, IErrorLog*)
+template<typename ValueType, typename KeyType, typename HashType>
+HRESULT STDMETHODCALLTYPE COMPropertyBag<ValueType, KeyType, HashType>::LoadObject(LPCOLESTR pstrName, DWORD dwHint, IUnknown*, IErrorLog*)
{
return E_NOTIMPL;
}
diff --git a/WebKit/win/COMVariantSetter.h b/WebKit/win/COMVariantSetter.h
index 5c6b21c..76ca927 100644
--- a/WebKit/win/COMVariantSetter.h
+++ b/WebKit/win/COMVariantSetter.h
@@ -36,7 +36,15 @@ namespace WebCore {
template<typename T> struct COMVariantSetter {};
-template<> struct COMVariantSetter<WebCore::String>
+template<typename T> struct COMVariantSetterBase
+{
+ static inline VARENUM variantType(const T&)
+ {
+ return COMVariantSetter<T>::VariantType;
+ }
+};
+
+template<> struct COMVariantSetter<WebCore::String> : COMVariantSetterBase<WebCore::String>
{
static const VARENUM VariantType = VT_BSTR;
@@ -49,7 +57,7 @@ template<> struct COMVariantSetter<WebCore::String>
}
};
-template<> struct COMVariantSetter<unsigned long long>
+template<> struct COMVariantSetter<unsigned long long> : COMVariantSetterBase<unsigned long long>
{
static const VARENUM VariantType = VT_UI8;
@@ -62,7 +70,7 @@ template<> struct COMVariantSetter<unsigned long long>
}
};
-template<> struct COMVariantSetter<int>
+template<> struct COMVariantSetter<int> : COMVariantSetterBase<int>
{
static const VARENUM VariantType = VT_I4;
@@ -75,7 +83,7 @@ template<> struct COMVariantSetter<int>
}
};
-template<typename T> struct COMVariantSetter<COMPtr<T> >
+template<typename T> struct COMVariantSetter<COMPtr<T> > : COMVariantSetterBase<COMPtr<T> >
{
static const VARENUM VariantType = VT_UNKNOWN;
@@ -90,7 +98,7 @@ template<typename T> struct COMVariantSetter<COMPtr<T> >
};
template<typename COMType, typename UnderlyingType>
-struct COMIUnknownVariantSetter
+struct COMIUnknownVariantSetter : COMVariantSetterBase<UnderlyingType>
{
static const VARENUM VariantType = VT_UNKNOWN;
@@ -103,4 +111,61 @@ struct COMIUnknownVariantSetter
}
};
+class COMVariant {
+public:
+ COMVariant()
+ {
+ ::VariantInit(&m_variant);
+ }
+
+ template<typename UnderlyingType>
+ COMVariant(UnderlyingType value)
+ {
+ ::VariantInit(&m_variant);
+ COMVariantSetter<UnderlyingType>::setVariant(&m_variant, value);
+ }
+
+ ~COMVariant()
+ {
+ ::VariantClear(&m_variant);
+ }
+
+ COMVariant(const COMVariant& other)
+ {
+ ::VariantInit(&m_variant);
+ other.copyTo(&m_variant);
+ }
+
+ COMVariant& operator=(const COMVariant& other)
+ {
+ other.copyTo(&m_variant);
+ return *this;
+ }
+
+ void copyTo(VARIANT* dest) const
+ {
+ ::VariantCopy(dest, const_cast<VARIANT*>(&m_variant));
+ }
+
+ VARENUM variantType() const { return static_cast<VARENUM>(V_VT(&m_variant)); }
+
+private:
+ VARIANT m_variant;
+};
+
+template<> struct COMVariantSetter<COMVariant>
+{
+ static inline VARENUM variantType(const COMVariant& value)
+ {
+ return value.variantType();
+ }
+
+ static void setVariant(VARIANT* variant, const COMVariant& value)
+ {
+ ASSERT(V_VT(variant) == VT_EMPTY);
+
+ value.copyTo(variant);
+ }
+};
+
#endif // COMVariantSetter
diff --git a/WebKit/win/ChangeLog b/WebKit/win/ChangeLog
index ae26480..bbafe2e 100644
--- a/WebKit/win/ChangeLog
+++ b/WebKit/win/ChangeLog
@@ -1,3 +1,1648 @@
+2009-02-12 Mark Rowe <mrowe@apple.com>
+
+ Merge r40886.
+
+ 2009-02-11 Brady Eidson <beidson@apple.com>
+
+ Fix my last checkin for more effect.
+
+ * WebHistoryItem.cpp:
+ (WebHistoryItem::initFromDictionaryRepresentation):
+
+2009-02-12 Mark Rowe <mrowe@apple.com>
+
+ Merge r40882.
+
+ 2009-02-11 Brady Eidson <beidson@apple.com>
+
+ Reviewed by Mark Rowe
+
+ <rdar://problem/6570573> Some visit counts in History.plist have insanely high values, can roll over to negative
+
+ Remove the item from the date caches before registering the visit. Otherwise it might not be successfully removed
+ and when we add it back later it will exist in the list twice. This will cause the entry to be written out twice,
+ which would lead to doubling (or more!) the visit count on next launch when these multiple items are merged.
+
+ * WebHistory.cpp:
+ (WebHistory::loadHistoryGutsFromURL):
+ (WebHistory::addItems):
+ (WebHistory::addItem): Add a mode that allows the entry being added to be discarded if an entry for the URL already
+ exists. Use that mode when reading the History.plist so only the most recent entry for a given URL will be used.
+ (WebHistory::visitedURL): Swap the removeItemFromDateCaches and visitedWithTitle calls.
+ * WebHistory.h:
+
+ * WebHistoryItem.cpp:
+ (WebHistoryItem::initFromDictionaryRepresentation): Add the negative-visit-count-correction-logic as implemented
+ for Mac in http://trac.webkit.org/changeset/40851.
+
+2009-02-06 Mark Rowe <mrowe@apple.com>
+
+ Merge r40726.
+
+ 2009-02-06 Dan Bernstein <mitz@apple.com>
+
+ Reviewed by Anders Carlsson.
+
+ - fix an assertion failure in Vector::at() beneath
+ WebHistoryItem::dictionaryRepresentation.
+
+ * WebHistoryItem.cpp:
+ (WebHistoryItem::dictionaryRepresentation): Give the numbers vector initial
+ size. Also reduced the inline capacity of the vector used for weekly visit
+ counts to 5, which is the expected maximum size.
+
+2009-02-06 Mark Rowe <mrowe@apple.com>
+
+ Merge r40713.
+
+ 2009-02-06 Maciej Stachowiak <mjs@apple.com>
+
+ Rubber stamped by Dan Bernstein.
+
+ - fix obvious problem in previous commit (|| used instead of &&)
+
+ * WebHistoryItem.cpp:
+ (WebHistoryItem::initFromDictionaryRepresentation):
+
+2009-02-06 Mark Rowe <mrowe@apple.com>
+
+ Merge r40712.
+
+ 2009-02-05 Maciej Stachowiak <mjs@apple.com> and Brady Eidson <beidson@apple.com>
+
+ Reviewed by Dan Bernstein and Geoff Garen..
+
+ - WebKit code to track per-day and per-week visit counts in history
+
+ For now this data is only exposed via SPI for performance reasons.
+
+ * Interfaces/IWebHistoryItemPrivate.idl: Added new interface.
+ * WebHistory.cpp:
+ (WebHistory::visitedURL): Use new recordInitialVisit method.
+ * WebHistoryItem.cpp:
+ (WebHistoryItem::initFromDictionaryRepresentation): Add parsing support
+ for new data.
+ (WebHistoryItem::dictionaryRepresentation): Add saving support for
+ new data.
+ (WebHistoryItem::getDailyVisitCounts): SPI accessor.
+ (WebHistoryItem::getWeeklyVisitCounts): SPI accessor.
+ (WebHistoryItem::recordInitialVisit): Tell WebCore to record an initial visit.
+ * WebHistoryItem.h:
+
+2009-02-04 Steve Falkenburg <sfalken@apple.com>
+
+ Merge r40365.
+
+ 2009-01-29 Adam Roben <aroben@apple.com>
+
+ Build fix after r40353
+
+ * WebCoreSupport/WebFrameLoaderClient.cpp:
+ (WebFrameLoaderClient::loadURLIntoChild): Removed the check for
+ FrameLoadTypeReloadAllowingStaleData.
+
+2009-02-04 Steve Falkenburg <sfalken@apple.com>
+
+ Merge r40511.
+
+ 2009-02-02 Geoffrey Garen <ggaren@apple.com>
+
+ Build fix.
+
+ * WebCoreSupport/WebFrameLoaderClient.cpp:
+ (WebFrameLoaderClient::loadURLIntoChild):
+
+2009-02-04 Steve Falkenburg <sfalken@apple.com>
+
+ Merge part of r40470.
+
+ 2009-01-31 Matt Lilek <webkit@mattlilek.com>
+
+ Not reviewed, build fixes.
+
+ * WebCoreSupport/WebContextMenuClient.cpp:
+ (WebContextMenuClient::searchWithGoogle):
+
+2009-02-03 Mark Rowe <mrowe@apple.com>
+
+ Merge r40392.
+
+ 2009-01-29 Sam Weinig <sam@webkit.org>
+
+ Fix Windows build
+
+ * WebHistoryItem.cpp:
+ (WebHistoryItem::initFromDictionaryRepresentation):
+
+2009-02-03 Mark Rowe <mrowe@apple.com>
+
+ Merge r40529.
+
+ 2009-02-03 Geoffrey Garen <ggaren@apple.com>
+
+ Build fix.
+
+ * WebHistory.cpp:
+ (WebHistory::visitedURL):
+
+2009-02-03 Mark Rowe <mrowe@apple.com>
+
+ Merge r40528.
+
+ 2009-02-02 Geoffrey Garen <ggaren@apple.com>
+
+ Build fix.
+
+ * WebHistory.cpp:
+ (WebHistory::visitedURL):
+
+2009-02-03 Mark Rowe <mrowe@apple.com>
+
+ Merge r40511.
+
+ 2009-02-02 Geoffrey Garen <ggaren@apple.com>
+
+ Build fix.
+
+ * WebCoreSupport/WebFrameLoaderClient.cpp:
+ (WebFrameLoaderClient::loadURLIntoChild):
+
+2009-02-03 Mark Rowe <mrowe@apple.com>
+
+ Merge r40508.
+
+ 2009-02-02 Geoffrey Garen <ggaren@apple.com>
+
+ Reviewed by Sam Weinig.
+
+ Track redirects in global history.
+
+ * Interfaces/IWebFramePrivate.idl: Updated for WebCore rename.
+
+ * WebCoreSupport/WebFrameLoaderClient.cpp:
+ (WebFrameLoaderClient::updateGlobalHistory):
+ (WebFrameLoaderClient::updateGlobalHistoryForRedirectWithoutHistoryItem):
+ Store redirect information in global history.
+
+ (WebFrameLoaderClient::loadURLIntoChild): Updated for extra parameter.
+
+ * WebCoreSupport/WebFrameLoaderClient.h: See above.
+
+ * WebFrame.cpp:
+ (WebFrame::loadRequest):
+ (WebFrame::loadData): Updated for extra parameter.
+
+ * WebHistory.cpp:
+ (WebHistory::visitedURL):
+ (WebHistory::visitedURLForRedirectWithoutHistoryItem): Store redirect
+ information in global history.
+
+ * WebHistory.h: See above.
+
+2009-02-03 Mark Rowe <mrowe@apple.com>
+
+ Merge r40503.
+
+ 2009-02-02 Brady Eidson <beidson@apple.com>
+
+ Reviewed by Dan Bernstein
+
+ Transition Windows WebHistory to using the same "update already existing History Items" technique that Mac does.
+
+ * Interfaces/IWebHistoryItemPrivate.idl:
+ * WebCoreSupport/WebFrameLoaderClient.cpp:
+ (WebFrameLoaderClient::updateGlobalHistory):
+
+ * WebHistory.cpp:
+ (WebHistory::visitedURL):
+ * WebHistory.h:
+
+ * WebHistoryItem.cpp:
+ (WebHistoryItem::visitedWithTitle):
+ * WebHistoryItem.h:
+
+2009-02-03 Mark Rowe <mrowe@apple.com>
+
+ Merge r40382.
+
+ 2009-01-29 Sam Weinig <sam@webkit.org>
+
+ Reviewed by Anders Carlsson.
+
+ Second step in tracking the urls a HistoryItem was redirected through
+ Add SPI to access the array of redirect urls associated with a HistoryItem.
+
+ * Interfaces/IWebHistoryItemPrivate.idl:
+ * WebHistoryItem.cpp:
+ (WebHistoryItem::dictionaryRepresentation):
+ (WebHistoryItem::redirectURLs):
+ * WebHistoryItem.h:
+
+2009-02-03 Mark Rowe <mrowe@apple.com>
+
+ Merge r40380.
+
+ 2009-01-29 Sam Weinig <sam@webkit.org>
+
+ Reviewed by Mark Rowe.
+
+ First step in tracking the urls a HistoryItem was redirected through.
+
+ * WebHistoryItem.cpp:
+ (WebHistoryItem::initFromDictionaryRepresentation):
+ (WebHistoryItem::dictionaryRepresentation):
+
+2009-02-03 Mark Rowe <mrowe@apple.com>
+
+ Merge r40436.
+
+ 2009-01-30 Geoffrey Garen <ggaren@apple.com>
+
+ Build fix.
+
+ * Interfaces/IWebFramePrivate.idl:
+ * WebCoreSupport/WebFrameLoaderClient.cpp:
+ (WebFrameLoaderClient::loadURLIntoChild):
+
+2009-02-03 Mark Rowe <mrowe@apple.com>
+
+ Merge r40353.
+
+ 2009-01-28 Geoffrey Garen <ggaren@apple.com>
+
+ Reviewed by Sam Weinig.
+
+ Updated for WebCore rename.
+
+ * WebView.cpp:
+ (WebView::setCustomTextEncodingName):
+
+2009-02-03 Mark Rowe <mrowe@apple.com>
+
+ Merge r40366.
+
+ 2009-01-29 Adam Roben <aroben@apple.com>
+
+ Fix Bug 23623: Windowed Flash instances aren't captured when a WebView
+ receives a WM_PRINTCLIENT message
+
+ <https://bugs.webkit.org/show_bug.cgi?id=23623>
+ <rdar://problem/6513921>
+ <rdar://problem/6536874>
+
+ Reviewed by Darin Adler.
+
+ * WebFrame.cpp:
+ (WebFrame::paintDocumentRectToContext):
+ (WebFrame::spoolPages):
+ Call GraphicsContext::setShouldIncludeChildWindows so that child
+ windows will be painted into the GraphicsContext rather than painted
+ directly to the screen.
+
+ * WebView.cpp:
+ (WebView::updateBackingStore): Added a windowsToPaint parameter, which
+ we pass along to paintIntoBackingStore.
+
+ (WebView::paint): Tell updateBackingStore to paint child windows if
+ we're not painting to the screen.
+
+ (WebView::paintIntoBackingStore): Added a windowsToPaint paramter,
+ which we use to tell our GraphicsContext whether or not to include
+ child windows.
+
+ * WebView.h: Added windowsToPaint parameters to paintIntoBackingStore
+ and updateBackingStore (which I also made private).
+
+2009-01-27 Brady Eidson <beidson@apple.com>
+
+ Reviewed by Dan Bernstein
+
+ Rework FrameLoaderClient to work on a CachedFrame basis instead of CachedPage
+
+ * WebCoreSupport/WebFrameLoaderClient.cpp:
+ (WebFrameLoaderClient::savePlatformDataToCachedFrame):
+ (WebFrameLoaderClient::transitionToCommittedFromCachedFrame):
+ * WebCoreSupport/WebFrameLoaderClient.h:
+
+ * WebFrame.cpp:
+ * WebFrame.h:
+
+2009-01-26 Adam Roben <aroben@apple.com>
+
+ Fix an assertion failure when Safari loads an error page
+
+ Reviewed by Alexey Proskuryakov.
+
+ * WebFrame.cpp:
+ (WebFrame::loadData): Use the two-argument version of KURL and
+ MarshallingHelpers::BSTRToKURL, for reasons mentioned in r40248.
+
+2009-01-26 Adam Roben <aroben@apple.com>
+
+ Fix an assertion on launch in KURL::KURL
+
+ All URL strings passed in to the WebKit API need to be passed to
+ MarshallingHelpers::BSTRToKURL so that they may be properly parsed.
+
+ Reviewed by Alexey Proskuryakov.
+
+ * MarshallingHelpers.cpp:
+ (MarshallingHelpers::BSTRToKURL): Changed to use the two-argument
+ constructor for KURL so that the strings will be parsed rather than
+ assumed to be in the correct encoding/form.
+
+ * WebResource.cpp:
+ (WebResource::initWithData):
+ * WebURLResponse.cpp:
+ (WebURLResponse::initWithURL):
+ * WebView.cpp:
+ (WebView::userAgentForURL):
+ (WebView::copyURL):
+ Changed to use MarshallingHelpers::BSTRToKURL instead of trying to do
+ the work manually.
+
+2009-01-25 Darin Adler <darin@apple.com>
+
+ Try to fix Windows build.
+
+ * WebView.cpp: Added FloatQuad.h.
+
+2009-01-23 Brent Fulgham <bfulgham@webkit.org>
+
+ Reviewed by Darin Adler
+
+ https://bugs.webkit.org/show_bug.cgi?id=23492
+ Exclude calls to WebKitSystemInterface functions when not
+ using CoreGraphics.
+
+ * WebPreferences.cpp:
+ (WebPreferences::setFontSmoothing):
+ (WebPreferences::setFontSmoothingContrast):
+ * WebTextRenderer.cpp:
+ (WebTextRenderer::registerPrivateFont):
+
+2009-01-23 Brady Eidson <beidson@apple.com>
+
+ Rubberstamped by Darin Adler
+
+ Rename CachedPagePlatformData to CachedFramePlatformData to more accurately reflect its true role.
+
+ * WebCachedFramePlatformData.h: Copied from WebKit/win/WebCachedPagePlatformData.h.
+ (WebCachedFramePlatformData::WebCachedFramePlatformData):
+ * WebCachedPagePlatformData.h: Removed.
+
+ * WebCoreSupport/WebFrameLoaderClient.cpp:
+ (WebFrameLoaderClient::savePlatformDataToCachedPage):
+
+ * WebKit.vcproj/WebKit.vcproj:
+
+2009-01-22 Eric Roman <eroman@chromium.org>
+
+ Reviewed by Eric Seidel.
+
+ https://bugs.webkit.org/show_bug.cgi?id=20806
+ Deprecate RSSFeedReferrer() and setRSSFeedReferrer().
+
+ * WebHistoryItem.cpp:
+ (WebHistoryItem::RSSFeedReferrer):
+ (WebHistoryItem::setRSSFeedReferrer):
+
+2009-01-19 Sam Weinig <sam@webkit.org>
+
+ Rubber-stamped by Gavin Barraclough.
+
+ Remove temporary operator-> from JSValuePtr.
+
+ * WebScriptCallFrame.cpp:
+ (WebScriptCallFrame::jsValueToString):
+ * WebView.cpp:
+ (WebView::stringByEvaluatingJavaScriptFromString):
+
+2009-01-19 Adam Roben <aroben@apple.com>
+
+ Windows build fix
+
+ * DOMCoreClasses.cpp: Replaced "using namespace WebCore" with
+ individual using directives for each type we need from that namespace,
+ to avoid conflicts between DOMObject and WebCore::DOMObject.
+ (DOMElement::font): Added a now-needed WebCore::.
+
+2009-01-17 Steve Falkenburg <sfalken@apple.com>
+
+ Build fix.
+
+ * WebCoreSupport/WebDragClient.cpp:
+ (WebDragClient::createDragImageForLink):
+
+2009-01-17 David Hyatt <hyatt@apple.com>
+
+ Eliminate dependencies on backslashAsCurrencySymbol from WebKit.
+
+ Reviewed by Oliver Hunt
+
+ * WebFrame.cpp:
+ (WebFrame::selectedString):
+
+2009-01-16 Steve Falkenburg <sfalken@apple.com>
+
+ <rdar://problem/6502511> Safari crashes if it's running while the desktop theme is changed.
+
+ This was caused by mismatched ENABLE definitions across WebCore and WebKit.
+
+ Several virtual methods were added to RenderTheme.h, conditionalized by ENABLE(VIDEO).
+ In addition to adding ENABLE_VIDEO to WebKit, this change also adds ENABLE_DATABASE and ENABLE_ICONDATABASE
+ to Windows WebCore/WebKit, and adds ENABLE_WORKERS, and several ENABLE_SVG_ flags to WebKit on Windows.
+ Our Windows ENABLE flags now match Mac.
+
+ Reviewed by Adele Peterson.
+
+ * WebKit.vcproj/WebKit.vcproj:
+
+2009-01-15 Adele Peterson <adele@apple.com>
+
+ Reviewed by Darin Adler.
+
+ Fix for https://bugs.webkit.org/show_bug.cgi?id=21799
+ <rdar://problem/6310684> Crash in dumpFramesAsText() when running http/tests/security/cross-origin-xsl-BLOCKED.html
+
+ Return S_OK or E_FAIL based on the result from CreateInstance.
+ This was causing DumpRenderTree to not realize it had just gotten a null documentElement.
+
+ * DOMCoreClasses.cpp: Made all functions that return the result of CreateInstance consistent.
+ (DOMNode::parentNode):
+ (DOMNode::ownerDocument):
+ (DOMNodeList::item):
+ (DOMDocument::documentElement):
+ (DOMDocument::createElement):
+ (DOMDocument::getElementsByTagName):
+ (DOMDocument::getElementsByTagNameNS):
+ (DOMDocument::getElementById):
+ (DOMDocument::getComputedStyle):
+ (DOMDocument::createEvent):
+ (DOMElement::style):
+
+2009-01-14 Adele Peterson <adele@apple.com>
+
+ Reviewed by Darin Adler.
+
+ Fix for https://bugs.webkit.org/show_bug.cgi?id=23335
+ <rdar://problem/6247650> Update <input type="search"> for RenderThemeWin
+
+ Added artwork.
+
+ * WebKit.vcproj/WebKit.rc:
+ * WebKit.vcproj/WebKit.vcproj:
+ * WebKit.vcproj/resource.h:
+ * WebKit.vcproj/searchCancel.png: Added.
+ * WebKit.vcproj/searchCancelPressed.png: Added.
+ * WebKit.vcproj/searchMagnifier.png: Added.
+ * WebKit.vcproj/searchMagnifierResults.png: Added.
+ * WebKitDLL.cpp:(loadResourceIntoBuffer):
+
+2009-01-14 Dan Bernstein <mitz@apple.com>
+
+ Reviewed by John Sullivan.
+
+ - update copyright
+
+ * WebKit.resources/Info.plist:
+ * WebKit.vcproj/WebKit.rc:
+
+2009-01-13 Steve Falkenburg <sfalken@apple.com>
+
+ Build fix.
+
+ * WebScriptCallFrame.cpp:
+ (WebScriptCallFrame::jsValueToString):
+
+2009-01-12 Brady Eidson <beidson@apple.com>
+
+ Reviewed by Dan Bernstein
+
+ <rdar://problem/6490446> - Crash when going back to a cached page
+
+ * WebCoreSupport/WebFrameLoaderClient.cpp:
+ (WebFrameLoaderClient::savePlatformDataToCachedPage): ENABLE(CFNETWORK) needed to be USE(CFNETWORK)
+
+2009-01-12 Brady Eidson <beidson@apple.com>
+
+ Reviewed by Darin Adler
+
+ <rdar://problem/6468274> - Track Non-get requests in global history
+
+ * WebCoreSupport/WebFrameLoaderClient.cpp:
+ (WebFrameLoaderClient::updateGlobalHistory):
+
+ * WebHistory.cpp:
+ (WebHistory::addItem):
+ * WebHistory.h:
+
+ * Interfaces/IWebHistoryItemPrivate.idl:
+ * WebHistoryItem.cpp:
+ (WebHistoryItem::initFromDictionaryRepresentation):
+ (WebHistoryItem::dictionaryRepresentation):
+ (WebHistoryItem::lastVisitWasHTTPNonGet):
+ (WebHistoryItem::setLastVisitWasHTTPNonGet):
+ * WebHistoryItem.h:
+
+2009-01-12 Julien Chaffraix <jchaffraix@pleyo.com>
+
+ Reviewed by Darin Adler.
+
+ Bug 22861: Turn the FontCache into a singleton
+ https://bugs.webkit.org/show_bug.cgi?id=22861
+
+ * WebCoreStatistics.cpp:
+ (WebCoreStatistics::cachedFontDataCount):
+ (WebCoreStatistics::cachedFontDataInactiveCount):
+ (WebCoreStatistics::purgeInactiveFontData):
+ Redirected all the static calls to the global FontCache
+ instance.
+
+2009-01-11 Dmitry Titov <dimich@chromium.org>
+
+ Reviewed by Darin Adler.
+
+ https://bugs.webkit.org/show_bug.cgi?id=23207
+ Moved currentTime() to from WebCore to WTF.
+
+ * WebDownload.cpp: a different header file included.
+ * WebDropSource.cpp: a different header file included.
+
+2009-01-09 Darin Adler <darin@apple.com>
+
+ Reviewed by Jon Honeycutt.
+
+ Bug 22913: REGRESSION: Space bar doesn't scroll on windows
+ https://bugs.webkit.org/show_bug.cgi?id=22913
+ rdar://problem/6479834
+
+ * WebView.cpp:
+ (WebView::keyPress): Removed code to handle space bar here; put it in
+ WebCore instead.
+
+2009-01-09 Brent Fulgham <bfulgham@gmail.com>
+
+ Reviewed by Adam Roben.
+
+ Fixes: http://bugs.webkit.org/show_bug.cgi?id=23092
+ Separate CFNetwork-specific code in WebKit.dll into separate
+ implementation files. Create cURL stub files to be populated
+ with new implementation in a future bug report.
+
+ * WebCookieManager.cpp: Move CFNetwork-specific routines to
+ the new WebCookieManagerCFNet.cpp file.
+ (WebCookieManager::Release):
+ * WebCookieManagerCFNet.cpp: Copied from WebCookieManager.cpp.
+ (WebCookieManager::cookieStorage):
+ * WebCookieManagerCurl.cpp: Added.
+ (WebCookieManager::cookieStorage):
+ (WebCookieManager::setCookieStorage):
+ * WebCoreSupport/WebFrameLoaderClient.cpp: Conditionalize two
+ methods in this file.
+ (WebFrameLoaderClient::dispatchDidReceiveAuthenticationChallenge):
+ (WebFrameLoaderClient::savePlatformDataToCachedPage):
+ * WebDownload.cpp: Move CFNetwork-specific logic to the new
+ WebDownloadCFNet.cpp
+ (WebDownload::bundleExtension):
+ (WebDownload::bundleMagicNumber):
+ (WebDownload::bundlePathForTargetPath):
+ (WebDownload::extractResumeDataFromBundle): Made static class method
+ so it could be used in WebDownload.cpp and WebDownloadCFNet.cpp
+ (WebDownload::appendResumeDataToBundle): Made static class method
+ so it could be used in WebDownload.cpp and WebDownloadCFNet.cpp
+ * WebDownload.h:
+ * WebDownloadCFNet.cpp: Copied from WebDownload.cpp.
+ (WebDownload::initToResumeWithBundle):
+ (WebDownload::setDestination):
+ (didFailCallback):
+ * WebDownloadCurl.cpp: Added.
+ (WebDownload::init):
+ (WebDownload::initWithRequest):
+ (WebDownload::initToResumeWithBundle):
+ (WebDownload::start):
+ (WebDownload::cancel):
+ (WebDownload::cancelForResume):
+ (WebDownload::deletesFileUponFailure):
+ (WebDownload::setDeletesFileUponFailure):
+ (WebDownload::setDestination):
+ (WebDownload::cancelAuthenticationChallenge):
+ (WebDownload::continueWithoutCredentialForAuthenticationChallenge):
+ (WebDownload::useCredential):
+ * WebKit.vcproj/WebKit.vcproj: Modify Apple targets to exclude the
+ new cURL files. Modify Cairo targets to exclude CFNet files.
+ * WebMutableURLRequest.cpp: Conditionalize the single method
+ with a CFNetwork-speicic call.
+ (WebMutableURLRequest::mutableCopy):
+ * WebURLAuthenticationChallenge.cpp: Conditionalize one line that
+ causes build problems for cURL. This will be removed later.
+ (WebURLAuthenticationChallenge::initWithProtectionSpace):
+ * WebURLAuthenticationChallengeSender.cpp:
+ * WebURLAuthenticationChallengeSenderCFNet.cpp: Copied from WebURLAuthenticationChallengeSender.cpp.
+ (WebURLAuthenticationChallengeSender::useCredential):
+ * WebURLAuthenticationChallengeSenderCurl.cpp: Added.
+ (WebURLAuthenticationChallengeSender::cancelAuthenticationChallenge):
+ (WebURLAuthenticationChallengeSender::continueWithoutCredentialForAuthenticationChallenge):
+ (WebURLAuthenticationChallengeSender::useCredential):
+ * WebURLResponse.cpp: Exclude WebKitSystemInterface when compiling
+ for the cURL target.
+
+2009-01-09 Alexey Proskuryakov <ap@webkit.org>
+
+ Reviewed by Darin Adler.
+
+ Fix many appcache tests on Windows by making synchronous XMLHttpRequest throw on cache miss.
+
+ * WebFrame.cpp: (WebFrame::cannotShowURLError): Implement, so that synchronous XHR can
+ raise exceptions, as needed for AppCache tests. I do not know why this error was not
+ implemented.
+
+2009-01-09 Darin Adler <darin@apple.com>
+
+ Reviewed and landed by Adele Peterson.
+
+ Bug 23160: add setMemoryCacheClientCallsEnabled SPI so Safari can be faster with activity window closed
+ https://bugs.webkit.org/show_bug.cgi?id=23160
+
+ * Interfaces/IWebViewPrivate.idl: Added setMemoryCacheDelegateCallsEnabled.
+ * WebView.cpp:
+ (WebView::setMemoryCacheDelegateCallsEnabled): Ditto.
+ * WebView.h: Ditto.
+
+2009-01-08 Dan Bernstein <mitz@apple.com>
+
+ Reviewed by Adam Roben.
+
+ - WebPreferences changes to support Core Graphics native glyph drawing
+
+ * Interfaces/IWebPreferencesPrivate.idl: Added font smoothing contrast
+ getter and setter.
+ * WebPreferenceKeysPrivate.h: Added
+ WebKitFontSmoothingContrastPreferenceKey.
+ * WebPreferences.cpp:
+ (WebPreferences::initializeDefaultSettings): Initialized
+ WebKitFontSmoothingContrastPreferenceKey to 2.
+ (WebPreferences::setFloatValue): Added.
+ (WebPreferences::setFontSmoothing): Changed to map
+ FontSmoothingTypeWindows to FontSmoothingTypeMedium.
+ (WebPreferences::fontSmoothingContrast): Added.
+ (WebPreferences::setFontSmoothingContrast): Added. Calls
+ wkSetFontSmoothingContrast().
+ * WebPreferences.h:
+
+2009-01-08 Steve Falkenburg <sfalken@apple.com>
+
+ <rdar://problem/6474244> REGRESSION(39561-39603): Heap corruption when saving passwords?
+
+ Reviewed by Adam Roben.
+
+ * WebView.cpp:
+ (WebViewWndProc): Hold a ref to the WebView inside the WNDPROC, since it could go away in an event handler.
+
+2009-01-07 Jon Honeycutt <jhoneycutt@apple.com>
+
+ Fix a crash with querying a WebView for its global history item when
+ its associated Page has no global history item.
+
+ Reviewed by Dan Bernstein.
+
+ * WebView.cpp:
+ (WebView::globalHistoryItem): If the Page has no global history item,
+ report 0.
+
+2009-01-06 Adam Roben <aroben@apple.com>
+
+ Fix Bug 22262: Clicking close ("X") button in docked Web Inspector
+ clears Web Inspector but doesn't close it
+
+ <https://bugs.webkit.org/show_bug.cgi?id=22262>
+ <rdar://problem/6371873>
+
+ Reviewed by Darin Adler.
+
+ * WebCoreSupport/WebInspectorClient.cpp:
+ (WebInspectorClient::WebInspectorClient): Initialize new member.
+ (WebInspectorClient::showWindow): Moved code from here to
+ showWindowWithoutNotifications.
+ (WebInspectorClient::closeWindow): Moved code from here to
+ closeWindowWithoutNotifications.
+
+ (WebInspectorClient::attachWindow):
+ (WebInspectorClient::detachWindow):
+ Record whether or not we should be attached, then close and reopen the
+ window without notifying the InspectorController. Code that was in
+ these functions moved to showWindowWithoutNotifications and
+ closeWindowWithoutNotifications, respectively.
+
+ (WebInspectorClient::closeWindowWithoutNotifications): Added. Code
+ came from closeWindow and detachWindow.
+ (WebInspectorClient::showWindowWithoutNotifications): Added. Code came
+ from showWindow and attachWindow.
+
+ * WebCoreSupport/WebInspectorClient.h: Added
+ {close,show}WindowWithoutNotifications and m_shouldAttachWhenShown.
+
+2009-01-06 Anders Carlsson <andersca@apple.com>
+
+ Reviewed by Sam Weinig.
+
+ Add a way for application to provide custom, full frame, views for certain MIME types.
+
+ * Interfaces/IWebEmbeddedView.idl:
+ Add loading related methods.
+
+ * Interfaces/IWebViewPrivate.idl:
+ Add new registerEmbeddedViewMIMEType method.
+
+ * WebCoreSupport/EmbeddedWidget.cpp:
+ (EmbeddedWidget::didReceiveResponse):
+ (EmbeddedWidget::didReceiveData):
+ (EmbeddedWidget::didFinishLoading):
+ (EmbeddedWidget::didFail):
+ Implement these and call the IEmbeddedView methods.
+
+ * WebCoreSupport/EmbeddedWidget.h:
+ Inherit from PluginManualLoader.
+
+ * WebCoreSupport/WebFrameLoaderClient.cpp:
+ (WebFrameLoaderClient::redirectDataToPlugin):
+ Handle the case where the widget is an EnbeddedWidget.
+
+ (WebFrameLoaderClient::shouldUsePluginDocument):
+ Have this call WebView::shouldUseEmbeddedView.
+
+ * WebView.cpp:
+ (WebView::canShowMIMEType):
+ Have this call WebView::shouldUseEmbeddedView.
+
+ (WebView::registerEmbeddedViewMIMEType):
+ Add the MIME type to the set.
+
+ (WebView::shouldUseEmbeddedView):
+ Given a MIME type, returns whether an embedded view should be used or not.
+
+2009-01-06 David Kilzer <ddkilzer@apple.com>
+
+ BUILD FIX (r39641): Try to fix WebIconDatabase build errors #4
+
+ * WebIconDatabase.cpp:
+ (WebIconDatabase::isEnabled): Added 'WebIconDatabase::' to method
+ signature. (Another copy-paste error.)
+ (WebIconDatabase::setEnabled): Ditto.
+ * WebIconDatabase.h:
+ (WebIconDatabase::startUpIconDatabase): Make private again.
+ (WebIconDatabase::shutDownIconDatabase): Ditto.
+
+2009-01-06 David Kilzer <ddkilzer@apple.com>
+
+ BUILD FIX (r39641): Try to fix build errors #3
+
+ Try to fix the following (more specific) build errors:
+
+ WebIconDatabase.cpp
+ ..\WebIconDatabase.cpp(255) : error C2248: 'WebIconDatabase::shutDownIconDatabase' : cannot access private member declared in class 'WebIconDatabase'
+ ...\webkit\win\WebIconDatabase.h(61) : see declaration of 'WebIconDatabase::shutDownIconDatabase'
+ ...\webkit\win\WebIconDatabase.h(51) : see declaration of 'WebIconDatabase'
+ ..\WebIconDatabase.cpp(255) : error C2352: 'WebIconDatabase::shutDownIconDatabase' : illegal call of non-static member function
+ ...\webkit\win\WebIconDatabase.h(61) : see declaration of 'WebIconDatabase::shutDownIconDatabase'
+ ..\WebIconDatabase.cpp(258) : error C2248: 'WebIconDatabase::startUpIconDatabase' : cannot access private member declared in class 'WebIconDatabase'
+ ...\webkit\win\WebIconDatabase.h(60) : see declaration of 'WebIconDatabase::startUpIconDatabase'
+ ...\webkit\win\WebIconDatabase.h(51) : see declaration of 'WebIconDatabase'
+ ..\WebIconDatabase.cpp(258) : error C2352: 'WebIconDatabase::startUpIconDatabase' : illegal call of non-static member function
+ ...\webkit\win\WebIconDatabase.h(60) : see declaration of 'WebIconDatabase::startUpIconDatabase'
+
+ * WebIconDatabase.cpp:
+ (setEnabled): Get instance of shared WebIconDatabase, then call
+ startUp/shutDown methods on it.
+ * WebIconDatabase.h:
+ (WebIconDatabase::startUpIconDatabase): Make protected again.
+ (WebIconDatabase::shutDownIconDatabase): Ditto.
+
+2009-01-06 David Kilzer <ddkilzer@apple.com>
+
+ BUILD FIX (r39641): Try to fix build errors again
+
+ Try to fix the following build errors:
+
+ WebIconDatabase.cpp
+ ..\WebIconDatabase.cpp(255) : error C3861: 'shutDownIconDatabase': identifier not found
+ ..\WebIconDatabase.cpp(258) : error C3861: 'startUpIconDatabase': identifier not found
+
+ * WebIconDatabase.cpp:
+ (setEnabled): Add class prefix to startUpIconDatabase() and
+ shutDownIconDatabase().
+ * WebIconDatabase.h:
+ (WebIconDatabase::startUpIconDatabase): Make private again.
+ (WebIconDatabase::shutDownIconDatabase): Ditto.
+
+2009-01-06 David Kilzer <ddkilzer@apple.com>
+
+ BUILD FIX (r39641): Try to fix build error
+
+ Try to fix the following build errors:
+
+ WebIconDatabase.cpp
+ ..\WebIconDatabase.cpp(255) : error C3861: 'shutDownIconDatabase': identifier not found
+ ..\WebIconDatabase.cpp(258) : error C3861: 'startUpIconDatabase': identifier not found
+
+ * WebIconDatabase.h:
+ (WebIconDatabase::startUpIconDatabase): Make protected.
+ (WebIconDatabase::shutDownIconDatabase): Ditto.
+
+2009-01-06 David Kilzer <ddkilzer@apple.com>
+
+ BUILD FIX (r39641): Fix more silly errors
+
+ Fixes the following compilation errors:
+
+ WebIconDatabase.cpp
+ ..\WebIconDatabase.cpp(85) : error C2065: 'standardPrefs' : undeclared identifier
+ ..\WebIconDatabase.cpp(85) : error C2227: left of '->iconDatabaseLocation' must point to class/struct/union/generic type
+ type is ''unknown-type''
+ ..\WebIconDatabase.cpp(241) : error C2575: 'isEnabled' : only member functions and bases can be virtual
+ ..\WebIconDatabase.cpp(248) : error C2575: 'setEnabled' : only member functions and bases can be virtual
+ ..\WebIconDatabase.cpp(253) : error C3861: 'shutDownIconDatabase': identifier not found
+ ..\WebIconDatabase.cpp(256) : error C3861: 'startUpIconDatabase': identifier not found
+
+ * WebIconDatabase.cpp:
+ (WebIconDatabase::startUpIconDatabase): Redeclare standardPrefs
+ since this was in init() but not in this method after it was
+ extracted from init().
+ (isEnabled): Don't use "virtual" in method implementation
+ (silly copy-paste error).
+ (setEnabled): Ditto.
+
+2009-01-06 David Kilzer <ddkilzer@apple.com>
+
+ BUILD FIX (r39641): Remove STDMETHODCALLTYPE from method declarations in IWebIconDatabase.idl
+
+ * Interfaces/IWebIconDatabase.idl: Removed "STDMETHODCALLTYPE"
+ from silly copy-paste error in two method declarations.
+
+2009-01-05 David Kilzer <ddkilzer@apple.com>
+
+ Add API to enable, disable and check state of WebIconDatabase
+
+ Reviewed by Darin Adler & Timothy Hatcher.
+
+ Add WebIconDatabase::isEnabled() and WebIconDatabase::setEnabled()
+ API to make it possible to enable, disable and check the state of
+ the icon database.
+
+ * Interfaces/IWebIconDatabase.idl: Declared isEnabled() and
+ setEnabled() methods.
+ * WebIconDatabase.cpp:
+ (WebIconDatabase::init): Extracted code into startUpIconDatabase().
+ (WebIconDatabase::startUpIconDatabase): Added. Extracted from
+ init().
+ (WebIconDatabase::shutDownIconDatabase): Added. Method is empty
+ since there is nothing to do yet on Windows.
+ (isEnabled): Added.
+ (setEnabled): Added.
+ * WebIconDatabase.h: Added method declarations.
+
+2009-01-05 Anders Carlsson <andersca@apple.com>
+
+ Reviewed by Jon Honeycutt.
+
+ Pass more information in the property bag passed to embeddedViewWithArguments.
+
+ * Interfaces/IWebUIDelegatePrivate.idl:
+ Declare new keys.
+
+ * WebCoreSupport/WebFrameLoaderClient.cpp:
+ (WebFrameLoaderClient::createPlugin):
+ Pass the base URL, MIME type and the containing element to embeddedViewWithArguments.
+
+2009-01-05 Anders Carlsson <andersca@apple.com>
+
+ Reviewed by Darin Adler, Jon Honeycutt.
+
+ Add a templatized COMVariant constructor so we can make COMVariants out of
+ everything that has a COMVariantSetter specialization.
+
+ Add a COMVariantSetter specialization for COMVariant.
+
+ * COMVariantSetter.h:
+ (COMVariant::COMVariant):
+
+2009-01-05 Brent Fulgham <bfulgham@gmail.com>
+
+ Reviewed by Oliver Hunt.
+
+ Fixes: https://bugs.webkit.org/show_bug.cgi?id=23027
+
+ Removes the WebKitGraphics files from the Cairo build, as well
+ as excluding their link definitions. These are not used outside
+ of Safari, and should not be part of the 'Redistributable API.'
+
+ * WebKit.vcproj/WebKit.vcproj: Update *_Cairo targets to exclude
+ the WebKitGraphics.cpp/.h files.
+ * WebKit.vcproj/WebKit_Cairo.def: Added. File without Safari
+ link definitions.
+ * WebKit.vcproj/WebKit_Cairo_debug.def: Added. File without Safari
+ link definitions.
+
+2009-01-05 Anders Carlsson <andersca@apple.com>
+
+ Reviewed by Jon Honeycutt.
+
+ Add a simple, memory managed, wrapper around a VARIANT struuct.
+
+ * COMVariantSetter.h:
+ (COMVariant::COMVariant):
+ (COMVariant::~COMVariant):
+ (COMVariant::operator=):
+ (COMVariant::copyTo):
+ (COMVariant::variantType):
+
+2009-01-05 Adele Peterson <adele@apple.com>
+
+ Windows build fix.
+
+ * WebCoreSupport/WebChromeClient.cpp:
+
+2009-01-05 Anders Carlsson <andersca@apple.com>
+
+ Reviewed by Adam Roben.
+
+ Make it possible to have per value variant types.
+
+ * COMPropertyBag.h:
+ (::Read):
+ Call variantType here, passing in the value.
+
+ (::GetPropertyInfo):
+ Ditto.
+
+ * COMVariantSetter.h:
+ (COMVariantSetterBase::variantType):
+ Add COMVariantSetterBase, whose variantType implementation just returns the
+ VariantType variable. Make all existing classes inherit from COMVariantSetterBase.
+
+2009-01-05 Adam Treat <adam.treat@torchmobile.com>
+
+ Fix win build
+
+ * WebCoreSupport/WebChromeClient.h:
+
+2009-01-05 Adam Treat <adam.treat@torchmobile.com>
+
+ Reviewed by George Staikos.
+
+ Build fix for contentsSizeChanged
+
+ * WebCoreSupport/WebChromeClient.cpp:
+ (WebChromeClient::contentsSizeChanged):
+ * WebCoreSupport/WebChromeClient.h:
+
+2009-01-05 Anders Carlsson <andersca@apple.com>
+
+ Reviewed by Kevin Decker.
+
+ Use the ManualLoader class instead of assuming that the manual loader
+ is a plug-in view.
+
+ * WebCoreSupport/WebFrameLoaderClient.cpp:
+ (WebFrameLoaderClient::WebFrameLoaderClient):
+ (WebFrameLoaderClient::setMainDocumentError):
+ (WebFrameLoaderClient::committedLoad):
+ (WebFrameLoaderClient::finishedLoading):
+ (WebFrameLoaderClient::redirectDataToPlugin):
+ * WebCoreSupport/WebFrameLoaderClient.h:
+
+2009-01-04 Adam Treat <adam.treat@torchmobile.com>
+
+ Reviewed by George Staikos.
+
+ Make the apple windows port build with the new fixedLayoutSize feature
+
+ * WebCoreSupport/WebFrameLoaderClient.cpp:
+ (WebFrameLoaderClient::transitionToCommittedForNewPage):
+
+2008-12-20 Dan Bernstein <mitz@apple.com>
+
+ Reviewed by Ada Chan.
+
+ - expose the new allItems() method via a new IWebHistoryPrivate
+ interface
+
+ * Interfaces/IWebHistoryPrivate.idl: Added.
+ * Interfaces/WebKit.idl: Added IWebHistoryPrivate.idl.
+ * WebHistory.cpp:
+ (WebHistory::QueryInterface): Added IWebHistoryPrivate.
+ (WebHistory::allItems):
+ * WebHistory.h:
+
+2008-12-19 Geoffrey Garen <ggaren@apple.com>
+
+ Build fix.
+
+ * WebHistory.cpp:
+ (WebHistory::allItems):
+
+2008-12-19 Geoffrey Garen <ggaren@apple.com>
+
+ Reviewed by Darin Adler, Adele Peterson, Brady Eidson.
+
+ Added SPI for getting an unsorted vector of all items in history.
+
+ * WebHistory.cpp:
+ (WebHistory::orderedItemsLastVisitedOnDay):
+ (WebHistory::allItems):
+ * WebHistory.h:
+
+2008-12-18 Dan Bernstein <mitz@apple.com>
+
+ Reviewed by Sam Weinig.
+
+ - implement FrameLoaderClient::shouldUseCredentialStorage() by calling
+ a new resource load delegae method.
+
+ * Interfaces/IWebResourceLoadDelegatePrivate.idl: Added
+ a ne interface, IWebResourceLoadDelegatePrivate2, including a new
+ method, shouldUseCredentialStorage().
+ * WebCoreSupport/WebFrameLoaderClient.cpp:
+ (WebFrameLoaderClient::shouldUseCredentialStorage): Added. Calls the
+ delegate method. If the method is unimplemented, returns true for
+ backwards compatibility.
+ * WebCoreSupport/WebFrameLoaderClient.h:
+
+2008-12-18 Sam Weinig <sam@webkit.org>
+
+ Reviewed by John Sullivan.
+
+ Implement FrameLoaderClient::dispatchDidFirstVisuallyNonEmptyLayout() by calling
+ a new private frame load delegate method.
+
+ * Interfaces/IWebFrameLoadDelegatePrivate.idl:
+ * WebCoreSupport/WebFrameLoaderClient.cpp:
+ (WebFrameLoaderClient::dispatchDidFirstVisuallyNonEmptyLayout):
+ * WebCoreSupport/WebFrameLoaderClient.h:
+
+2008-12-16 Steve Falkenburg <sfalken@apple.com>
+
+ Windows build fix.
+
+ Reviewed by Stephanie Lewis.
+
+ * COMPropertyBag.h:
+ (::createInstance):
+ (::adopt):
+ (::QueryInterface):
+ (::AddRef):
+ (::Release):
+ (::Read):
+ (::Write):
+ (::CountProperties):
+ (::GetPropertyInfo):
+ (::LoadObject):
+ * WebURLResponse.cpp:
+ (WebURLResponse::allHeaderFields):
+
+2008-12-16 Stephanie Lewis <slewis@apple.com>
+
+ Another Windows Build Fix.
+
+ * WebURLResponse.cpp:
+ (WebURLResponse::allHeaderFields):
+
+2008-12-14 Dan Bernstein <mitz@apple.com>
+
+ Reviewed by Darin Adler.
+
+ - Windows equivalent of <rdar://problem/3258561>
+ WebHistoryAllItemsRemovedNotification should add items to userInfo
+
+ * WebHistory.cpp:
+ (WebHistory::removeAllItems): Changed to create an array of all items
+ and send it in the notification.
+
+2008-12-12 Brent Fulgham <bfulgham@gmail.com>
+
+ Reviewed by Oliver Hunt.
+
+ Fixes: https://bugs.webkit.org/show_bug.cgi?id=22805
+
+ Provides implementation of image drag for Windows Cairo back-end.
+ Switch to generic PlatformGraphicsContext data type, rather than
+ specific use of CoreGraphics types.
+
+ * WebCoreSupport/WebDragClient.cpp:
+ (WebDragClient::createDragImageForLink): Revise calls to use more
+ generic PlatformGraphicsContext data types and calls for better
+ portability.
+
+2008-12-12 Steve Falkenburg <sfalken@apple.com>
+
+ Update Windows cache sizes to match recent Mac change.
+
+ Reviewed by Stephanie Lewis, Sam Weinig.
+
+ * WebView.cpp:
+ (WebView::setCacheModel):
+
+2008-12-12 Tor Arne Vestbø <tavestbo@trolltech.com>
+
+ Rubber-stamped by Oliver Hunt.
+
+ Remove mutables from EmbeddedWidget
+
+ We can do this now that frameRectsChanged() is no longer const
+
+ * WebCoreSupport/EmbeddedWidget.h:
+
+2008-12-11 Cameron Zwarich <zwarich@apple.com>
+
+ Rubber-stamped by Mark Rowe.
+
+ Roll out r39212 due to assertion failures during layout tests, multiple
+ layout test failures, memory leaks, and obvious incorrectness.
+
+ * Interfaces/IWebPreferencesPrivate.idl:
+ * WebPreferenceKeysPrivate.h:
+ * WebPreferences.cpp:
+ * WebPreferences.h:
+
+2008-12-10 Glenn Wilson <gwilson@google.com>
+
+ Reviewed by Adam Roben.
+
+ Added support for overriding default preferences per-test.
+ https://bugs.webkit.org/show_bug.cgi?id=20534
+ Two new methods were added: resetToDefaults and overridePreference.
+
+ * Interfaces/IWebPreferencesPrivate.idl: new method signatures
+ * WebPreferenceKeysPrivate.h: added new key for internal state
+ * WebPreferences.cpp: added new methods
+ (WebPreferences::overridePreference): new method
+ (WebPreferences::resetToDefaults): new method
+ * WebPreferences.h: new method signatures
+
+2008-12-08 Tor Arne Vestbø <tavestbo@trolltech.com>
+
+ Reviewed by Darin Adler and Holger Freyther.
+
+ Make Widget::frameRectsChanged() and overrides non-const
+
+ This will hopefully allow us to get rid of some of the mutables in
+ the classes that react to the callback by changing their own state.
+
+ * WebCoreSupport/EmbeddedWidget.cpp:
+ (EmbeddedWidget::frameRectsChanged):
+ * WebCoreSupport/EmbeddedWidget.h:
+
+2008-12-09 Brett Wilson <brettw@chromium.org>
+
+ Reviewed by Dave Hyatt.
+
+ https://bugs.webkit.org/show_bug.cgi?id=22177
+
+ Add a callback on ChromeClient that the state of form elements on
+ the page has changed. This is to allow clients implementing session
+ saving to know when the current state is dirty.
+
+ * WebCoreSupport/WebChromeClient.h:
+ (WebChromeClient::formStateDidChange):
+
+ks2008-12-08 Dan Bernstein <mitz@apple.com>
+
+ Reviewed by Adam Roben.
+
+ - Fix nightly builds
+
+ * Interfaces/IWebViewPrivate.idl: Moved globalHistoryItem() to the end,
+ so that it comes after all methods used by Safari 3.2.1.
+
+2008-12-08 Dan Bernstein <mitz@apple.com>
+
+ Reviewed by John Sullivan.
+
+ - WebKit/win part of tracking the global history item for a WebView
+
+ * Interfaces/IWebViewPrivate.idl: Declared globalHistoryItem()
+ * WebView.cpp:
+ (WebView::globalHistoryItem): Added. Gets the page's global history
+ item.
+ * WebView.h:
+
+2008-12-06 Simon Fraser <simon.fraser@apple.com>
+
+ Reviewed by Dave Hyatt
+
+ https://bugs.webkit.org/show_bug.cgi?id=15671
+
+ Renderer::caretRect() is now localCaretRect(), which needs
+ converting to absolute coordinates (taking transforms into account).
+
+ * WebView.cpp:
+ (WebView::handleContextMenuEvent):
+
+2008-12-05 Darin Adler <darin@apple.com>
+
+ Reviewed by Alexey Proskuryakov.
+
+ - fix https://bugs.webkit.org/show_bug.cgi?id=22674
+ Webkit r39005 does not start, an entry point not found
+
+ * WebView.cpp:
+ (findCFNetworkModule): Added.
+ (findCopySharedURLCacheFunction): Added.
+ (WebView::setCacheModel): Call CFURLCacheCopySharedURLCache via dynamic loading
+ instead of compiling based on which version of CFNetwork headers are present.
+
+2008-12-04 Steve Falkenburg <sfalken@apple.com>
+
+ Implement IPropertyBag2::Read.
+ Fill in dwType for IPropertyBag2::GetPropertyInfo (we always use PROPBAG2_TYPE_DATA).
+ https://bugs.webkit.org/show_bug.cgi?id=22659
+
+ This fixes <rdar://problem/6419127> REGRESSION: Forms autocomplete is broken for "other forms"
+
+ Reviewed by Ada Chan, Alice Liu.
+
+ * COMPropertyBag.h:
+ (::Read): Implemented.
+ (::GetPropertyInfo): Set dwType to PROPBAG2_TYPE_DATA.
+
+2008-12-02 Adam Roben <aroben@apple.com>
+
+ Export new-ish JSCore convenience constructor functions
+
+ Reviewed by Jon Honeycutt.
+
+ * WebKit.vcproj/WebKit.def:
+ * WebKit.vcproj/WebKit_debug.def:
+ Export JSObjectMakeArray, JSObjectMakeDate, and JSObjectMakeRegExp.
+ Remove duplicate export of JSObjectMakeFunction.
+
+2008-12-02 Michael Moss <mmoss@chromium.org>
+
+ Reviewed by Eric Seidel.
+
+ - Fix http/tests/navigation/reload-subframe-*frame.html on Windows.
+ https://bugs.webkit.org/show_bug.cgi?id=20926
+
+ Change 31264 fixed this on Mac (since moved to WebCore/loader/FrameLoader.cpp), but was never ported to Windows.
+
+ * WebCoreSupport/WebFrameLoaderClient.cpp:
+ (WebFrameLoaderClient::loadURLIntoChild):
+
+2008-12-01 Steve Falkenburg <sfalken@apple.com>
+
+ Implement renderedImage for Windows.
+ https://bugs.webkit.org/show_bug.cgi?25648
+
+ Reviewed by Adam Roben.
+
+ * DOMCoreClasses.cpp:
+ (DOMElement::renderedImage):
+ * DOMCoreClasses.h:
+ * Interfaces/DOMPrivate.idl:
+
+2008-12-01 Eric Seidel <eric@webkit.org>
+
+ Reviewed by Adam Roben.
+
+ NULL-check documentFrameView() and topDocumentFrameView() it's possible
+ for either of these methods to return NULL, and this was seen to cause
+ crashes in Chromium.
+ https://bugs.webkit.org/show_bug.cgi?id=22572
+
+ * AccessibleBase.cpp:
+ (AccessibleBase::get_accParent):
+ (AccessibleBase::accLocation):
+ (AccessibleBase::accHitTest):
+
+2008-11-30 Antti Koivisto <antti@apple.com>
+
+ Another Windows build fix.
+
+ * WebCoreStatistics.cpp:
+ (WebCoreStatistics::javaScriptObjectsCount):
+
+2008-11-30 Antti Koivisto <antti@apple.com>
+
+ Windows build fix.
+
+ * WebJavaScriptCollector.cpp:
+ (WebJavaScriptCollector::objectCount):
+
+2008-11-29 Brent Fulgham <bfulgham@gmail.com>
+
+ Reviewed by Alexey Proskuryakov.
+
+ Remove Visual Studio project dependencies on non-redistributable
+ components in the Debug_Cairo and Release_Cairo build targets.
+ See https://bugs.webkit.org/show_bug.cgi?id=22527
+
+ * WebKit.vcproj/WebKit.vcproj:
+ * WebKit.vcproj/WebKit.sln: Instruct Cairo builds to not bother
+ building the unused QuickTime support library.
+
+2008-11-24 Glenn Wilson <gwilson@chromium.org>
+
+ Reviewed by Alexey Proskuryakov.
+
+ http://bugs.webkit.org/show_bug.cgi?id=15643
+
+ Added API support for the "trailing whitespace" work-around. This includes an APIs
+ to get and set the state of this configuration variable.
+
+ * Interfaces/IWebView.idl:
+ * WebCoreSupport/WebEditorClient.cpp:
+ (WebEditorClient::selectTrailingWhitespaceEnabled):
+ * WebCoreSupport/WebEditorClient.h:
+ * WebView.cpp:
+ (WebView::WebView):
+ (WebView::setSelectTrailingWhitespaceEnabled):
+ (WebView::selectTrailingWhitespaceEnabled):
+ * WebView.h:
+
+2008-11-24 Darin Adler <darin@apple.com>
+
+ Reviewed by Dan Bernstein.
+
+ - https://bugs.webkit.org/show_bug.cgi?id=22470
+ remove unneeded URL argument from FrameLoaderClient::updateGlobalHistory
+
+ * WebCoreSupport/WebFrameLoaderClient.cpp:
+ (WebFrameLoaderClient::updateGlobalHistory): Get the URL from the
+ DocumentLoader, just as we do the title and the failure flag.
+ * WebCoreSupport/WebFrameLoaderClient.h: Remove argument.
+
+2008-11-24 Darin Adler <darin@apple.com>
+
+ Reviewed by Dan Bernstein.
+
+ - finish https://bugs.webkit.org/show_bug.cgi?id=22295
+ track which history items are from page load failures
+
+ Last time around I did this only for the back/forward list and missed the
+ global history list.
+
+ * Interfaces/IWebHistoryItemPrivate.idl: Added setLastVisitWasFailure.
+
+ * WebCoreSupport/WebFrameLoaderClient.cpp:
+ (WebFrameLoaderClient::updateGlobalHistory): Added code to check for failure
+ and pass the argument in to WebHistory.
+
+ * WebHistory.cpp: (WebHistory::addItem): Added wasFailure argument.
+ Set the flag on the newly created history item.
+ * WebHistory.h: Ditto.
+
+ * WebHistoryItem.cpp:
+ (WebHistoryItem::setLastVisitWasFailure): Added.
+ * WebHistoryItem.h: Ditto.
+
+2008-11-24 Simon Fraser <simon.fraser@apple.com>
+
+ Fix call to Frame::selectionBounds in Windows build.
+
+ * WebView.cpp:
+ (WebView::selectionRect):
+
+2008-11-21 Dimitri Glazkov <dglazkov@chromium.org>
+
+ Reviewed by Alexey Proskuryakov.
+
+ Debug WebKit crashes on launch because of threading not being initialized early enough.
+
+ * WebKitClassFactory.cpp: (WebKitClassFactory::WebKitClassFactory):
+ Call JSC::InitializeThreading().
+
+2008-11-19 Darin Fisher <darin@chromium.org>
+
+ Reviewed by Geoff Garen.
+
+ https://bugs.webkit.org/show_bug.cgi?id=22345
+ Define ScriptValue as a thin container for a JSC::Value*.
+
+ * WebView.cpp:
+ (WebView::stringByEvaluatingJavaScriptFromString):
+
+2008-11-19 Adele Peterson <adele@apple.com>
+
+ Reviewed by Darin Adler.
+
+ For transparent views, clear the dirty rect instead of painting it white.
+
+ * WebView.cpp: (WebView::paintIntoBackingStore):
+
+2008-11-18 Adele Peterson <adele@apple.com>
+
+ Reverting last change. I just realized it causes the view to never get cleared out.
+
+ * WebView.cpp: (WebView::paintIntoBackingStore):
+
+2008-11-18 Adele Peterson <adele@apple.com>
+
+ Reviewed by John Sullivan.
+
+ Don't fill the view with white if its transparent.
+
+ * WebView.cpp: (WebView::paintIntoBackingStore):
+
+2008-11-18 Holger Hans Peter Freyther <zecke@selfish.org>
+
+ Try to fix the Windows build. It is view and not webView.
+
+ * WebCoreSupport/WebFrameLoaderClient.cpp:
+ (WebFrameLoaderClient::transitionToCommittedForNewPage):
+
+2008-11-18 Holger Hans Peter Freyther <zecke@selfish.org>
+
+ Reviewed by Simon Hausmann.
+
+ Attempt to share transitionToCommittedForNewPage of FrameLoaderClient with the different ports
+
+ After Hyatt's work on Widget and ScrollView there is little difference
+ between the implementation of Qt, Gtk+ and Win. In fact any kind of
+ difference is mostly a bug. Alp has fixed two of such errors for the Gtk+
+ port and the Qt port has at least one of them left.
+
+ The only difference between the implementations is in getting the the
+ IntSize for the new FrameView, the background color to be applied and
+ eventually some post processing.
+
+ Unify the implementations by providing a static helper function that
+ takes a Frame, IntSize, color and transparency bit and calling it from
+ the Gtk+, the Qt and the Windows port.
+
+ * WebCoreSupport/WebFrameLoaderClient.cpp:
+ (WebFrameLoaderClient::transitionToCommittedForNewPage):
+
+2008-11-18 Holger Hans Peter Freyther <zecke@selfish.org>
+
+ Reviewed by Simon Hausmann.
+
+ https://bugs.webkit.org/show_bug.cgi?id=22056
+
+ Move setting the background color and transparency from WebKit/win
+ to WebCore. This allows WebKit/win, WebKit/Qt and WebKit/Gtk+
+ to share this code.
+
+ * WebFrame.cpp:
+ (WebFrame::updateBackground):
+
+2008-11-16 Geoffrey Garen <ggaren@apple.com>
+
+ Not reviewed.
+
+ Try to fix Windows build.
+
+ * WebCoreSupport/WebFrameLoaderClient.cpp:
+
+2008-11-16 Darin Adler <darin@apple.com>
+
+ Reviewed by Dan Bernstein.
+
+ - https://bugs.webkit.org/show_bug.cgi?id=22295
+ track which history items are from page load failures
+
+ * Interfaces/IWebHistoryItemPrivate.idl: Added lastVisitWasFailure function.
+
+ * WebHistoryItem.cpp:
+ (WebHistoryItem::initFromDictionaryRepresentation): Set the lastVisitWasFailure
+ flag in the history item if the dictionary had an entry for lastVisitWasFailureKey.
+ (WebHistoryItem::dictionaryRepresentation): Set the lastVisitWasFailureKey key
+ in the dictionary if the history item had the lastVisitWasFailure flag.
+ (WebHistoryItem::lastVisitWasFailure): Added.
+
+ * WebHistoryItem.h: Added lastVisitWasFailure function.
+
+2008-11-15 Geoffrey Garen <ggaren@apple.com>
+
+ Reviewed by Sam Weinig.
+
+ Updated for JavaScriptCore renames.
+
+ * WebScriptCallFrame.cpp:
+ (WebScriptCallFrame::valueByEvaluatingJavaScriptFromString):
+
+2008-11-14 Dan Bernstein <mitz@apple.com>
+
+ - try to fix the Windows build
+
+ * WebCoreLocalizedStrings.cpp:
+ (WebCore::contextMenuItemTagTextDirectionMenu): Added.
+
+2008-11-13 Adam Roben <aroben@apple.com>
+
+ Fix Bug 22244: Webkit nightly builds crash with Safari 3.2
+
+ <https://bugs.webkit.org/show_bug.cgi?id=22244>
+
+ r36652 added IWebViewPrivate::clearMainFrameName into the middle of
+ the IWebViewPrivate interface, which modifies the part of the
+ IWebViewPrivate vtable that Safari 3.2 relies on.
+
+ Reviewed by Dan Bernstein.
+
+ * Interfaces/IWebViewPrivate.idl: Move clearMainFrameName to the end
+ of the interface.
+
+2008-11-11 Dan Bernstein <mitz@apple.com>
+
+ Reviewed by Adam Roben.
+
+ WebKit/win part of adding a master volume control for media elements in a WebView
+ * Interfaces/IWebViewPrivate.idl: Added setMediaVolume() and
+ mediaVolume().
+ * WebView.cpp:
+ (WebView::setMediaVolume): Added.
+ (WebView::mediaVolume): Added.
+ * WebView.h:
+
+2008-11-10 Adam Roben <aroben@apple.com>
+
+ Fix Bug 22158: Would like to turn on WebCore logging channels via an
+ environment variable
+
+ <https://bugs.webkit.org/show_bug.cgi?id=22158>
+
+ Reviewed by Anders Carlsson.
+
+ * WebView.cpp:
+ (WebView::initWithFrame): Call WebCore's
+ InitializeLoggingChannelsIfNecessary.
+
+2008-11-08 Dan Bernstein <mitz@apple.com>
+
+ Reviewed by Darin Adler.
+
+ - WebKit/win part of adding WebPreferences for controlling databases and local storage
+
+ * Interfaces/IWebPreferencesPrivate.idl: Declared setDatabasesEnabled,
+ databasesEnabled, setLocalStorageEnabled and localStorageEnabled.
+ * WebPreferenceKeysPrivate.h: Added WebKitDatabasesEnabledPreferenceKey
+ and WebKitLocalStorageEnabledPreferenceKey.
+ * WebPreferences.cpp:
+ (WebPreferences::initializeDefaultSettings): Made databases and local
+ storage enabled by default.
+ (WebPreferences::setDatabasesEnabled): Added.
+ (WebPreferences::databasesEnabled): Added.
+ (WebPreferences::setLocalStorageEnabled): Added.
+ (WebPreferences::localStorageEnabled): Added.
+ * WebPreferences.h:
+ * WebView.cpp:
+ (WebView::notifyPreferencesChanged): Transfer the databases and local
+ storage preferences to WebCore settings.
+
+2008-11-06 John Sullivan <sullivan@apple.com>
+
+ Eliminated one of the two booleans tracking whether zoom was text-only, to avoid future problems.
+
+ Reviewed by Adam Roben
+
+ * WebView.h:
+ removed m_zoomMultiplierIsTextOnly
+
+ * WebView.cpp:
+ (WebView::WebView):
+ removed initialization of m_zoomMultiplierIsTextOnly
+ (WebView::setZoomMultiplier):
+ use m_page->settings()->setZoomsTextOnly() instead of setting m_zoomMultiplierIsTextOnly
+ (WebView::zoomMultiplier):
+ use m_page->settings()->zoomsTextOnly() instead of reading m_zoomMultiplierIsTextOnly
+
+2008-11-06 Adele Peterson <adele@apple.com>
+
+ Reviewed by Adam Roben.
+
+ Add support for a WebKitZoomsTextOnly preference.
+
+ * Interfaces/IWebPreferences.idl:
+ * WebPreferenceKeysPrivate.h:
+ * WebPreferences.cpp:
+ (WebPreferences::setZoomsTextOnly):
+ (WebPreferences::zoomsTextOnly):
+ * WebPreferences.h:
+
+ * WebView.cpp:
+ (WebView::canMakeTextLarger): Consider the zoomsTextOnly setting when computing this.
+ (WebView::makeTextLarger): ditto.
+ (WebView::canMakeTextSmaller): ditto.
+ (WebView::makeTextSmaller): ditto.
+ (WebView::canMakeTextStandardSize):
+ Don't consider the setting in this case since we need to reset both text zoom and page zoom regardless of the setting.
+ (WebView::makeTextStandardSize):
+ (WebView::notifyPreferencesChanged): Set the WebCore settings to match the WebPreference for WebKitZoomsTextOnly.
+
+2008-11-05 Dan Bernstein <mitz@apple.com>
+
+ Reviewed by John Sullivan.
+
+ - make the {protocol,proxyType} argument of
+ WebURLProtectionSpace::initWith{Proxy}Host actually work and fix
+ assertion failures.
+
+ * WebURLProtectionSpace.cpp:
+ (WebURLProtectionSpace::initWithHost): The BString comparisons were
+ applying the BString==BSTR operator to a right hand side that was
+ actually a WCHAR string. Fixed by using BStrings on both sides.
+ (WebURLProtectionSpace::initWithProxyHost): Ditto.
+
2008-11-01 Alexey Proskuryakov <ap@webkit.org>
Reviewed by Darin Adler.
diff --git a/WebKit/win/DOMCoreClasses.cpp b/WebKit/win/DOMCoreClasses.cpp
index 713a369..2da3e28 100644
--- a/WebKit/win/DOMCoreClasses.cpp
+++ b/WebKit/win/DOMCoreClasses.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2006, 2007 Apple Inc. All rights reserved.
+ * Copyright (C) 2006, 2007, 2009 Apple Inc. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
@@ -38,6 +38,7 @@
#include <WebCore/DOMWindow.h>
#include <WebCore/Document.h>
#include <WebCore/Element.h>
+#include <WebCore/Frame.h>
#include <WebCore/SimpleFontData.h>
#include <WebCore/HTMLFormElement.h>
#include <WebCore/HTMLInputElement.h>
@@ -53,8 +54,19 @@
// {3B0C0EFF-478B-4b0b-8290-D2321E08E23E}
DEFINE_GUID(IID_DOMElement, 0x3b0c0eff, 0x478b, 0x4b0b, 0x82, 0x90, 0xd2, 0x32, 0x1e, 0x8, 0xe2, 0x3e);
-using namespace WebCore;
-using namespace HTMLNames;
+// Our normal style is just to say "using namespace WebCore" rather than having
+// individual using directives for each type from that namespace. But
+// "DOMObject" exists both in the WebCore namespace and unnamespaced in this
+// file, which leads to ambiguities if we say "using namespace WebCore".
+using namespace WebCore::HTMLNames;
+using WebCore::AtomicString;
+using WebCore::BString;
+using WebCore::Element;
+using WebCore::ExceptionCode;
+using WebCore::FontDescription;
+using WebCore::Frame;
+using WebCore::IntRect;
+using WebCore::String;
// DOMObject - IUnknown -------------------------------------------------------
@@ -128,7 +140,7 @@ HRESULT STDMETHODCALLTYPE DOMNode::parentNode(
if (!m_node || !m_node->parentNode())
return E_FAIL;
*result = DOMNode::createInstance(m_node->parentNode());
- return S_OK;
+ return *result ? S_OK : E_FAIL;
}
HRESULT STDMETHODCALLTYPE DOMNode::childNodes(
@@ -182,7 +194,7 @@ HRESULT STDMETHODCALLTYPE DOMNode::ownerDocument(
if (!m_node)
return E_FAIL;
*result = DOMDocument::createInstance(m_node->ownerDocument());
- return S_OK;
+ return *result ? S_OK : E_FAIL;
}
HRESULT STDMETHODCALLTYPE DOMNode::insertBefore(
@@ -464,9 +476,7 @@ HRESULT STDMETHODCALLTYPE DOMNodeList::item(
return E_FAIL;
*result = DOMNode::createInstance(itemNode);
- if (!(*result))
- return E_FAIL;
- return S_OK;
+ return *result ? S_OK : E_FAIL;
}
HRESULT STDMETHODCALLTYPE DOMNodeList::length(
@@ -547,7 +557,7 @@ HRESULT STDMETHODCALLTYPE DOMDocument::documentElement(
/* [retval][out] */ IDOMElement** result)
{
*result = DOMElement::createInstance(m_document->documentElement());
- return S_OK;
+ return *result ? S_OK : E_FAIL;
}
HRESULT STDMETHODCALLTYPE DOMDocument::createElement(
@@ -560,9 +570,7 @@ HRESULT STDMETHODCALLTYPE DOMDocument::createElement(
String tagNameString(tagName);
ExceptionCode ec;
*result = DOMElement::createInstance(m_document->createElement(tagNameString, ec).get());
- if (!(*result))
- return E_FAIL;
- return S_OK;
+ return *result ? S_OK : E_FAIL;
}
HRESULT STDMETHODCALLTYPE DOMDocument::createDocumentFragment(
@@ -630,9 +638,7 @@ HRESULT STDMETHODCALLTYPE DOMDocument::getElementsByTagName(
String tagNameString(tagName);
*result = DOMNodeList::createInstance(m_document->getElementsByTagName(tagNameString).get());
- if (!(*result))
- return E_FAIL;
- return S_OK;
+ return *result ? S_OK : E_FAIL;
}
HRESULT STDMETHODCALLTYPE DOMDocument::importNode(
@@ -673,9 +679,7 @@ HRESULT STDMETHODCALLTYPE DOMDocument::getElementsByTagNameNS(
String namespaceURIString(namespaceURI);
String localNameString(localName);
*result = DOMNodeList::createInstance(m_document->getElementsByTagNameNS(namespaceURIString, localNameString).get());
- if (!(*result))
- return E_FAIL;
- return S_OK;
+ return *result ? S_OK : E_FAIL;
}
HRESULT STDMETHODCALLTYPE DOMDocument::getElementById(
@@ -687,9 +691,7 @@ HRESULT STDMETHODCALLTYPE DOMDocument::getElementById(
String idString(elementId);
*result = DOMElement::createInstance(m_document->getElementById(idString));
- if (!(*result))
- return E_FAIL;
- return S_OK;
+ return *result ? S_OK : E_FAIL;
}
// DOMDocument - IDOMViewCSS --------------------------------------------------
@@ -715,7 +717,7 @@ HRESULT STDMETHODCALLTYPE DOMDocument::getComputedStyle(
return E_FAIL;
*result = DOMCSSStyleDeclaration::createInstance(dv->getComputedStyle(element, pseudoEltString.impl()).get());
- return S_OK;
+ return *result ? S_OK : E_FAIL;
}
// DOMDocument - IDOMDocumentEvent --------------------------------------------
@@ -727,7 +729,7 @@ HRESULT STDMETHODCALLTYPE DOMDocument::createEvent(
String eventTypeString(eventType, SysStringLen(eventType));
WebCore::ExceptionCode ec = 0;
*result = DOMEvent::createInstance(m_document->createEvent(eventTypeString, ec));
- return S_OK;
+ return *result ? S_OK : E_FAIL;
}
// DOMDocument - DOMDocument --------------------------------------------------
@@ -1061,12 +1063,33 @@ HRESULT STDMETHODCALLTYPE DOMElement::font(WebFontDescription* webFontDescriptio
webFontDescription->family = family.characters();
webFontDescription->familyLength = family.length();
webFontDescription->size = fontDescription.computedSize();
- webFontDescription->bold = fontDescription.weight() >= FontWeight600;
+ webFontDescription->bold = fontDescription.weight() >= WebCore::FontWeight600;
webFontDescription->italic = fontDescription.italic();
return S_OK;
}
+HRESULT STDMETHODCALLTYPE DOMElement::renderedImage(HBITMAP* image)
+{
+ if (!image) {
+ ASSERT_NOT_REACHED();
+ return E_POINTER;
+ }
+ *image = 0;
+
+ ASSERT(m_element);
+
+ Frame* frame = m_element->document()->frame();
+ if (!frame)
+ return E_FAIL;
+
+ *image = frame->nodeImage(m_element);
+ if (!*image)
+ return E_FAIL;
+
+ return S_OK;
+}
+
// IDOMElementCSSInlineStyle --------------------------------------------------
HRESULT STDMETHODCALLTYPE DOMElement::style(
@@ -1082,7 +1105,7 @@ HRESULT STDMETHODCALLTYPE DOMElement::style(
return E_FAIL;
*result = DOMCSSStyleDeclaration::createInstance(style);
- return S_OK;
+ return *result ? S_OK : E_FAIL;
}
// IDOMElementExtensions ------------------------------------------------------
diff --git a/WebKit/win/DOMCoreClasses.h b/WebKit/win/DOMCoreClasses.h
index 1278c7c..3941d13 100644
--- a/WebKit/win/DOMCoreClasses.h
+++ b/WebKit/win/DOMCoreClasses.h
@@ -777,6 +777,9 @@ public:
virtual HRESULT STDMETHODCALLTYPE font(
WebFontDescription* webFontDescription);
+ virtual HRESULT STDMETHODCALLTYPE renderedImage(
+ /* [retval][out] */ HBITMAP* image);
+
// IDOMElementCSSInlineStyle
virtual HRESULT STDMETHODCALLTYPE style(
/* [retval][out] */ IDOMCSSStyleDeclaration **result);
diff --git a/WebKit/win/Interfaces/DOMPrivate.idl b/WebKit/win/Interfaces/DOMPrivate.idl
index dcacac2..7210943 100644
--- a/WebKit/win/Interfaces/DOMPrivate.idl
+++ b/WebKit/win/Interfaces/DOMPrivate.idl
@@ -46,6 +46,7 @@ interface IDOMElementPrivate : IUnknown
HRESULT isFocused([out, retval] BOOL* result);
HRESULT innerText([out, retval] BSTR* result);
[local] HRESULT font(WebFontDescription* webFontDescription);
+ HRESULT renderedImage([out, retval] HBITMAP* image);
}
/*
diff --git a/WebKit/win/Interfaces/IWebEmbeddedView.idl b/WebKit/win/Interfaces/IWebEmbeddedView.idl
index 0a65ff7..bcca2fd 100644
--- a/WebKit/win/Interfaces/IWebEmbeddedView.idl
+++ b/WebKit/win/Interfaces/IWebEmbeddedView.idl
@@ -38,4 +38,9 @@ import "ocidl.idl";
interface IWebEmbeddedView : IUnknown
{
HRESULT createViewWindow([in] OLE_HANDLE parentWindow, [in] LPSIZE pluginSize, [out, retval] OLE_HANDLE* window);
+
+ HRESULT didReceiveResponse([in] IWebURLResponse* response);
+ HRESULT didReceiveData([in] IStream* data);
+ HRESULT didFinishLoading();
+ HRESULT didFail([in] IWebError* error);
}
diff --git a/WebKit/win/Interfaces/IWebFrameLoadDelegatePrivate.idl b/WebKit/win/Interfaces/IWebFrameLoadDelegatePrivate.idl
index 79707a3..5ae91dd 100644
--- a/WebKit/win/Interfaces/IWebFrameLoadDelegatePrivate.idl
+++ b/WebKit/win/Interfaces/IWebFrameLoadDelegatePrivate.idl
@@ -51,3 +51,14 @@ interface IWebFrameLoadDelegatePrivate : IUnknown
//- (void)webView:(WebView *)sender didHandleOnloadEventsForFrame:(WebFrame *)frame;
HRESULT didHandleOnloadEventsForFrame([in] IWebView* sender, [in] IWebFrame* frame);
}
+
+[
+ object,
+ oleautomation,
+ uuid(5566CB49-6E87-4075-80CE-9BAC374C52DE),
+ pointer_default(unique)
+]
+interface IWebFrameLoadDelegatePrivate2 : IWebFrameLoadDelegatePrivate
+{
+ HRESULT didFirstVisuallyNonEmptyLayoutInFrame([in] IWebView* sender, [in] IWebFrame* frame);
+}
diff --git a/WebKit/win/Interfaces/IWebFramePrivate.idl b/WebKit/win/Interfaces/IWebFramePrivate.idl
index bd7c0b6..d1f6cbf 100755
--- a/WebKit/win/Interfaces/IWebFramePrivate.idl
+++ b/WebKit/win/Interfaces/IWebFramePrivate.idl
@@ -41,7 +41,7 @@ typedef enum {
WebFrameLoadTypeReload,
WebFrameLoadTypeReloadAllowingStaleData,
WebFrameLoadTypeSame, // user loads same URL again (but not reload button)
- WebFrameLoadTypeRedirectWithLockedHistory,
+ WebFrameLoadTypeRedirectWithLockedBackForwardList,
WebFrameLoadTypeReplace
} WebFrameLoadType;
diff --git a/WebKit/win/Interfaces/IWebHistoryItemPrivate.idl b/WebKit/win/Interfaces/IWebHistoryItemPrivate.idl
index aa8c162..4922504 100644
--- a/WebKit/win/Interfaces/IWebHistoryItemPrivate.idl
+++ b/WebKit/win/Interfaces/IWebHistoryItemPrivate.idl
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2006, 2007, 2008 Apple Inc. All rights reserved.
+ * Copyright (C) 2006, 2007, 2008 Apple Inc. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
@@ -55,4 +55,15 @@ interface IWebHistoryItemPrivate : IUnknown
HRESULT target([out, retval] BSTR* target);
HRESULT isTargetItem([out, retval] BOOL* result);
[local] HRESULT children([out] unsigned* childCount, [out, retval] SAFEARRAY** children);
+ HRESULT lastVisitWasFailure([out, retval] BOOL* wasFailure);
+ HRESULT setLastVisitWasFailure([in] BOOL wasFailure);
+ HRESULT lastVisitWasHTTPNonGet([out, retval] BOOL* HTTPNonGet);
+ HRESULT setLastVisitWasHTTPNonGet([in] BOOL wasHTTPNonGet);
+
+ HRESULT redirectURLs([out, retval] IEnumVARIANT** result);
+ HRESULT visitedWithTitle([in] BSTR title);
+
+ HRESULT getDailyVisitCounts([out] int* number, [out, retval] int** counts);
+ HRESULT getWeeklyVisitCounts([out] int* number, [out, retval] int** counts);
+ HRESULT recordInitialVisit();
}
diff --git a/WebKit/win/Interfaces/IWebHistoryPrivate.idl b/WebKit/win/Interfaces/IWebHistoryPrivate.idl
new file mode 100644
index 0000000..6e4754e
--- /dev/null
+++ b/WebKit/win/Interfaces/IWebHistoryPrivate.idl
@@ -0,0 +1,38 @@
+/*
+ * Copyright (C) 2008 Apple Inc. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY APPLE COMPUTER, INC. ``AS IS'' AND ANY
+ * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE COMPUTER, INC. OR
+ * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+ * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+ * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+ * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+ * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+interface IWebHistoryItem;
+
+[
+ object,
+ oleautomation,
+ hidden,
+ uuid(B811003B-3475-46ad-9697-91D0D181CC05),
+ pointer_default(unique)
+]
+interface IWebHistoryPrivate : IUnknown
+{
+ HRESULT allItems([in, out] int* count, [out, retval] IWebHistoryItem** items);
+}
diff --git a/WebKit/win/Interfaces/IWebIconDatabase.idl b/WebKit/win/Interfaces/IWebIconDatabase.idl
index 0dfbf1a..57d6683 100644
--- a/WebKit/win/Interfaces/IWebIconDatabase.idl
+++ b/WebKit/win/Interfaces/IWebIconDatabase.idl
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2006, 2007, 2008 Apple Inc. All rights reserved.
+ * Copyright (C) 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
@@ -148,4 +148,20 @@ interface IWebIconDatabase : IUnknown
- (NSString *)iconURLForURL:(NSString *)URL;
*/
HRESULT iconURLForURL([in] BSTR url, [out, retval] BSTR* iconURL);
+
+ /*!
+ @method isEnabled
+ @discussion Returns true if the icon database is currently enabled, or false if it
+ is disabled.
+ - (BOOL)isEnabled;
+ */
+ HRESULT isEnabled([out, retval] BOOL* result);
+
+ /*!
+ @method setEnabled:
+ @discussion Enables or disables the icon database based on the flag passed in.
+ @param flag Pass true to enable the icon database, or false to disable it.
+ - (void)setEnabled:(BOOL)flag;
+ */
+ HRESULT setEnabled([in] BOOL flag);
}
diff --git a/WebKit/win/Interfaces/IWebPreferences.idl b/WebKit/win/Interfaces/IWebPreferences.idl
index 16f0d9c..9a52d7c 100644
--- a/WebKit/win/Interfaces/IWebPreferences.idl
+++ b/WebKit/win/Interfaces/IWebPreferences.idl
@@ -183,4 +183,7 @@ interface IWebPreferences : IUnknown
HRESULT setShouldPaintCustomScrollbars(BOOL shouldPaint);
HRESULT shouldPaintCustomScrollbars(BOOL *shouldPaint);
+
+ HRESULT setZoomsTextOnly(BOOL zoomsTextOnly);
+ HRESULT zoomsTextOnly(BOOL *zoomsTextOnly);
}
diff --git a/WebKit/win/Interfaces/IWebPreferencesPrivate.idl b/WebKit/win/Interfaces/IWebPreferencesPrivate.idl
index 4a71dbd..aa1073f 100644
--- a/WebKit/win/Interfaces/IWebPreferencesPrivate.idl
+++ b/WebKit/win/Interfaces/IWebPreferencesPrivate.idl
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2007, 2008 Apple Inc. All rights reserved.
+ * Copyright (C) 2007, 2008, 2009 Apple Inc. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
@@ -60,4 +60,13 @@ interface IWebPreferencesPrivate : IUnknown
HRESULT setShouldPaintNativeControls([in] BOOL shouldPaint);
HRESULT shouldPaintNativeControls([out, retval] BOOL* enabled);
+
+ HRESULT setDatabasesEnabled([in] BOOL enabled);
+ HRESULT databasesEnabled([out, retval] BOOL *enabled);
+
+ HRESULT setLocalStorageEnabled([in] BOOL enabled);
+ HRESULT localStorageEnabled([out, retval] BOOL* enabled);
+
+ HRESULT setFontSmoothingContrast([in] float contrast);
+ HRESULT fontSmoothingContrast([out, retval] float* contrast);
}
diff --git a/WebKit/win/Interfaces/IWebResourceLoadDelegatePrivate.idl b/WebKit/win/Interfaces/IWebResourceLoadDelegatePrivate.idl
index de2bdc0..95040bf 100644
--- a/WebKit/win/Interfaces/IWebResourceLoadDelegatePrivate.idl
+++ b/WebKit/win/Interfaces/IWebResourceLoadDelegatePrivate.idl
@@ -59,3 +59,14 @@ interface IWebResourceLoadDelegatePrivate : IUnknown
*/
HRESULT didLoadResourceFromMemoryCache([in] IWebView* webView, [in] IWebURLRequest* request, [in] IWebURLResponse* response, [in] UINT length, [in] IWebDataSource* dataSource);
}
+
+[
+ object,
+ oleautomation,
+ uuid(E7B724A4-F0E5-4e11-9AC5-5F60AC09301E),
+ pointer_default(unique)
+]
+interface IWebResourceLoadDelegatePrivate2 : IWebResourceLoadDelegatePrivate
+{
+ HRESULT shouldUseCredentialStorage([in] IWebView* webView, [in] unsigned long identifier, [in] IWebDataSource* dataSource, [out, retval] BOOL* shouldUse);
+}
diff --git a/WebKit/win/Interfaces/IWebUIDelegatePrivate.idl b/WebKit/win/Interfaces/IWebUIDelegatePrivate.idl
index 85a72e7..5ef53d9 100755
--- a/WebKit/win/Interfaces/IWebUIDelegatePrivate.idl
+++ b/WebKit/win/Interfaces/IWebUIDelegatePrivate.idl
@@ -31,6 +31,9 @@ import "IWebView.idl";
#endif
cpp_quote("#define WebEmbeddedViewAttributesKey TEXT(\"WebEmbeddedViewAttributesKey\")")
+cpp_quote("#define WebEmbeddedViewBaseURLKey TEXT(\"WebEmbeddedViewBaseURLKey\")")
+cpp_quote("#define WebEmbeddedViewContainingElementKey TEXT(\"WebEmbeddedViewContainingElementKey\")")
+cpp_quote("#define WebEmbeddedViewMIMETypeKey TEXT(\"WebEmbeddedViewMIMETypeKey\")")
interface IWebEmbeddedView;
interface IWebFrame;
diff --git a/WebKit/win/Interfaces/IWebView.idl b/WebKit/win/Interfaces/IWebView.idl
index 92fa2b5..e38406b 100644
--- a/WebKit/win/Interfaces/IWebView.idl
+++ b/WebKit/win/Interfaces/IWebView.idl
@@ -1014,6 +1014,16 @@ interface IWebViewEditing : IUnknown
- (void)setGrammarCheckingEnabled:(BOOL)flag
*/
HRESULT setGrammarCheckingEnabled(BOOL enabled);
+
+ /*
+ - (void)setSelectTrailingWhitespaceEnabled:(BOOL)flag;
+ */
+ HRESULT setSelectTrailingWhitespaceEnabled([in] BOOL flag);
+
+ /*
+ - (BOOL)selectTrailingWhitespaceEnabled;
+ */
+ HRESULT isSelectTrailingWhitespaceEnabled([out, retval] BOOL* enabled);
}
/*
diff --git a/WebKit/win/Interfaces/IWebViewPrivate.idl b/WebKit/win/Interfaces/IWebViewPrivate.idl
index b49addf..c32a20b 100644
--- a/WebKit/win/Interfaces/IWebViewPrivate.idl
+++ b/WebKit/win/Interfaces/IWebViewPrivate.idl
@@ -122,7 +122,6 @@ interface IWebViewPrivate : IUnknown
// SPI for DumpRenderTree
HRESULT executeCoreCommandByName([in] BSTR name, [in] BSTR value);
- HRESULT clearMainFrameName();
HRESULT windowAncestryDidChange();
@@ -146,4 +145,16 @@ interface IWebViewPrivate : IUnknown
HRESULT setCookieEnabled([in] BOOL enable);
HRESULT cookieEnabled([out, retval] BOOL* enabled);
+
+ HRESULT setMediaVolume([in] float volume);
+ HRESULT mediaVolume([out, retval] float* volume);
+
+ // SPI for DumpRenderTree
+ HRESULT clearMainFrameName();
+
+ HRESULT globalHistoryItem([out, retval] IWebHistoryItem**);
+
+ HRESULT registerEmbeddedViewMIMEType([in] BSTR mimeType);
+
+ HRESULT setMemoryCacheDelegateCallsEnabled([in] BOOL enabled);
}
diff --git a/WebKit/win/Interfaces/WebKit.idl b/WebKit/win/Interfaces/WebKit.idl
index fe08792..a78a5d3 100644
--- a/WebKit/win/Interfaces/WebKit.idl
+++ b/WebKit/win/Interfaces/WebKit.idl
@@ -90,6 +90,7 @@ import "ocidl.idl";
#include "IWebHistory.idl"
#include "IWebHistoryItem.idl"
#include "IWebHistoryItemPrivate.idl"
+#include "IWebHistoryPrivate.idl"
#include "IWebIconDatabase.idl"
#include "IWebIconFetcher.idl"
#include "IWebInspector.idl"
diff --git a/WebKit/win/MarshallingHelpers.cpp b/WebKit/win/MarshallingHelpers.cpp
index 2a3935e..60f2749 100644
--- a/WebKit/win/MarshallingHelpers.cpp
+++ b/WebKit/win/MarshallingHelpers.cpp
@@ -42,7 +42,7 @@ CFDictionaryValueCallBacks MarshallingHelpers::kIUnknownDictionaryValueCallBacks
KURL MarshallingHelpers::BSTRToKURL(BSTR urlStr)
{
- return KURL(String(urlStr, SysStringLen(urlStr)));
+ return KURL(KURL(), String(urlStr, SysStringLen(urlStr)));
}
BSTR MarshallingHelpers::KURLToBSTR(const KURL& url)
diff --git a/WebKit/win/WebCachedPagePlatformData.h b/WebKit/win/WebCachedFramePlatformData.h
index f5a5388..ec850e3 100644
--- a/WebKit/win/WebCachedPagePlatformData.h
+++ b/WebKit/win/WebCachedFramePlatformData.h
@@ -25,16 +25,16 @@
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
-#ifndef WebCachedPagePlatformData_h
-#define WebCachedPagePlatformData_h
+#ifndef WebCachedFramePlatformData_h
+#define WebCachedFramePlatformData_h
#include "WebDataSource.h"
-#include <WebCore/CachedPagePlatformData.h>
+#include <WebCore/CachedFramePlatformData.h>
-class WebCachedPagePlatformData : public WebCore::CachedPagePlatformData {
+class WebCachedFramePlatformData : public WebCore::CachedFramePlatformData {
public:
- WebCachedPagePlatformData(IWebDataSource* webDataSource) : m_webDataSource(webDataSource) { }
+ WebCachedFramePlatformData(IWebDataSource* webDataSource) : m_webDataSource(webDataSource) { }
IWebDataSource* webDataSource() { return m_webDataSource.get(); }
@@ -42,4 +42,4 @@ private:
COMPtr<IWebDataSource> m_webDataSource;
};
-#endif // CachedPagePlatformData_h
+#endif // CachedFramePlatformData_h
diff --git a/WebKit/win/WebCookieManager.cpp b/WebKit/win/WebCookieManager.cpp
index db51fd1..499d857 100644
--- a/WebKit/win/WebCookieManager.cpp
+++ b/WebKit/win/WebCookieManager.cpp
@@ -27,9 +27,6 @@
#include "WebKitDLL.h"
#include "WebCookieManager.h"
-#include <CFNetwork/CFHTTPCookiesPriv.h>
-#include <WebCore/CookieStorageWin.h>
-
using namespace WebCore;
// WebCookieManager -------------------------------------------------------
@@ -83,22 +80,3 @@ ULONG STDMETHODCALLTYPE WebCookieManager::Release()
return newRef;
}
-
-// IWebCookieManager -------------------------------------------------------
-
-HRESULT STDMETHODCALLTYPE WebCookieManager::cookieStorage(
- /* [retval][out] */ CFHTTPCookieStorageRef* storage)
-{
- if (!storage)
- return E_POINTER;
-
- *storage = currentCookieStorage();
- return S_OK;
-}
-
-HRESULT STDMETHODCALLTYPE WebCookieManager::setCookieStorage(
- /* [in] */ CFHTTPCookieStorageRef storage)
-{
- setCurrentCookieStorage(storage);
- return S_OK;
-}
diff --git a/WebKit/win/WebCookieManagerCFNet.cpp b/WebKit/win/WebCookieManagerCFNet.cpp
new file mode 100644
index 0000000..415a679
--- /dev/null
+++ b/WebKit/win/WebCookieManagerCFNet.cpp
@@ -0,0 +1,52 @@
+/*
+ * Copyright (C) 2008 Apple Inc. All Rights Reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY APPLE INC. ``AS IS'' AND ANY
+ * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR
+ * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+ * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+ * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+ * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+ * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#include "config.h"
+#include "WebKitDLL.h"
+#include "WebCookieManager.h"
+
+#include <CFNetwork/CFHTTPCookiesPriv.h>
+#include <WebCore/CookieStorageWin.h>
+
+using namespace WebCore;
+
+// IWebCookieManager -------------------------------------------------------
+
+HRESULT STDMETHODCALLTYPE WebCookieManager::cookieStorage(
+ /* [retval][out] */ CFHTTPCookieStorageRef* storage)
+{
+ if (!storage)
+ return E_POINTER;
+
+ *storage = currentCookieStorage();
+ return S_OK;
+}
+
+HRESULT STDMETHODCALLTYPE WebCookieManager::setCookieStorage(
+ /* [in] */ CFHTTPCookieStorageRef storage)
+{
+ setCurrentCookieStorage(storage);
+ return S_OK;
+}
diff --git a/WebKit/win/WebCookieManagerCurl.cpp b/WebKit/win/WebCookieManagerCurl.cpp
new file mode 100644
index 0000000..e60d8cf
--- /dev/null
+++ b/WebKit/win/WebCookieManagerCurl.cpp
@@ -0,0 +1,48 @@
+/*
+ * Copyright (C) 2008 Brent Fulgham <bfulgham@gmail.com>. All Rights Reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY APPLE INC. ``AS IS'' AND ANY
+ * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR
+ * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+ * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+ * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+ * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+ * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#include "config.h"
+#include "WebKitDLL.h"
+#include "WebCookieManager.h"
+
+#include "NotImplemented.h"
+
+using namespace WebCore;
+
+// IWebCookieManager -------------------------------------------------------
+
+HRESULT STDMETHODCALLTYPE WebCookieManager::cookieStorage(
+ /* [retval][out] */ CFHTTPCookieStorageRef* storage)
+{
+ notImplemented();
+ return E_FAIL;
+}
+
+HRESULT STDMETHODCALLTYPE WebCookieManager::setCookieStorage(
+ /* [in] */ CFHTTPCookieStorageRef storage)
+{
+ notImplemented();
+ return E_FAIL;
+}
diff --git a/WebKit/win/WebCoreLocalizedStrings.cpp b/WebKit/win/WebCoreLocalizedStrings.cpp
index f754a47..21dc35d 100644
--- a/WebKit/win/WebCoreLocalizedStrings.cpp
+++ b/WebKit/win/WebCoreLocalizedStrings.cpp
@@ -69,6 +69,7 @@ String WebCore::contextMenuItemTagItalic() { return String(LPCTSTR_UI_STRING("It
String WebCore::contextMenuItemTagUnderline() { return String(LPCTSTR_UI_STRING("Underline", "Underline context menu item")); }
String WebCore::contextMenuItemTagOutline() { return String(LPCTSTR_UI_STRING("Outline", "Outline context menu item")); }
String WebCore::contextMenuItemTagWritingDirectionMenu() { return String(LPCTSTR_UI_STRING("Writing Direction", "Writing direction context sub-menu item")); }
+String WebCore::contextMenuItemTagTextDirectionMenu() { return String(LPCTSTR_UI_STRING("Text Direction", "Text direction context sub-menu item")); }
String WebCore::contextMenuItemTagDefaultDirection() { return String(LPCTSTR_UI_STRING("Default", "Default writing direction context menu item")); }
String WebCore::contextMenuItemTagLeftToRight() { return String(LPCTSTR_UI_STRING("Left to Right", "Left to Right context menu item")); }
String WebCore::contextMenuItemTagRightToLeft() { return String(LPCTSTR_UI_STRING("Right to Left", "Right to Left context menu item")); }
diff --git a/WebKit/win/WebCoreStatistics.cpp b/WebKit/win/WebCoreStatistics.cpp
index ad5af7d..3f7a14c 100644
--- a/WebKit/win/WebCoreStatistics.cpp
+++ b/WebKit/win/WebCoreStatistics.cpp
@@ -98,7 +98,7 @@ HRESULT STDMETHODCALLTYPE WebCoreStatistics::javaScriptObjectsCount(
return E_POINTER;
JSLock lock(false);
- *count = (UINT)JSDOMWindow::commonJSGlobalData()->heap.size();
+ *count = (UINT)JSDOMWindow::commonJSGlobalData()->heap.objectCount();
return S_OK;
}
@@ -192,7 +192,7 @@ HRESULT STDMETHODCALLTYPE WebCoreStatistics::cachedFontDataCount(
{
if (!count)
return E_POINTER;
- *count = (UINT) FontCache::fontDataCount();
+ *count = (UINT) fontCache()->fontDataCount();
return S_OK;
}
@@ -201,13 +201,13 @@ HRESULT STDMETHODCALLTYPE WebCoreStatistics::cachedFontDataInactiveCount(
{
if (!count)
return E_POINTER;
- *count = (UINT) FontCache::inactiveFontDataCount();
+ *count = (UINT) fontCache()->inactiveFontDataCount();
return S_OK;
}
HRESULT STDMETHODCALLTYPE WebCoreStatistics::purgeInactiveFontData(void)
{
- FontCache::purgeInactiveFontData();
+ fontCache()->purgeInactiveFontData();
return S_OK;
}
diff --git a/WebKit/win/WebCoreSupport/EmbeddedWidget.cpp b/WebKit/win/WebCoreSupport/EmbeddedWidget.cpp
index b18022b..952bc03 100644
--- a/WebKit/win/WebCoreSupport/EmbeddedWidget.cpp
+++ b/WebKit/win/WebCoreSupport/EmbeddedWidget.cpp
@@ -31,6 +31,10 @@
#include <WebCore/FrameView.h>
#include <WebCore/RenderObject.h>
+#include "MemoryStream.h"
+#include "WebError.h"
+#include "WebURLResponse.h"
+
using namespace WebCore;
EmbeddedWidget* EmbeddedWidget::create(IWebEmbeddedView* view, Element* element, HWND parentWindow, const IntSize& size)
@@ -84,7 +88,7 @@ void EmbeddedWidget::setFrameRect(const IntRect& rect)
frameRectsChanged();
}
-void EmbeddedWidget::frameRectsChanged() const
+void EmbeddedWidget::frameRectsChanged()
{
if (!parent())
return;
@@ -207,3 +211,30 @@ void EmbeddedWidget::detachFromWindow()
ShowWindow(m_window, SW_HIDE);
m_attachedToWindow = false;
}
+
+void EmbeddedWidget::didReceiveResponse(const ResourceResponse& response)
+{
+ ASSERT(m_view);
+
+ COMPtr<IWebURLResponse> urlResponse(AdoptCOM, WebURLResponse::createInstance(response));
+ m_view->didReceiveResponse(urlResponse.get());
+}
+
+void EmbeddedWidget::didReceiveData(const char* data, int length)
+{
+ RefPtr<SharedBuffer> buffer(SharedBuffer::create(data, length));
+
+ COMPtr<IStream> stream(AdoptCOM, MemoryStream::createInstance(buffer.release()));
+ m_view->didReceiveData(stream.get());
+}
+
+void EmbeddedWidget::didFinishLoading()
+{
+ m_view->didFinishLoading();
+}
+
+void EmbeddedWidget::didFail(const ResourceError& error)
+{
+ COMPtr<IWebError> webError(AdoptCOM, WebError::createInstance(error));
+ m_view->didFail(webError.get());
+}
diff --git a/WebKit/win/WebCoreSupport/EmbeddedWidget.h b/WebKit/win/WebCoreSupport/EmbeddedWidget.h
index ed7c025..56cd436 100644
--- a/WebKit/win/WebCoreSupport/EmbeddedWidget.h
+++ b/WebKit/win/WebCoreSupport/EmbeddedWidget.h
@@ -28,7 +28,7 @@
#include <WebCore/COMPtr.h>
#include <WebCore/IntRect.h>
-#include <WebCore/Widget.h>
+#include <WebCore/PluginView.h>
namespace WebCore {
class Element;
@@ -37,7 +37,7 @@ namespace WebCore {
interface IWebEmbeddedView;
-class EmbeddedWidget : public WebCore::Widget {
+class EmbeddedWidget : public WebCore::Widget, public WebCore::PluginManualLoader {
public:
static EmbeddedWidget* create(IWebEmbeddedView*, WebCore::Element* element, HWND parentWindow, const WebCore::IntSize&);
~EmbeddedWidget();
@@ -54,9 +54,14 @@ private:
bool createWindow(HWND parentWindow, const WebCore::IntSize& size);
+ virtual void didReceiveResponse(const WebCore::ResourceResponse&);
+ virtual void didReceiveData(const char*, int);
+ virtual void didFinishLoading();
+ virtual void didFail(const WebCore::ResourceError&);
+
virtual void invalidateRect(const WebCore::IntRect&);
virtual void setFrameRect(const WebCore::IntRect&);
- virtual void frameRectsChanged() const;
+ virtual void frameRectsChanged();
virtual void setFocus();
virtual void show();
virtual void hide();
@@ -73,8 +78,8 @@ private:
bool m_isVisible;
bool m_attachedToWindow;
- mutable WebCore::IntRect m_clipRect; // The clip rect to apply to an embedded view.
- mutable WebCore::IntRect m_windowRect; // Our window rect.
+ WebCore::IntRect m_clipRect; // The clip rect to apply to an embedded view.
+ WebCore::IntRect m_windowRect; // Our window rect.
};
#endif // EmbeddedWidget_h
diff --git a/WebKit/win/WebCoreSupport/WebChromeClient.cpp b/WebKit/win/WebCoreSupport/WebChromeClient.cpp
index dba87e5..9aec24b 100644
--- a/WebKit/win/WebCoreSupport/WebChromeClient.cpp
+++ b/WebKit/win/WebCoreSupport/WebChromeClient.cpp
@@ -40,6 +40,7 @@
#include <WebCore/FrameLoadRequest.h>
#include <WebCore/FrameView.h>
#include <WebCore/LocalizedStrings.h>
+#include <WebCore/NotImplemented.h>
#include <WebCore/Page.h>
#include <WebCore/WindowFeatures.h>
#pragma warning(pop)
@@ -474,6 +475,11 @@ PlatformWidget WebChromeClient::platformWindow() const
return viewWindow;
}
+void WebChromeClient::contentsSizeChanged(Frame*, const IntSize&) const
+{
+ notImplemented();
+}
+
void WebChromeClient::mouseDidMoveOverElement(const HitTestResult& result, unsigned modifierFlags)
{
COMPtr<IWebUIDelegate> uiDelegate;
diff --git a/WebKit/win/WebCoreSupport/WebChromeClient.h b/WebKit/win/WebCoreSupport/WebChromeClient.h
index 83c5a70..cb9f470 100644
--- a/WebKit/win/WebCoreSupport/WebChromeClient.h
+++ b/WebKit/win/WebCoreSupport/WebChromeClient.h
@@ -97,6 +97,7 @@ public:
virtual WebCore::IntPoint screenToWindow(const WebCore::IntPoint& p) const;
virtual WebCore::IntRect windowToScreen(const WebCore::IntRect& r) const;
virtual PlatformWidget platformWindow() const;
+ virtual void contentsSizeChanged(WebCore::Frame*, const WebCore::IntSize&) const;
virtual void mouseDidMoveOverElement(const WebCore::HitTestResult&, unsigned modifierFlags);
@@ -117,6 +118,8 @@ public:
WebView* webView() const { return m_webView; }
+ virtual void formStateDidChange(const WebCore::Node*) { }
+
private:
COMPtr<IWebUIDelegate> uiDelegate();
COMPtr<IWebUIDelegate2> uiDelegate2();
diff --git a/WebKit/win/WebCoreSupport/WebContextMenuClient.cpp b/WebKit/win/WebCoreSupport/WebContextMenuClient.cpp
index be7b483..deabb5c 100644
--- a/WebKit/win/WebCoreSupport/WebContextMenuClient.cpp
+++ b/WebKit/win/WebCoreSupport/WebContextMenuClient.cpp
@@ -160,7 +160,7 @@ void WebContextMenuClient::searchWithGoogle(const Frame* frame)
ResourceRequest request = ResourceRequest(url);
if (Page* page = frame->page())
- page->mainFrame()->loader()->urlSelected(FrameLoadRequest(request), 0, false);
+ page->mainFrame()->loader()->urlSelected(FrameLoadRequest(request), 0, false, false);
}
void WebContextMenuClient::lookUpInDictionary(Frame*)
diff --git a/WebKit/win/WebCoreSupport/WebDragClient.cpp b/WebKit/win/WebCoreSupport/WebDragClient.cpp
index c35991f..d42f7b5 100644
--- a/WebKit/win/WebCoreSupport/WebDragClient.cpp
+++ b/WebKit/win/WebCoreSupport/WebDragClient.cpp
@@ -30,7 +30,6 @@
#include "WebView.h"
#include <shlobj.h>
-#include <CoreGraphics/CoreGraphics.h>
#pragma warning(push, 0)
#include <WebCore/ClipboardWin.h>
@@ -46,7 +45,8 @@
#pragma warning(pop)
namespace WebCore {
- HBITMAP allocImage(HDC dc, IntSize size, CGContextRef *targetRef);
+ HBITMAP allocImage(HDC dc, IntSize size, PlatformGraphicsContext** targetRef);
+ void deallocContext(PlatformGraphicsContext* target);
}
@@ -223,7 +223,7 @@ DragImageRef WebDragClient::createDragImageForLink(KURL& url, const String& inLa
return 0;
}
- CGContextRef contextRef;
+ PlatformGraphicsContext* contextRef;
image = allocImage(workingDC, imageSize, &contextRef);
if (!image) {
DeleteDC(workingDC);
@@ -237,7 +237,6 @@ DragImageRef WebDragClient::createDragImageForLink(KURL& url, const String& inLa
// for drag images on win, so we use 1
static const Color backgroundColor(140, 140, 140);
static const IntSize radii(DRAG_LABEL_RADIUS, DRAG_LABEL_RADIUS);
- context.setFont(labelFont);
IntRect rect(0, 0, imageSize.width(), imageSize.height());
context.fillRoundedRect(rect, radii, radii, radii, radii, backgroundColor);
@@ -257,7 +256,7 @@ DragImageRef WebDragClient::createDragImageForLink(KURL& url, const String& inLa
IntPoint textPos(DRAG_LABEL_BORDER_X, DRAG_LABEL_BORDER_Y + labelFont.pixelSize());
WebCoreDrawDoubledTextAtPoint(context, label, textPos, labelFont, topColor, bottomColor);
- CGContextRelease(contextRef);
+ deallocContext(contextRef);
DeleteDC(workingDC);
ReleaseDC(0, dc);
return image;
diff --git a/WebKit/win/WebCoreSupport/WebEditorClient.cpp b/WebKit/win/WebCoreSupport/WebEditorClient.cpp
index e38cd0d..985742f 100644
--- a/WebKit/win/WebCoreSupport/WebEditorClient.cpp
+++ b/WebKit/win/WebCoreSupport/WebEditorClient.cpp
@@ -295,6 +295,13 @@ bool WebEditorClient::smartInsertDeleteEnabled(void)
return !!enabled;
}
+bool WebEditorClient::isSelectTrailingWhitespaceEnabled(void)
+{
+ BOOL enabled = FALSE;
+ m_webView->isSelectTrailingWhitespaceEnabled(&enabled);
+ return !!enabled;
+}
+
bool WebEditorClient::shouldChangeSelectedRange(WebCore::Range*, WebCore::Range*, WebCore::EAffinity, bool)
{ notImplemented(); return true; }
diff --git a/WebKit/win/WebCoreSupport/WebEditorClient.h b/WebKit/win/WebCoreSupport/WebEditorClient.h
index 8c603f2..52cb66d 100644
--- a/WebKit/win/WebCoreSupport/WebEditorClient.h
+++ b/WebKit/win/WebCoreSupport/WebEditorClient.h
@@ -75,6 +75,7 @@ public:
void webViewDidChangeSelection(WebNotification*);
bool smartInsertDeleteEnabled();
+ bool isSelectTrailingWhitespaceEnabled();
void registerCommandForUndo(PassRefPtr<WebCore::EditCommand>);
void registerCommandForRedo(PassRefPtr<WebCore::EditCommand>);
diff --git a/WebKit/win/WebCoreSupport/WebFrameLoaderClient.cpp b/WebKit/win/WebCoreSupport/WebFrameLoaderClient.cpp
index 17bee47..1af1673 100644
--- a/WebKit/win/WebCoreSupport/WebFrameLoaderClient.cpp
+++ b/WebKit/win/WebCoreSupport/WebFrameLoaderClient.cpp
@@ -31,9 +31,11 @@
#include "CFDictionaryPropertyBag.h"
#include "COMPropertyBag.h"
+#include "DOMHTMLClasses.h"
#include "EmbeddedWidget.h"
#include "MarshallingHelpers.h"
-#include "WebCachedPagePlatformData.h"
+#include "NotImplemented.h"
+#include "WebCachedFramePlatformData.h"
#include "WebChromeClient.h"
#include "WebDocumentLoader.h"
#include "WebError.h"
@@ -46,6 +48,7 @@
#include "WebURLResponse.h"
#include "WebView.h"
#pragma warning(push, 0)
+#include <WebCore/CachedFrame.h>
#include <WebCore/DocumentLoader.h>
#include <WebCore/FrameLoader.h>
#include <WebCore/FrameTree.h>
@@ -71,7 +74,7 @@ static WebDataSource* getWebDataSource(DocumentLoader* loader)
WebFrameLoaderClient::WebFrameLoaderClient(WebFrame* webFrame)
: m_webFrame(webFrame)
- , m_pluginView(0)
+ , m_manualLoader(0)
, m_hasSentResponseToPlugin(false)
{
ASSERT_ARG(webFrame, webFrame);
@@ -102,8 +105,27 @@ void WebFrameLoaderClient::assignIdentifierToInitialRequest(unsigned long identi
resourceLoadDelegate->identifierForInitialRequest(webView, webURLRequest.get(), getWebDataSource(loader), identifier);
}
+bool WebFrameLoaderClient::shouldUseCredentialStorage(DocumentLoader* loader, unsigned long identifier)
+{
+ WebView* webView = m_webFrame->webView();
+ COMPtr<IWebResourceLoadDelegate> resourceLoadDelegate;
+ if (FAILED(webView->resourceLoadDelegate(&resourceLoadDelegate)))
+ return true;
+
+ COMPtr<IWebResourceLoadDelegatePrivate2> resourceLoadDelegatePrivate;
+ if (FAILED(resourceLoadDelegate->QueryInterface(IID_IWebResourceLoadDelegatePrivate2, reinterpret_cast<void**>(&resourceLoadDelegatePrivate))))
+ return true;
+
+ BOOL shouldUse;
+ if (SUCCEEDED(resourceLoadDelegatePrivate->shouldUseCredentialStorage(webView, identifier, getWebDataSource(loader), &shouldUse)))
+ return shouldUse;
+
+ return true;
+}
+
void WebFrameLoaderClient::dispatchDidReceiveAuthenticationChallenge(DocumentLoader* loader, unsigned long identifier, const AuthenticationChallenge& challenge)
{
+#if USE(CFNETWORK)
ASSERT(challenge.sourceHandle());
WebView* webView = m_webFrame->webView();
@@ -117,6 +139,9 @@ void WebFrameLoaderClient::dispatchDidReceiveAuthenticationChallenge(DocumentLoa
// If the ResourceLoadDelegate doesn't exist or fails to handle the call, we tell the ResourceHandle
// to continue without credential - this is the best approximation of Mac behavior
challenge.sourceHandle()->receivedRequestToContinueWithoutCredential(challenge);
+#else
+ notImplemented();
+#endif
}
void WebFrameLoaderClient::dispatchDidCancelAuthenticationChallenge(DocumentLoader* loader, unsigned long identifier, const AuthenticationChallenge& challenge)
@@ -297,6 +322,17 @@ void WebFrameLoaderClient::dispatchDidFirstLayout()
frameLoadDelegatePriv->didFirstLayoutInFrame(webView, m_webFrame);
}
+void WebFrameLoaderClient::dispatchDidFirstVisuallyNonEmptyLayout()
+{
+ WebView* webView = m_webFrame->webView();
+ COMPtr<IWebFrameLoadDelegatePrivate> frameLoadDelegatePrivate;
+ if (SUCCEEDED(webView->frameLoadDelegatePrivate(&frameLoadDelegatePrivate)) && frameLoadDelegatePrivate) {
+ COMPtr<IWebFrameLoadDelegatePrivate2> frameLoadDelegatePrivate2(Query, frameLoadDelegatePrivate);
+ if (frameLoadDelegatePrivate2)
+ frameLoadDelegatePrivate2->didFirstVisuallyNonEmptyLayoutInFrame(webView, m_webFrame);
+ }
+}
+
Frame* WebFrameLoaderClient::dispatchCreatePage()
{
WebView* webView = m_webFrame->webView();
@@ -331,12 +367,11 @@ void WebFrameLoaderClient::dispatchDidLoadMainResource(DocumentLoader*)
void WebFrameLoaderClient::setMainDocumentError(DocumentLoader*, const ResourceError& error)
{
- if (!m_pluginView)
+ if (!m_manualLoader)
return;
- if (m_pluginView->status() == PluginStatusLoadedSuccessfully)
- m_pluginView->didFail(error);
- m_pluginView = 0;
+ m_manualLoader->didFail(error);
+ m_manualLoader = 0;
m_hasSentResponseToPlugin = false;
}
@@ -366,22 +401,22 @@ void WebFrameLoaderClient::committedLoad(DocumentLoader* loader, const char* dat
// FIXME: This should probably go through the data source.
const String& textEncoding = loader->response().textEncodingName();
- if (!m_pluginView)
+ if (!m_manualLoader)
receivedData(data, length, textEncoding);
- if (!m_pluginView || m_pluginView->status() != PluginStatusLoadedSuccessfully)
+ if (!m_manualLoader)
return;
if (!m_hasSentResponseToPlugin) {
- m_pluginView->didReceiveResponse(core(m_webFrame)->loader()->documentLoader()->response());
+ m_manualLoader->didReceiveResponse(core(m_webFrame)->loader()->documentLoader()->response());
// didReceiveResponse sets up a new stream to the plug-in. on a full-page plug-in, a failure in
- // setting up this stream can cause the main document load to be cancelled, setting m_pluginView
+ // setting up this stream can cause the main document load to be cancelled, setting m_manualLoader
// to null
- if (!m_pluginView)
+ if (!m_manualLoader)
return;
m_hasSentResponseToPlugin = true;
}
- m_pluginView->didReceiveData(data, length);
+ m_manualLoader->didReceiveData(data, length);
}
void WebFrameLoaderClient::receivedData(const char* data, int length, const String& textEncoding)
@@ -405,23 +440,44 @@ void WebFrameLoaderClient::finishedLoading(DocumentLoader* loader)
// Telling the frame we received some data and passing 0 as the data is our
// way to get work done that is normally done when the first bit of data is
// received, even for the case of a document with no data (like about:blank)
- if (!m_pluginView) {
+ if (!m_manualLoader) {
committedLoad(loader, 0, 0);
return;
}
- if (m_pluginView->status() == PluginStatusLoadedSuccessfully)
- m_pluginView->didFinishLoading();
- m_pluginView = 0;
+ m_manualLoader->didFinishLoading();
+ m_manualLoader = 0;
m_hasSentResponseToPlugin = false;
}
-void WebFrameLoaderClient::updateGlobalHistory(const KURL& url)
+void WebFrameLoaderClient::updateGlobalHistory()
{
WebHistory* history = WebHistory::sharedHistory();
if (!history)
return;
- history->addItem(url, core(m_webFrame)->loader()->documentLoader()->title());
+
+ DocumentLoader* loader = core(m_webFrame)->loader()->documentLoader();
+
+ if (loader->urlForHistoryReflectsServerRedirect()) {
+ history->visitedURL(loader->urlForHistory(), loader->title(), loader->request().httpMethod(), loader->urlForHistoryReflectsFailure(), loader->url(), false);
+ return;
+ }
+
+ if (loader->urlForHistoryReflectsClientRedirect()) {
+ history->visitedURL(loader->urlForHistory(), loader->title(), loader->request().httpMethod(), loader->urlForHistoryReflectsFailure(), KURL(), true);
+ return;
+ }
+
+ history->visitedURL(loader->urlForHistory(), loader->title(), loader->request().httpMethod(), loader->urlForHistoryReflectsFailure(), KURL(), false);
+}
+
+void WebFrameLoaderClient::updateGlobalHistoryForRedirectWithoutHistoryItem()
+{
+ WebHistory* history = WebHistory::sharedHistory();
+ if (!history)
+ return;
+ DocumentLoader* loader = core(m_webFrame)->loader()->documentLoader();
+ history->visitedURLForRedirectWithoutHistoryItem(loader->url());
}
bool WebFrameLoaderClient::shouldGoToHistoryItem(HistoryItem*) const
@@ -464,56 +520,35 @@ void WebFrameLoaderClient::setTitle(const String& title, const KURL& url)
itemPrivate->setTitle(BString(title));
}
-void WebFrameLoaderClient::savePlatformDataToCachedPage(CachedPage* cachedPage)
+void WebFrameLoaderClient::savePlatformDataToCachedFrame(CachedFrame* cachedFrame)
{
+#if USE(CFNETWORK)
Frame* coreFrame = core(m_webFrame);
if (!coreFrame)
return;
- ASSERT(coreFrame->loader()->documentLoader() == cachedPage->documentLoader());
+ ASSERT(coreFrame->loader()->documentLoader() == cachedFrame->documentLoader());
- WebCachedPagePlatformData* webPlatformData = new WebCachedPagePlatformData(static_cast<IWebDataSource*>(getWebDataSource(coreFrame->loader()->documentLoader())));
- cachedPage->setCachedPagePlatformData(webPlatformData);
+ WebCachedFramePlatformData* webPlatformData = new WebCachedFramePlatformData(static_cast<IWebDataSource*>(getWebDataSource(coreFrame->loader()->documentLoader())));
+ cachedFrame->setCachedFramePlatformData(webPlatformData);
+#else
+ notImplemented();
+#endif
}
-void WebFrameLoaderClient::transitionToCommittedForNewPage()
+void WebFrameLoaderClient::transitionToCommittedFromCachedFrame(CachedFrame*)
{
- Frame* frame = core(m_webFrame);
- ASSERT(frame);
-
- Page* page = frame->page();
- ASSERT(page);
-
- bool isMainFrame = frame == page->mainFrame();
-
- if (isMainFrame && frame->view())
- frame->view()->setParentVisible(false);
-
- frame->setView(0);
-
- WebView* webView = m_webFrame->webView();
-
- FrameView* frameView;
- if (isMainFrame) {
- RECT rect;
- webView->frameRect(&rect);
- frameView = new FrameView(frame, IntRect(rect).size());
- } else
- frameView = new FrameView(frame);
-
- frame->setView(frameView);
- frameView->deref(); // FrameViews are created with a ref count of 1. Release this ref since we've assigned it to frame.
-
- m_webFrame->updateBackground();
-
- if (isMainFrame)
- frameView->setParentVisible(true);
+}
- if (frame->ownerRenderer())
- frame->ownerRenderer()->setWidget(frameView);
+void WebFrameLoaderClient::transitionToCommittedForNewPage()
+{
+ WebView* view = m_webFrame->webView();
- if (HTMLFrameOwnerElement* owner = frame->ownerElement())
- frame->view()->setCanHaveScrollbars(owner->scrollingMode() != ScrollbarAlwaysOff);
+ RECT rect;
+ view->frameRect(&rect);
+ bool transparent = view->transparent();
+ Color backgroundColor = transparent ? Color::transparent : Color::white;
+ WebCore::FrameLoaderClient::transitionToCommittedForNewPage(core(m_webFrame), IntRect(rect).size(), backgroundColor, transparent, IntSize(), false);
}
bool WebFrameLoaderClient::canCachePage() const
@@ -562,18 +597,14 @@ void WebFrameLoaderClient::loadURLIntoChild(const KURL& originalURL, const Strin
HistoryItem* parentItem = coreFrame->loader()->currentHistoryItem();
FrameLoadType loadType = coreFrame->loader()->loadType();
- FrameLoadType childLoadType = FrameLoadTypeRedirectWithLockedHistory;
+ FrameLoadType childLoadType = FrameLoadTypeRedirectWithLockedBackForwardList;
KURL url = originalURL;
// If we're moving in the backforward list, we might want to replace the content
// of this child frame with whatever was there at that point.
// Reload will maintain the frame contents, LoadSame will not.
- if (parentItem && parentItem->children().size() &&
- (isBackForwardLoadType(loadType)
- || loadType == FrameLoadTypeReload
- || loadType == FrameLoadTypeReloadAllowingStaleData))
- {
+ if (parentItem && parentItem->children().size() && isBackForwardLoadType(loadType)) {
if (HistoryItem* childItem = parentItem->childItemWithName(core(childFrame)->tree()->name())) {
// Use the original URL to ensure we get all the side-effects, such as
// onLoad handlers, of any redirects that happened. An example of where
@@ -593,7 +624,7 @@ void WebFrameLoaderClient::loadURLIntoChild(const KURL& originalURL, const Strin
// FIXME: Handle loading WebArchives here
String frameName = core(childFrame)->tree()->name();
- core(childFrame)->loader()->loadURL(url, referrer, frameName, childLoadType, 0, 0);
+ core(childFrame)->loader()->loadURL(url, referrer, frameName, false, childLoadType, 0, 0);
}
Widget* WebFrameLoaderClient::createPlugin(const IntSize& pluginSize, Element* element, const KURL& url, const Vector<String>& paramNames, const Vector<String>& paramValues, const String& mimeType, bool loadManually)
@@ -610,11 +641,16 @@ Widget* WebFrameLoaderClient::createPlugin(const IntSize& pluginSize, Element* e
for (unsigned i = 0; i < paramNames.size(); i++)
viewArguments.set(paramNames[i], paramValues[i]);
COMPtr<IPropertyBag> viewArgumentsBag(AdoptCOM, COMPropertyBag<String>::adopt(viewArguments));
+ COMPtr<IDOMElement> containingElement(AdoptCOM, DOMElement::createInstance(element));
+
+ HashMap<String, COMVariant> arguments;
- // Now create a new property bag where the view arguments is the only property.
- HashMap<String, COMPtr<IUnknown> > arguments;
- arguments.set(WebEmbeddedViewAttributesKey, COMPtr<IUnknown>(AdoptCOM, viewArgumentsBag.releaseRef()));
- COMPtr<IPropertyBag> argumentsBag(AdoptCOM, COMPropertyBag<COMPtr<IUnknown> >::adopt(arguments));
+ arguments.set(WebEmbeddedViewAttributesKey, viewArgumentsBag);
+ arguments.set(WebEmbeddedViewBaseURLKey, url.string());
+ arguments.set(WebEmbeddedViewContainingElementKey, containingElement);
+ arguments.set(WebEmbeddedViewMIMETypeKey, mimeType);
+
+ COMPtr<IPropertyBag> argumentsBag(AdoptCOM, COMPropertyBag<COMVariant>::adopt(arguments));
COMPtr<IWebEmbeddedView> view;
HRESULT result = uiPrivate->embeddedViewWithArguments(webView, m_webFrame, argumentsBag.get(), &view);
@@ -694,7 +730,10 @@ void WebFrameLoaderClient::redirectDataToPlugin(Widget* pluginWidget)
{
// Ideally, this function shouldn't be necessary, see <rdar://problem/4852889>
- m_pluginView = static_cast<PluginView*>(pluginWidget);
+ if (pluginWidget->isPluginView())
+ m_manualLoader = static_cast<PluginView*>(pluginWidget);
+ else
+ m_manualLoader = static_cast<EmbeddedWidget*>(pluginWidget);
}
WebHistory* WebFrameLoaderClient::webHistory() const
@@ -704,3 +743,12 @@ WebHistory* WebFrameLoaderClient::webHistory() const
return WebHistory::sharedHistory();
}
+
+bool WebFrameLoaderClient::shouldUsePluginDocument(const String& mimeType) const
+{
+ WebView* webView = m_webFrame->webView();
+ if (!webView)
+ return false;
+
+ return webView->shouldUseEmbeddedView(mimeType);
+}
diff --git a/WebKit/win/WebCoreSupport/WebFrameLoaderClient.h b/WebKit/win/WebCoreSupport/WebFrameLoaderClient.h
index b9fd027..3877273 100644
--- a/WebKit/win/WebCoreSupport/WebFrameLoaderClient.h
+++ b/WebKit/win/WebCoreSupport/WebFrameLoaderClient.h
@@ -34,7 +34,7 @@
#pragma warning(pop)
namespace WebCore {
- class PluginView;
+ class PluginManualLoader;
}
template <typename T> class COMPtr;
@@ -49,6 +49,7 @@ public:
virtual void assignIdentifierToInitialRequest(unsigned long identifier, WebCore::DocumentLoader*, const WebCore::ResourceRequest&);
virtual void dispatchWillSendRequest(WebCore::DocumentLoader*, unsigned long identifier, WebCore::ResourceRequest&, const WebCore::ResourceResponse& redirectResponse);
+ virtual bool shouldUseCredentialStorage(WebCore::DocumentLoader*, unsigned long identifier);
virtual void dispatchDidReceiveAuthenticationChallenge(WebCore::DocumentLoader*, unsigned long identifier, const WebCore::AuthenticationChallenge&);
virtual void dispatchDidCancelAuthenticationChallenge(WebCore::DocumentLoader*, unsigned long identifier, const WebCore::AuthenticationChallenge&);
virtual void dispatchDidReceiveResponse(WebCore::DocumentLoader*, unsigned long identifier, const WebCore::ResourceResponse&);
@@ -69,6 +70,7 @@ public:
virtual void dispatchDidFinishDocumentLoad();
virtual void dispatchDidFinishLoad();
virtual void dispatchDidFirstLayout();
+ virtual void dispatchDidFirstVisuallyNonEmptyLayout();
virtual WebCore::Frame* dispatchCreatePage();
virtual void dispatchShow();
@@ -83,13 +85,15 @@ public:
virtual void committedLoad(WebCore::DocumentLoader*, const char*, int);
virtual void finishedLoading(WebCore::DocumentLoader*);
- virtual void updateGlobalHistory(const WebCore::KURL&);
+ virtual void updateGlobalHistory();
+ virtual void updateGlobalHistoryForRedirectWithoutHistoryItem();
virtual bool shouldGoToHistoryItem(WebCore::HistoryItem*) const;
virtual PassRefPtr<WebCore::DocumentLoader> createDocumentLoader(const WebCore::ResourceRequest&, const WebCore::SubstituteData&);
virtual void setTitle(const WebCore::String& title, const WebCore::KURL&);
- virtual void savePlatformDataToCachedPage(WebCore::CachedPage*);
+ virtual void savePlatformDataToCachedFrame(WebCore::CachedFrame*);
+ virtual void transitionToCommittedFromCachedFrame(WebCore::CachedFrame*);
virtual void transitionToCommittedForNewPage();
virtual bool canCachePage() const;
@@ -99,6 +103,8 @@ public:
virtual WebCore::Widget* createPlugin(const WebCore::IntSize&, WebCore::Element*, const WebCore::KURL&, const Vector<WebCore::String>&, const Vector<WebCore::String>&, const WebCore::String&, bool loadManually);
virtual void redirectDataToPlugin(WebCore::Widget* pluginWidget);
+ virtual bool shouldUsePluginDocument(const WebCore::String& mimeType) const;
+
protected:
WebFrameLoaderClient(WebFrame*);
~WebFrameLoaderClient();
@@ -111,8 +117,8 @@ private:
WebFrame* m_webFrame;
- // Points to the plugin view that data should be redirected to.
- WebCore::PluginView* m_pluginView;
+ // Points to the manual loader that data should be redirected to.
+ WebCore::PluginManualLoader* m_manualLoader;
bool m_hasSentResponseToPlugin;
};
diff --git a/WebKit/win/WebCoreSupport/WebInspectorClient.cpp b/WebKit/win/WebCoreSupport/WebInspectorClient.cpp
index bfbf858..56cf0df 100644
--- a/WebKit/win/WebCoreSupport/WebInspectorClient.cpp
+++ b/WebKit/win/WebCoreSupport/WebInspectorClient.cpp
@@ -72,6 +72,7 @@ WebInspectorClient::WebInspectorClient(WebView* webView)
: m_inspectedWebView(webView)
, m_hwnd(0)
, m_webViewHwnd(0)
+ , m_shouldAttachWhenShown(false)
, m_attached(false)
{
ASSERT(m_inspectedWebView);
@@ -202,20 +203,13 @@ String WebInspectorClient::localizedStringsURL()
void WebInspectorClient::showWindow()
{
- if (!m_hwnd)
- return;
-
- updateWindowTitle();
- ::SetWindowPos(m_hwnd, HWND_TOP, 0, 0, 0, 0, SWP_SHOWWINDOW | SWP_NOMOVE | SWP_NOSIZE);
+ showWindowWithoutNotifications();
m_inspectedWebView->page()->inspectorController()->setWindowVisible(true);
}
void WebInspectorClient::closeWindow()
{
- if (!m_webView)
- return;
-
- ::ShowWindow(m_hwnd, SW_HIDE);
+ closeWindowWithoutNotifications();
m_inspectedWebView->page()->inspectorController()->setWindowVisible(false);
}
@@ -226,27 +220,13 @@ bool WebInspectorClient::windowVisible()
void WebInspectorClient::attachWindow()
{
- ASSERT(m_hwnd);
- ASSERT(m_webView);
- ASSERT(m_inspectedWebViewHwnd);
-
if (m_attached)
return;
- WindowMessageBroadcaster::addListener(m_inspectedWebViewHwnd, this);
+ m_shouldAttachWhenShown = true;
- HWND hostWindow;
- if (FAILED(m_inspectedWebView->hostWindow((OLE_HANDLE*)&hostWindow)))
- return;
-
- m_webView->setHostWindow((OLE_HANDLE)(ULONG64)hostWindow);
- ::ShowWindow(m_hwnd, SW_HIDE);
- m_attached = true;
-
- ::SendMessage(hostWindow, WM_SIZE, 0, 0);
-
- if (m_highlight && m_highlight->isShowing())
- m_highlight->update();
+ closeWindowWithoutNotifications();
+ showWindowWithoutNotifications();
}
void WebInspectorClient::detachWindow()
@@ -254,20 +234,10 @@ void WebInspectorClient::detachWindow()
if (!m_attached)
return;
- WindowMessageBroadcaster::removeListener(m_inspectedWebViewHwnd, this);
-
- m_attached = false;
-
- m_webView->setHostWindow((OLE_HANDLE)(ULONG64)m_hwnd);
- ::ShowWindow(m_hwnd, SW_SHOW);
- ::SendMessage(m_hwnd, WM_SIZE, 0, 0);
+ m_shouldAttachWhenShown = false;
- HWND hostWindow;
- if (SUCCEEDED(m_inspectedWebView->hostWindow((OLE_HANDLE*)&hostWindow)))
- ::SendMessage(hostWindow, WM_SIZE, 0, 0);
-
- if (m_highlight && m_highlight->isShowing())
- m_highlight->update();
+ closeWindowWithoutNotifications();
+ showWindowWithoutNotifications();
}
void WebInspectorClient::setAttachedWindowHeight(unsigned height)
@@ -303,6 +273,74 @@ void WebInspectorClient::inspectedURLChanged(const String& newURL)
updateWindowTitle();
}
+void WebInspectorClient::closeWindowWithoutNotifications()
+{
+ if (!m_hwnd)
+ return;
+
+ if (!m_attached) {
+ ShowWindow(m_hwnd, SW_HIDE);
+ return;
+ }
+
+ ASSERT(m_webView);
+ ASSERT(m_inspectedWebViewHwnd);
+ ASSERT(!IsWindowVisible(m_hwnd));
+
+ // Remove the Inspector's WebView from the inspected WebView's parent window.
+ WindowMessageBroadcaster::removeListener(m_inspectedWebViewHwnd, this);
+
+ m_attached = false;
+
+ m_webView->setHostWindow(reinterpret_cast<OLE_HANDLE>(m_hwnd));
+
+ // Make sure everything has the right size/position.
+ HWND hostWindow;
+ if (SUCCEEDED(m_inspectedWebView->hostWindow((OLE_HANDLE*)&hostWindow)))
+ SendMessage(hostWindow, WM_SIZE, 0, 0);
+
+ if (m_highlight && m_highlight->isShowing())
+ m_highlight->update();
+}
+
+void WebInspectorClient::showWindowWithoutNotifications()
+{
+ if (!m_hwnd)
+ return;
+
+ ASSERT(m_webView);
+ ASSERT(m_inspectedWebViewHwnd);
+
+ if (!m_shouldAttachWhenShown) {
+ // Put the Inspector's WebView inside our window and show it.
+ m_webView->setHostWindow(reinterpret_cast<OLE_HANDLE>(m_hwnd));
+ SendMessage(m_hwnd, WM_SIZE, 0, 0);
+ updateWindowTitle();
+
+ SetWindowPos(m_hwnd, HWND_TOP, 0, 0, 0, 0, SWP_SHOWWINDOW | SWP_NOMOVE | SWP_NOSIZE);
+ return;
+ }
+
+ // Put the Inspector's WebView inside the inspected WebView's parent window.
+ WindowMessageBroadcaster::addListener(m_inspectedWebViewHwnd, this);
+
+ HWND hostWindow;
+ if (FAILED(m_inspectedWebView->hostWindow(reinterpret_cast<OLE_HANDLE*>(&hostWindow))))
+ return;
+
+ m_webView->setHostWindow(reinterpret_cast<OLE_HANDLE>(hostWindow));
+
+ // Then hide our own window.
+ ShowWindow(m_hwnd, SW_HIDE);
+
+ m_attached = true;
+
+ // Make sure everything has the right size/position.
+ SendMessage(hostWindow, WM_SIZE, 0, 0);
+ if (m_highlight && m_highlight->isShowing())
+ m_highlight->update();
+}
+
void WebInspectorClient::updateWindowTitle()
{
// FIXME: The series of appends should be replaced with a call to String::format()
diff --git a/WebKit/win/WebCoreSupport/WebInspectorClient.h b/WebKit/win/WebCoreSupport/WebInspectorClient.h
index a28507a..86317f6 100644
--- a/WebKit/win/WebCoreSupport/WebInspectorClient.h
+++ b/WebKit/win/WebCoreSupport/WebInspectorClient.h
@@ -71,6 +71,9 @@ public:
private:
~WebInspectorClient();
+ void closeWindowWithoutNotifications();
+ void showWindowWithoutNotifications();
+
void updateWindowTitle();
LRESULT onGetMinMaxInfo(WPARAM, LPARAM);
@@ -88,6 +91,7 @@ private:
COMPtr<WebView> m_webView;
HWND m_webViewHwnd;
+ bool m_shouldAttachWhenShown;
bool m_attached;
OwnPtr<WebNodeHighlight> m_highlight;
diff --git a/WebKit/win/WebDownload.cpp b/WebKit/win/WebDownload.cpp
index 8a2fe8e..0893a73 100644
--- a/WebKit/win/WebDownload.cpp
+++ b/WebKit/win/WebDownload.cpp
@@ -43,37 +43,29 @@
#include <sys/types.h>
#pragma warning(push, 0)
-#include <WebCore/AuthenticationCF.h>
#include <WebCore/BString.h>
#include <WebCore/NotImplemented.h>
#include <WebCore/ResourceError.h>
#include <WebCore/ResourceHandle.h>
#include <WebCore/ResourceRequest.h>
#include <WebCore/ResourceResponse.h>
-#include <WebCore/SystemTime.h>
+#include <wtf/CurrentTime.h>
+#include <wtf/StdLibExtras.h>
#pragma warning(pop)
using namespace WebCore;
-// CFURLDownload Callbacks ----------------------------------------------------------------
-static void didStartCallback(CFURLDownloadRef download, const void *clientInfo);
-static CFURLRequestRef willSendRequestCallback(CFURLDownloadRef download, CFURLRequestRef request, CFURLResponseRef redirectionResponse, const void *clientInfo);
-static void didReceiveAuthenticationChallengeCallback(CFURLDownloadRef download, CFURLAuthChallengeRef challenge, const void *clientInfo);
-static void didReceiveResponseCallback(CFURLDownloadRef download, CFURLResponseRef response, const void *clientInfo);
-static void willResumeWithResponseCallback(CFURLDownloadRef download, CFURLResponseRef response, UInt64 startingByte, const void *clientInfo);
-static void didReceiveDataCallback(CFURLDownloadRef download, CFIndex length, const void *clientInfo);
-static Boolean shouldDecodeDataOfMIMETypeCallback(CFURLDownloadRef download, CFStringRef encodingType, const void *clientInfo);
-static void decideDestinationWithSuggestedObjectNameCallback(CFURLDownloadRef download, CFStringRef objectName, const void *clientInfo);
-static void didCreateDestinationCallback(CFURLDownloadRef download, CFURLRef path, const void *clientInfo);
-static void didFinishCallback(CFURLDownloadRef download, const void *clientInfo);
-static void didFailCallback(CFURLDownloadRef download, CFErrorRef error, const void *clientInfo);
-
// Download Bundle file utilities ----------------------------------------------------------------
-static const String BundleExtension(".download");
-static UInt32 BundleMagicNumber = 0xDECAF4EA;
+const String& WebDownload::bundleExtension()
+{
+ DEFINE_STATIC_LOCAL(const String, bundleExtension, (".download"));
+ return bundleExtension;
+}
-static CFDataRef extractResumeDataFromBundle(const String& bundlePath);
-static HRESULT appendResumeDataToBundle(CFDataRef resumeData, const String& bundlePath);
+UInt32 WebDownload::bundleMagicNumber()
+{
+ return 0xDECAF4EA;
+}
// WebDownload ----------------------------------------------------------------
@@ -84,57 +76,6 @@ WebDownload::WebDownload()
gClassNameCount.add("WebDownload");
}
-void WebDownload::init(ResourceHandle* handle, const ResourceRequest& request, const ResourceResponse& response, IWebDownloadDelegate* delegate)
-{
- m_delegate = delegate ? delegate : DefaultDownloadDelegate::sharedInstance();
- CFURLConnectionRef connection = handle->connection();
- if (!connection) {
- LOG_ERROR("WebDownload::WebDownload(ResourceHandle*,...) called with an inactive ResourceHandle");
- return;
- }
-
- CFURLDownloadClient client = {0, this, 0, 0, 0, didStartCallback, willSendRequestCallback, didReceiveAuthenticationChallengeCallback,
- didReceiveResponseCallback, willResumeWithResponseCallback, didReceiveDataCallback, shouldDecodeDataOfMIMETypeCallback,
- decideDestinationWithSuggestedObjectNameCallback, didCreateDestinationCallback, didFinishCallback, didFailCallback};
-
- m_request.adoptRef(WebMutableURLRequest::createInstance(request));
- m_download.adoptCF(CFURLDownloadCreateAndStartWithLoadingConnection(0, connection, request.cfURLRequest(), response.cfURLResponse(), &client));
-
- // It is possible for CFURLDownloadCreateAndStartWithLoadingConnection() to fail if the passed in CFURLConnection is not in a "downloadable state"
- // However, we should never hit that case
- if (!m_download) {
- ASSERT_NOT_REACHED();
- LOG_ERROR("WebDownload - Failed to create WebDownload from existing connection (%s)", request.url().string().utf8().data());
- } else
- LOG(Download, "WebDownload - Created WebDownload %p from existing connection (%s)", this, request.url().string().utf8().data());
-
- // The CFURLDownload either starts successfully and retains the CFURLConnection,
- // or it fails to creating and we have a now-useless connection with a dangling ref.
- // Either way, we need to release the connection to balance out ref counts
- handle->releaseConnectionForDownload();
- CFRelease(connection);
-}
-
-void WebDownload::init(const KURL& url, IWebDownloadDelegate* delegate)
-{
- m_delegate = delegate ? delegate : DefaultDownloadDelegate::sharedInstance();
- LOG_ERROR("Delegate is %p", m_delegate.get());
-
- ResourceRequest request(url);
- CFURLRequestRef cfRequest = request.cfURLRequest();
-
- CFURLDownloadClient client = {0, this, 0, 0, 0, didStartCallback, willSendRequestCallback, didReceiveAuthenticationChallengeCallback,
- didReceiveResponseCallback, willResumeWithResponseCallback, didReceiveDataCallback, shouldDecodeDataOfMIMETypeCallback,
- decideDestinationWithSuggestedObjectNameCallback, didCreateDestinationCallback, didFinishCallback, didFailCallback};
- m_request.adoptRef(WebMutableURLRequest::createInstance(request));
- m_download.adoptCF(CFURLDownloadCreate(0, cfRequest, &client));
-
- CFURLDownloadScheduleWithCurrentMessageQueue(m_download.get());
- CFURLDownloadScheduleDownloadWithRunLoop(m_download.get(), ResourceHandle::loaderRunLoop(), kCFRunLoopDefaultMode);
-
- LOG(Download, "WebDownload - Initialized download of url %s in WebDownload %p", url.string().utf8().data(), this);
-}
-
WebDownload::~WebDownload()
{
LOG(Download, "WebDownload - Destroying download (%p)", this);
@@ -202,89 +143,6 @@ ULONG STDMETHODCALLTYPE WebDownload::Release(void)
// IWebDownload -------------------------------------------------------------------
-HRESULT STDMETHODCALLTYPE WebDownload::initWithRequest(
- /* [in] */ IWebURLRequest* request,
- /* [in] */ IWebDownloadDelegate* delegate)
-{
- COMPtr<WebMutableURLRequest> webRequest;
- if (!request || FAILED(request->QueryInterface(&webRequest))) {
- LOG(Download, "WebDownload - initWithRequest failed - not a WebMutableURLRequest");
- return E_FAIL;
- }
-
- if (!delegate)
- return E_FAIL;
- m_delegate = delegate;
- LOG(Download, "Delegate is %p", m_delegate.get());
-
- RetainPtr<CFURLRequestRef> cfRequest = webRequest->resourceRequest().cfURLRequest();
-
- CFURLDownloadClient client = {0, this, 0, 0, 0, didStartCallback, willSendRequestCallback, didReceiveAuthenticationChallengeCallback,
- didReceiveResponseCallback, willResumeWithResponseCallback, didReceiveDataCallback, shouldDecodeDataOfMIMETypeCallback,
- decideDestinationWithSuggestedObjectNameCallback, didCreateDestinationCallback, didFinishCallback, didFailCallback};
- m_request.adoptRef(WebMutableURLRequest::createInstance(webRequest.get()));
- m_download.adoptCF(CFURLDownloadCreate(0, cfRequest.get(), &client));
-
- // If for some reason the download failed to create,
- // we have particular cleanup to do
- if (!m_download) {
- m_request = 0;
- return E_FAIL;
- }
-
- CFURLDownloadScheduleWithCurrentMessageQueue(m_download.get());
- CFURLDownloadScheduleDownloadWithRunLoop(m_download.get(), ResourceHandle::loaderRunLoop(), kCFRunLoopDefaultMode);
-
- LOG(Download, "WebDownload - initWithRequest complete, started download of url %s", webRequest->resourceRequest().url().string().utf8().data());
- return S_OK;
-}
-
-HRESULT STDMETHODCALLTYPE WebDownload::initToResumeWithBundle(
- /* [in] */ BSTR bundlePath,
- /* [in] */ IWebDownloadDelegate* delegate)
-{
- LOG(Download, "Attempting resume of download bundle %s", String(bundlePath, SysStringLen(bundlePath)).ascii().data());
-
- RetainPtr<CFDataRef> resumeData(AdoptCF, extractResumeDataFromBundle(String(bundlePath, SysStringLen(bundlePath))));
-
- if (!resumeData)
- return E_FAIL;
-
- if (!delegate)
- return E_FAIL;
- m_delegate = delegate;
- LOG(Download, "Delegate is %p", m_delegate.get());
-
- CFURLDownloadClient client = {0, this, 0, 0, 0, didStartCallback, willSendRequestCallback, didReceiveAuthenticationChallengeCallback,
- didReceiveResponseCallback, willResumeWithResponseCallback, didReceiveDataCallback, shouldDecodeDataOfMIMETypeCallback,
- decideDestinationWithSuggestedObjectNameCallback, didCreateDestinationCallback, didFinishCallback, didFailCallback};
-
- RetainPtr<CFURLRef> pathURL(AdoptCF, MarshallingHelpers::PathStringToFileCFURLRef(String(bundlePath, SysStringLen(bundlePath))));
- ASSERT(pathURL);
-
- m_download.adoptCF(CFURLDownloadCreateWithResumeData(0, resumeData.get(), pathURL.get(), &client));
-
- if (!m_download) {
- LOG(Download, "Failed to create CFURLDownloadRef for resume");
- return E_FAIL;
- }
-
- m_bundlePath = String(bundlePath, SysStringLen(bundlePath));
- // Attempt to remove the ".download" extension from the bundle for the final file destination
- // Failing that, we clear m_destination and will ask the delegate later once the download starts
- if (m_bundlePath.endsWith(BundleExtension, false)) {
- m_destination = m_bundlePath.copy();
- m_destination.truncate(m_destination.length() - BundleExtension.length());
- } else
- m_destination = String();
-
- CFURLDownloadScheduleWithCurrentMessageQueue(m_download.get());
- CFURLDownloadScheduleDownloadWithRunLoop(m_download.get(), ResourceHandle::loaderRunLoop(), kCFRunLoopDefaultMode);
-
- LOG(Download, "WebDownload - initWithRequest complete, resumed download of bundle %s", String(bundlePath, SysStringLen(bundlePath)).ascii().data());
- return S_OK;
-}
-
HRESULT STDMETHODCALLTYPE WebDownload::canResumeDownloadDecodedWithEncodingMIMEType(
/* [in] */ BSTR,
/* [out, retval] */ BOOL*)
@@ -293,70 +151,6 @@ HRESULT STDMETHODCALLTYPE WebDownload::canResumeDownloadDecodedWithEncodingMIMET
return E_FAIL;
}
-HRESULT STDMETHODCALLTYPE WebDownload::start()
-{
- LOG(Download, "WebDownload - Starting download (%p)", this);
- if (!m_download)
- return E_FAIL;
-
- CFURLDownloadStart(m_download.get());
- // FIXME: 4950477 - CFURLDownload neglects to make the didStart() client call upon starting the download.
- // This is a somewhat critical call, so we'll fake it for now!
- didStart();
-
- return S_OK;
-}
-
-HRESULT STDMETHODCALLTYPE WebDownload::cancel()
-{
- LOG(Download, "WebDownload - Cancelling download (%p)", this);
- if (!m_download)
- return E_FAIL;
-
- CFURLDownloadCancel(m_download.get());
- m_download = 0;
- return S_OK;
-}
-
-HRESULT STDMETHODCALLTYPE WebDownload::cancelForResume()
-{
- LOG(Download, "WebDownload - Cancelling download (%p), writing resume information to file if possible", this);
- ASSERT(m_download);
- if (!m_download)
- return E_FAIL;
-
- HRESULT hr = S_OK;
- RetainPtr<CFDataRef> resumeData;
- if (m_destination.isEmpty()) {
- CFURLDownloadCancel(m_download.get());
- goto exit;
- }
-
- CFURLDownloadSetDeletesUponFailure(m_download.get(), false);
- CFURLDownloadCancel(m_download.get());
-
- resumeData = CFURLDownloadCopyResumeData(m_download.get());
- if (!resumeData) {
- LOG(Download, "WebDownload - Unable to create resume data for download (%p)", this);
- goto exit;
- }
-
- appendResumeDataToBundle(resumeData.get(), m_bundlePath);
-
-exit:
- m_download = 0;
- return hr;
-}
-
-HRESULT STDMETHODCALLTYPE WebDownload::deletesFileUponFailure(
- /* [out, retval] */ BOOL* result)
-{
- if (!m_download)
- return E_FAIL;
- *result = CFURLDownloadDeletesUponFailure(m_download.get());
- return S_OK;
-}
-
HRESULT STDMETHODCALLTYPE WebDownload::bundlePathForTargetPath(
/* [in] */ BSTR targetPath,
/* [out, retval] */ BSTR* bundlePath)
@@ -371,10 +165,10 @@ HRESULT STDMETHODCALLTYPE WebDownload::bundlePathForTargetPath(
if (bundle[bundle.length()-1] == '/')
bundle.truncate(1);
- bundle += BundleExtension;
+ bundle += bundleExtension();
*bundlePath = SysAllocStringLen(bundle.characters(), bundle.length());
if (!*bundlePath)
- return E_FAIL;
+ return E_FAIL;
return S_OK;
}
@@ -389,275 +183,9 @@ HRESULT STDMETHODCALLTYPE WebDownload::request(
return S_OK;
}
-HRESULT STDMETHODCALLTYPE WebDownload::setDeletesFileUponFailure(
- /* [in] */ BOOL deletesFileUponFailure)
-{
- if (!m_download)
- return E_FAIL;
- CFURLDownloadSetDeletesUponFailure(m_download.get(), !!deletesFileUponFailure);
- return S_OK;
-}
-
-HRESULT STDMETHODCALLTYPE WebDownload::setDestination(
- /* [in] */ BSTR path,
- /* [in] */ BOOL allowOverwrite)
-{
- if (!m_download)
- return E_FAIL;
-
- m_destination = String(path, SysStringLen(path));
- m_bundlePath = m_destination + BundleExtension;
-
- CFURLRef pathURL = MarshallingHelpers::PathStringToFileCFURLRef(m_bundlePath);
- CFURLDownloadSetDestination(m_download.get(), pathURL, !!allowOverwrite);
- CFRelease(pathURL);
-
- LOG(Download, "WebDownload - Set destination to %s", m_bundlePath.ascii().data());
-
- return S_OK;
-}
-
-// IWebURLAuthenticationChallengeSender -------------------------------------------------------------------
-
-HRESULT STDMETHODCALLTYPE WebDownload::cancelAuthenticationChallenge(
- /* [in] */ IWebURLAuthenticationChallenge*)
-{
- if (m_download) {
- CFURLDownloadCancel(m_download.get());
- m_download = 0;
- }
-
- // FIXME: Do we need a URL or description for this error code?
- ResourceError error(String(WebURLErrorDomain), WebURLErrorUserCancelledAuthentication, "", "");
- COMPtr<WebError> webError(AdoptCOM, WebError::createInstance(error));
- m_delegate->didFailWithError(this, webError.get());
-
- return S_OK;
-}
-
-HRESULT STDMETHODCALLTYPE WebDownload::continueWithoutCredentialForAuthenticationChallenge(
- /* [in] */ IWebURLAuthenticationChallenge* challenge)
-{
- COMPtr<WebURLAuthenticationChallenge> webChallenge(Query, challenge);
- if (!webChallenge)
- return E_NOINTERFACE;
-
- if (m_download)
- CFURLDownloadUseCredential(m_download.get(), 0, webChallenge->authenticationChallenge().cfURLAuthChallengeRef());
- return S_OK;
-}
-
-HRESULT STDMETHODCALLTYPE WebDownload::useCredential(
- /* [in] */ IWebURLCredential* credential,
- /* [in] */ IWebURLAuthenticationChallenge* challenge)
-{
- COMPtr<WebURLAuthenticationChallenge> webChallenge(Query, challenge);
- if (!webChallenge)
- return E_NOINTERFACE;
-
- COMPtr<WebURLCredential> webCredential(Query, credential);
- if (!webCredential)
- return E_NOINTERFACE;
-
- RetainPtr<CFURLCredentialRef> cfCredential(AdoptCF, createCF(webCredential->credential()));
-
- if (m_download)
- CFURLDownloadUseCredential(m_download.get(), cfCredential.get(), webChallenge->authenticationChallenge().cfURLAuthChallengeRef());
- return S_OK;
-}
-
-// CFURLDownload Callbacks -------------------------------------------------------------------
-void WebDownload::didStart()
-{
-#ifndef NDEBUG
- m_startTime = m_dataTime = currentTime();
- m_received = 0;
- LOG(Download, "DOWNLOAD - Started %p at %.3f seconds", this, m_startTime);
-#endif
- if (FAILED(m_delegate->didBegin(this)))
- LOG_ERROR("DownloadDelegate->didBegin failed");
-}
-
-CFURLRequestRef WebDownload::willSendRequest(CFURLRequestRef request, CFURLResponseRef response)
-{
- COMPtr<WebMutableURLRequest> webRequest(AdoptCOM, WebMutableURLRequest::createInstance(ResourceRequest(request)));
- COMPtr<WebURLResponse> webResponse(AdoptCOM, WebURLResponse::createInstance(ResourceResponse(response)));
- COMPtr<IWebMutableURLRequest> finalRequest;
-
- if (FAILED(m_delegate->willSendRequest(this, webRequest.get(), webResponse.get(), &finalRequest)))
- LOG_ERROR("DownloadDelegate->willSendRequest failed");
-
- if (!finalRequest)
- return 0;
-
- COMPtr<WebMutableURLRequest> finalWebRequest(AdoptCOM, WebMutableURLRequest::createInstance(finalRequest.get()));
- m_request = finalWebRequest.get();
- CFURLRequestRef result = finalWebRequest->resourceRequest().cfURLRequest();
- CFRetain(result);
- return result;
-}
-
-void WebDownload::didReceiveAuthenticationChallenge(CFURLAuthChallengeRef challenge)
-{
- COMPtr<IWebURLAuthenticationChallenge> webChallenge(AdoptCOM,
- WebURLAuthenticationChallenge::createInstance(AuthenticationChallenge(challenge, 0), this));
-
- if (SUCCEEDED(m_delegate->didReceiveAuthenticationChallenge(this, webChallenge.get())))
- return;
-
- cancelAuthenticationChallenge(webChallenge.get());
-}
-
-void WebDownload::didReceiveResponse(CFURLResponseRef response)
-{
- COMPtr<WebURLResponse> webResponse(AdoptCOM, WebURLResponse::createInstance(ResourceResponse(response)));
- if (FAILED(m_delegate->didReceiveResponse(this, webResponse.get())))
- LOG_ERROR("DownloadDelegate->didReceiveResponse failed");
-}
-
-void WebDownload::willResumeWithResponse(CFURLResponseRef response, UInt64 fromByte)
-{
- COMPtr<WebURLResponse> webResponse(AdoptCOM, WebURLResponse::createInstance(ResourceResponse(response)));
- if (FAILED(m_delegate->willResumeWithResponse(this, webResponse.get(), fromByte)))
- LOG_ERROR("DownloadDelegate->willResumeWithResponse failed");
-}
-
-void WebDownload::didReceiveData(CFIndex length)
-{
-#ifndef NDEBUG
- m_received += length;
- double current = currentTime();
- if (current - m_dataTime > 2.0)
- LOG(Download, "DOWNLOAD - %p hanged for %.3f seconds - Received %i bytes for a total of %i", this, current - m_dataTime, length, m_received);
- m_dataTime = current;
-#endif
- if (FAILED(m_delegate->didReceiveDataOfLength(this, length)))
- LOG_ERROR("DownloadDelegate->didReceiveData failed");
-}
-
-bool WebDownload::shouldDecodeDataOfMIMEType(CFStringRef mimeType)
-{
- BOOL result;
- if (FAILED(m_delegate->shouldDecodeSourceDataOfMIMEType(this, BString(mimeType), &result))) {
- LOG_ERROR("DownloadDelegate->shouldDecodeSourceDataOfMIMEType failed");
- return false;
- }
- return !!result;
-}
-
-void WebDownload::decideDestinationWithSuggestedObjectName(CFStringRef name)
-{
- if (FAILED(m_delegate->decideDestinationWithSuggestedFilename(this, BString(name))))
- LOG_ERROR("DownloadDelegate->decideDestinationWithSuggestedObjectName failed");
-}
-
-void WebDownload::didCreateDestination(CFURLRef destination)
-{
- // The concept of the ".download bundle" is internal to the WebDownload, so therefore
- // we try to mask the delegate from its existence as much as possible by telling it the final
- // destination was created, when in reality the bundle was created
-
- String createdDestination = MarshallingHelpers::FileCFURLRefToPathString(destination);
-
- // At this point in receiving CFURLDownload callbacks, we should definitely have the bundle path stored locally
- // and it should match with the file that CFURLDownload created
- ASSERT(createdDestination == m_bundlePath);
- // And we should also always have the final-destination stored
- ASSERT(!m_destination.isEmpty());
-
- BString path(m_destination);
- if (FAILED(m_delegate->didCreateDestination(this, path)))
- LOG_ERROR("DownloadDelegate->didCreateDestination failed");
-}
-
-void WebDownload::didFinish()
-{
-#ifndef NDEBUG
- LOG(Download, "DOWNLOAD - Finished %p after %i bytes and %.3f seconds", this, m_received, currentTime() - m_startTime);
-#endif
-
- ASSERT(!m_bundlePath.isEmpty() && !m_destination.isEmpty());
- LOG(Download, "WebDownload - Moving file from bundle %s to destination %s", m_bundlePath.ascii().data(), m_destination.ascii().data());
-
- // We try to rename the bundle to the final file name. If that fails, we give the delegate one more chance to chose
- // the final file name, then we just leave it
- if (!MoveFileEx(m_bundlePath.charactersWithNullTermination(), m_destination.charactersWithNullTermination(), 0)) {
- LOG_ERROR("Failed to move bundle %s to %s on completion\nError - %i", m_bundlePath.ascii().data(), m_destination.ascii().data(), GetLastError());
-
- bool reportBundlePathAsFinalPath = true;
-
- BString destinationBSTR(m_destination.characters(), m_destination.length());
- if (FAILED(m_delegate->decideDestinationWithSuggestedFilename(this, destinationBSTR)))
- LOG_ERROR("delegate->decideDestinationWithSuggestedFilename() failed");
-
- // The call to m_delegate->decideDestinationWithSuggestedFilename() should have changed our destination, so we'll try the move
- // one last time.
- if (!m_destination.isEmpty())
- if (MoveFileEx(m_bundlePath.charactersWithNullTermination(), m_destination.charactersWithNullTermination(), 0))
- reportBundlePathAsFinalPath = false;
-
- // We either need to tell the delegate our final filename is the bundle filename, or is the file name they just told us to use
- if (reportBundlePathAsFinalPath) {
- BString bundleBSTR(m_bundlePath);
- m_delegate->didCreateDestination(this, bundleBSTR);
- } else {
- BString finalDestinationBSTR = BString(m_destination);
- m_delegate->didCreateDestination(this, finalDestinationBSTR);
- }
- }
-
- // It's extremely likely the call to delegate->didFinish() will deref this, so lets not let that cause our destruction just yet
- COMPtr<WebDownload> protect = this;
- if (FAILED(m_delegate->didFinish(this)))
- LOG_ERROR("DownloadDelegate->didFinish failed");
-
- m_download = 0;
-}
-
-void WebDownload::didFail(CFErrorRef error)
-{
- COMPtr<WebError> webError(AdoptCOM, WebError::createInstance(ResourceError(error)));
- if (FAILED(m_delegate->didFailWithError(this, webError.get())))
- LOG_ERROR("DownloadDelegate->didFailWithError failed");
-}
-
-// CFURLDownload Callbacks ----------------------------------------------------------------
-void didStartCallback(CFURLDownloadRef, const void *clientInfo)
-{ ((WebDownload*)clientInfo)->didStart(); }
-
-CFURLRequestRef willSendRequestCallback(CFURLDownloadRef, CFURLRequestRef request, CFURLResponseRef redirectionResponse, const void *clientInfo)
-{ return ((WebDownload*)clientInfo)->willSendRequest(request, redirectionResponse); }
-
-void didReceiveAuthenticationChallengeCallback(CFURLDownloadRef, CFURLAuthChallengeRef challenge, const void *clientInfo)
-{ ((WebDownload*)clientInfo)->didReceiveAuthenticationChallenge(challenge); }
-
-void didReceiveResponseCallback(CFURLDownloadRef, CFURLResponseRef response, const void *clientInfo)
-{ ((WebDownload*)clientInfo)->didReceiveResponse(response); }
-
-void willResumeWithResponseCallback(CFURLDownloadRef, CFURLResponseRef response, UInt64 startingByte, const void *clientInfo)
-{ ((WebDownload*)clientInfo)->willResumeWithResponse(response, startingByte); }
-
-void didReceiveDataCallback(CFURLDownloadRef, CFIndex length, const void *clientInfo)
-{ ((WebDownload*)clientInfo)->didReceiveData(length); }
-
-Boolean shouldDecodeDataOfMIMETypeCallback(CFURLDownloadRef, CFStringRef encodingType, const void *clientInfo)
-{ return ((WebDownload*)clientInfo)->shouldDecodeDataOfMIMEType(encodingType); }
-
-void decideDestinationWithSuggestedObjectNameCallback(CFURLDownloadRef, CFStringRef objectName, const void *clientInfo)
-{ ((WebDownload*)clientInfo)->decideDestinationWithSuggestedObjectName(objectName); }
-
-void didCreateDestinationCallback(CFURLDownloadRef, CFURLRef path, const void *clientInfo)
-{ ((WebDownload*)clientInfo)->didCreateDestination(path); }
-
-void didFinishCallback(CFURLDownloadRef, const void *clientInfo)
-{ ((WebDownload*)clientInfo)->didFinish(); }
-
-void didFailCallback(CFURLDownloadRef, CFErrorRef error, const void *clientInfo)
-{ ((WebDownload*)clientInfo)->didFail(error); }
-
// Download Bundle file utilities ----------------------------------------------------------------
-static CFDataRef extractResumeDataFromBundle(const String& bundlePath)
+CFDataRef WebDownload::extractResumeDataFromBundle(const String& bundlePath)
{
if (bundlePath.isEmpty()) {
LOG_ERROR("Cannot create resume data from empty download bundle path");
@@ -694,8 +222,8 @@ static CFDataRef extractResumeDataFromBundle(const String& bundlePath)
goto exit;
}
- if (footerMagicNumber != BundleMagicNumber) {
- LOG_ERROR("Footer's magic number does not match 0x%X - errno(%i)", BundleMagicNumber, errno);
+ if (footerMagicNumber != bundleMagicNumber()) {
+ LOG_ERROR("Footer's magic number does not match 0x%X - errno(%i)", bundleMagicNumber(), errno);
goto exit;
}
@@ -748,7 +276,7 @@ exit:
return result;
}
-static HRESULT appendResumeDataToBundle(CFDataRef resumeData, const String& bundlePath)
+HRESULT WebDownload::appendResumeDataToBundle(CFDataRef resumeData, const String& bundlePath)
{
if (!resumeData) {
LOG_ERROR("Invalid resume data to write to bundle path");
@@ -788,7 +316,8 @@ static HRESULT appendResumeDataToBundle(CFDataRef resumeData, const String& bund
goto exit;
}
- if (fwrite(&BundleMagicNumber, 4, 1, bundle) != 1) {
+ const UInt32& magic = bundleMagicNumber();
+ if (fwrite(&magic, 4, 1, bundle) != 1) {
LOG_ERROR("Failed to write footer magic number to the bundle - errno(%i)", errno);
goto exit;
}
diff --git a/WebKit/win/WebDownload.h b/WebKit/win/WebDownload.h
index 6e8e3ee..0d80b80 100644
--- a/WebKit/win/WebDownload.h
+++ b/WebKit/win/WebDownload.h
@@ -104,6 +104,7 @@ public:
/* [in] */ IWebURLCredential* credential,
/* [in] */ IWebURLAuthenticationChallenge* challenge);
+#if USE(CFNETWORK)
// CFURLDownload Callbacks
void didStart();
CFURLRequestRef willSendRequest(CFURLRequestRef, CFURLResponseRef);
@@ -116,13 +117,21 @@ public:
void didCreateDestination(CFURLRef);
void didFinish();
void didFail(CFErrorRef);
+#endif
protected:
+ static CFDataRef extractResumeDataFromBundle(const WebCore::String&);
+ static HRESULT appendResumeDataToBundle(CFDataRef, const WebCore::String&);
+ static const WebCore::String& bundleExtension();
+ static UInt32 bundleMagicNumber();
+
ULONG m_refCount;
WebCore::String m_destination;
WebCore::String m_bundlePath;
+#if USE(CFNETWORK)
RetainPtr<CFURLDownloadRef> m_download;
+#endif
COMPtr<IWebMutableURLRequest> m_request;
COMPtr<IWebDownloadDelegate> m_delegate;
diff --git a/WebKit/win/WebDownloadCFNet.cpp b/WebKit/win/WebDownloadCFNet.cpp
new file mode 100644
index 0000000..12fd15b
--- /dev/null
+++ b/WebKit/win/WebDownloadCFNet.cpp
@@ -0,0 +1,537 @@
+/*
+ * Copyright (C) 2007 Apple Inc. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY APPLE COMPUTER, INC. ``AS IS'' AND ANY
+ * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE COMPUTER, INC. OR
+ * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+ * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+ * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+ * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+ * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#include "config.h"
+#include "WebKitDLL.h"
+#include "WebDownload.h"
+
+#include "CString.h"
+#include "DefaultDownloadDelegate.h"
+#include "MarshallingHelpers.h"
+#include "WebError.h"
+#include "WebKit.h"
+#include "WebKitLogging.h"
+#include "WebMutableURLRequest.h"
+#include "WebURLAuthenticationChallenge.h"
+#include "WebURLCredential.h"
+#include "WebURLResponse.h"
+
+#include <wtf/platform.h>
+
+#include <io.h>
+#include <sys/stat.h>
+#include <sys/types.h>
+
+#pragma warning(push, 0)
+#include <WebCore/AuthenticationCF.h>
+#include <WebCore/BString.h>
+#include <WebCore/NotImplemented.h>
+#include <WebCore/ResourceError.h>
+#include <WebCore/ResourceHandle.h>
+#include <WebCore/ResourceRequest.h>
+#include <WebCore/ResourceResponse.h>
+#include <wtf/CurrentTime.h>
+#pragma warning(pop)
+
+using namespace WebCore;
+
+// CFURLDownload Callbacks ----------------------------------------------------------------
+static void didStartCallback(CFURLDownloadRef download, const void *clientInfo);
+static CFURLRequestRef willSendRequestCallback(CFURLDownloadRef download, CFURLRequestRef request, CFURLResponseRef redirectionResponse, const void *clientInfo);
+static void didReceiveAuthenticationChallengeCallback(CFURLDownloadRef download, CFURLAuthChallengeRef challenge, const void *clientInfo);
+static void didReceiveResponseCallback(CFURLDownloadRef download, CFURLResponseRef response, const void *clientInfo);
+static void willResumeWithResponseCallback(CFURLDownloadRef download, CFURLResponseRef response, UInt64 startingByte, const void *clientInfo);
+static void didReceiveDataCallback(CFURLDownloadRef download, CFIndex length, const void *clientInfo);
+static Boolean shouldDecodeDataOfMIMETypeCallback(CFURLDownloadRef download, CFStringRef encodingType, const void *clientInfo);
+static void decideDestinationWithSuggestedObjectNameCallback(CFURLDownloadRef download, CFStringRef objectName, const void *clientInfo);
+static void didCreateDestinationCallback(CFURLDownloadRef download, CFURLRef path, const void *clientInfo);
+static void didFinishCallback(CFURLDownloadRef download, const void *clientInfo);
+static void didFailCallback(CFURLDownloadRef download, CFErrorRef error, const void *clientInfo);
+
+void WebDownload::init(ResourceHandle* handle, const ResourceRequest& request, const ResourceResponse& response, IWebDownloadDelegate* delegate)
+{
+ m_delegate = delegate ? delegate : DefaultDownloadDelegate::sharedInstance();
+ CFURLConnectionRef connection = handle->connection();
+ if (!connection) {
+ LOG_ERROR("WebDownload::WebDownload(ResourceHandle*,...) called with an inactive ResourceHandle");
+ return;
+ }
+
+ CFURLDownloadClient client = {0, this, 0, 0, 0, didStartCallback, willSendRequestCallback, didReceiveAuthenticationChallengeCallback,
+ didReceiveResponseCallback, willResumeWithResponseCallback, didReceiveDataCallback, shouldDecodeDataOfMIMETypeCallback,
+ decideDestinationWithSuggestedObjectNameCallback, didCreateDestinationCallback, didFinishCallback, didFailCallback};
+
+ m_request.adoptRef(WebMutableURLRequest::createInstance(request));
+ m_download.adoptCF(CFURLDownloadCreateAndStartWithLoadingConnection(0, connection, request.cfURLRequest(), response.cfURLResponse(), &client));
+
+ // It is possible for CFURLDownloadCreateAndStartWithLoadingConnection() to fail if the passed in CFURLConnection is not in a "downloadable state"
+ // However, we should never hit that case
+ if (!m_download) {
+ ASSERT_NOT_REACHED();
+ LOG_ERROR("WebDownload - Failed to create WebDownload from existing connection (%s)", request.url().string().utf8().data());
+ } else
+ LOG(Download, "WebDownload - Created WebDownload %p from existing connection (%s)", this, request.url().string().utf8().data());
+
+ // The CFURLDownload either starts successfully and retains the CFURLConnection,
+ // or it fails to creating and we have a now-useless connection with a dangling ref.
+ // Either way, we need to release the connection to balance out ref counts
+ handle->releaseConnectionForDownload();
+ CFRelease(connection);
+}
+
+void WebDownload::init(const KURL& url, IWebDownloadDelegate* delegate)
+{
+ m_delegate = delegate ? delegate : DefaultDownloadDelegate::sharedInstance();
+ LOG_ERROR("Delegate is %p", m_delegate.get());
+
+ ResourceRequest request(url);
+ CFURLRequestRef cfRequest = request.cfURLRequest();
+
+ CFURLDownloadClient client = {0, this, 0, 0, 0, didStartCallback, willSendRequestCallback, didReceiveAuthenticationChallengeCallback,
+ didReceiveResponseCallback, willResumeWithResponseCallback, didReceiveDataCallback, shouldDecodeDataOfMIMETypeCallback,
+ decideDestinationWithSuggestedObjectNameCallback, didCreateDestinationCallback, didFinishCallback, didFailCallback};
+ m_request.adoptRef(WebMutableURLRequest::createInstance(request));
+ m_download.adoptCF(CFURLDownloadCreate(0, cfRequest, &client));
+
+ CFURLDownloadScheduleWithCurrentMessageQueue(m_download.get());
+ CFURLDownloadScheduleDownloadWithRunLoop(m_download.get(), ResourceHandle::loaderRunLoop(), kCFRunLoopDefaultMode);
+
+ LOG(Download, "WebDownload - Initialized download of url %s in WebDownload %p", url.string().utf8().data(), this);
+}
+
+// IWebDownload -------------------------------------------------------------------
+
+HRESULT STDMETHODCALLTYPE WebDownload::initWithRequest(
+ /* [in] */ IWebURLRequest* request,
+ /* [in] */ IWebDownloadDelegate* delegate)
+{
+ COMPtr<WebMutableURLRequest> webRequest;
+ if (!request || FAILED(request->QueryInterface(&webRequest))) {
+ LOG(Download, "WebDownload - initWithRequest failed - not a WebMutableURLRequest");
+ return E_FAIL;
+ }
+
+ if (!delegate)
+ return E_FAIL;
+ m_delegate = delegate;
+ LOG(Download, "Delegate is %p", m_delegate.get());
+
+ RetainPtr<CFURLRequestRef> cfRequest = webRequest->resourceRequest().cfURLRequest();
+
+ CFURLDownloadClient client = {0, this, 0, 0, 0, didStartCallback, willSendRequestCallback, didReceiveAuthenticationChallengeCallback,
+ didReceiveResponseCallback, willResumeWithResponseCallback, didReceiveDataCallback, shouldDecodeDataOfMIMETypeCallback,
+ decideDestinationWithSuggestedObjectNameCallback, didCreateDestinationCallback, didFinishCallback, didFailCallback};
+ m_request.adoptRef(WebMutableURLRequest::createInstance(webRequest.get()));
+ m_download.adoptCF(CFURLDownloadCreate(0, cfRequest.get(), &client));
+
+ // If for some reason the download failed to create,
+ // we have particular cleanup to do
+ if (!m_download) {
+ m_request = 0;
+ return E_FAIL;
+ }
+
+ CFURLDownloadScheduleWithCurrentMessageQueue(m_download.get());
+ CFURLDownloadScheduleDownloadWithRunLoop(m_download.get(), ResourceHandle::loaderRunLoop(), kCFRunLoopDefaultMode);
+
+ LOG(Download, "WebDownload - initWithRequest complete, started download of url %s", webRequest->resourceRequest().url().string().utf8().data());
+ return S_OK;
+}
+
+HRESULT STDMETHODCALLTYPE WebDownload::initToResumeWithBundle(
+ /* [in] */ BSTR bundlePath,
+ /* [in] */ IWebDownloadDelegate* delegate)
+{
+ LOG(Download, "Attempting resume of download bundle %s", String(bundlePath, SysStringLen(bundlePath)).ascii().data());
+
+ RetainPtr<CFDataRef> resumeData(AdoptCF, extractResumeDataFromBundle(String(bundlePath, SysStringLen(bundlePath))));
+
+ if (!resumeData)
+ return E_FAIL;
+
+ if (!delegate)
+ return E_FAIL;
+ m_delegate = delegate;
+ LOG(Download, "Delegate is %p", m_delegate.get());
+
+ CFURLDownloadClient client = {0, this, 0, 0, 0, didStartCallback, willSendRequestCallback, didReceiveAuthenticationChallengeCallback,
+ didReceiveResponseCallback, willResumeWithResponseCallback, didReceiveDataCallback, shouldDecodeDataOfMIMETypeCallback,
+ decideDestinationWithSuggestedObjectNameCallback, didCreateDestinationCallback, didFinishCallback, didFailCallback};
+
+ RetainPtr<CFURLRef> pathURL(AdoptCF, MarshallingHelpers::PathStringToFileCFURLRef(String(bundlePath, SysStringLen(bundlePath))));
+ ASSERT(pathURL);
+
+ m_download.adoptCF(CFURLDownloadCreateWithResumeData(0, resumeData.get(), pathURL.get(), &client));
+
+ if (!m_download) {
+ LOG(Download, "Failed to create CFURLDownloadRef for resume");
+ return E_FAIL;
+ }
+
+ m_bundlePath = String(bundlePath, SysStringLen(bundlePath));
+ // Attempt to remove the ".download" extension from the bundle for the final file destination
+ // Failing that, we clear m_destination and will ask the delegate later once the download starts
+ if (m_bundlePath.endsWith(bundleExtension(), false)) {
+ m_destination = m_bundlePath.copy();
+ m_destination.truncate(m_destination.length() - bundleExtension().length());
+ } else
+ m_destination = String();
+
+ CFURLDownloadScheduleWithCurrentMessageQueue(m_download.get());
+ CFURLDownloadScheduleDownloadWithRunLoop(m_download.get(), ResourceHandle::loaderRunLoop(), kCFRunLoopDefaultMode);
+
+ LOG(Download, "WebDownload - initWithRequest complete, resumed download of bundle %s", String(bundlePath, SysStringLen(bundlePath)).ascii().data());
+ return S_OK;
+}
+
+HRESULT STDMETHODCALLTYPE WebDownload::start()
+{
+ LOG(Download, "WebDownload - Starting download (%p)", this);
+ if (!m_download)
+ return E_FAIL;
+
+ CFURLDownloadStart(m_download.get());
+ // FIXME: 4950477 - CFURLDownload neglects to make the didStart() client call upon starting the download.
+ // This is a somewhat critical call, so we'll fake it for now!
+ didStart();
+
+ return S_OK;
+}
+
+HRESULT STDMETHODCALLTYPE WebDownload::cancel()
+{
+ LOG(Download, "WebDownload - Cancelling download (%p)", this);
+ if (!m_download)
+ return E_FAIL;
+
+ CFURLDownloadCancel(m_download.get());
+ m_download = 0;
+ return S_OK;
+}
+
+HRESULT STDMETHODCALLTYPE WebDownload::cancelForResume()
+{
+ LOG(Download, "WebDownload - Cancelling download (%p), writing resume information to file if possible", this);
+ ASSERT(m_download);
+ if (!m_download)
+ return E_FAIL;
+
+ HRESULT hr = S_OK;
+ RetainPtr<CFDataRef> resumeData;
+ if (m_destination.isEmpty()) {
+ CFURLDownloadCancel(m_download.get());
+ goto exit;
+ }
+
+ CFURLDownloadSetDeletesUponFailure(m_download.get(), false);
+ CFURLDownloadCancel(m_download.get());
+
+ resumeData = CFURLDownloadCopyResumeData(m_download.get());
+ if (!resumeData) {
+ LOG(Download, "WebDownload - Unable to create resume data for download (%p)", this);
+ goto exit;
+ }
+
+ appendResumeDataToBundle(resumeData.get(), m_bundlePath);
+
+exit:
+ m_download = 0;
+ return hr;
+}
+
+HRESULT STDMETHODCALLTYPE WebDownload::deletesFileUponFailure(
+ /* [out, retval] */ BOOL* result)
+{
+ if (!m_download)
+ return E_FAIL;
+ *result = CFURLDownloadDeletesUponFailure(m_download.get());
+ return S_OK;
+}
+
+HRESULT STDMETHODCALLTYPE WebDownload::setDeletesFileUponFailure(
+ /* [in] */ BOOL deletesFileUponFailure)
+{
+ if (!m_download)
+ return E_FAIL;
+ CFURLDownloadSetDeletesUponFailure(m_download.get(), !!deletesFileUponFailure);
+ return S_OK;
+}
+
+HRESULT STDMETHODCALLTYPE WebDownload::setDestination(
+ /* [in] */ BSTR path,
+ /* [in] */ BOOL allowOverwrite)
+{
+ if (!m_download)
+ return E_FAIL;
+
+ m_destination = String(path, SysStringLen(path));
+ m_bundlePath = m_destination + bundleExtension();
+
+ CFURLRef pathURL = MarshallingHelpers::PathStringToFileCFURLRef(m_bundlePath);
+ CFURLDownloadSetDestination(m_download.get(), pathURL, !!allowOverwrite);
+ CFRelease(pathURL);
+
+ LOG(Download, "WebDownload - Set destination to %s", m_bundlePath.ascii().data());
+
+ return S_OK;
+}
+
+// IWebURLAuthenticationChallengeSender -------------------------------------------------------------------
+
+HRESULT STDMETHODCALLTYPE WebDownload::cancelAuthenticationChallenge(
+ /* [in] */ IWebURLAuthenticationChallenge*)
+{
+ if (m_download) {
+ CFURLDownloadCancel(m_download.get());
+ m_download = 0;
+ }
+
+ // FIXME: Do we need a URL or description for this error code?
+ ResourceError error(String(WebURLErrorDomain), WebURLErrorUserCancelledAuthentication, "", "");
+ COMPtr<WebError> webError(AdoptCOM, WebError::createInstance(error));
+ m_delegate->didFailWithError(this, webError.get());
+
+ return S_OK;
+}
+
+HRESULT STDMETHODCALLTYPE WebDownload::continueWithoutCredentialForAuthenticationChallenge(
+ /* [in] */ IWebURLAuthenticationChallenge* challenge)
+{
+ COMPtr<WebURLAuthenticationChallenge> webChallenge(Query, challenge);
+ if (!webChallenge)
+ return E_NOINTERFACE;
+
+ if (m_download)
+ CFURLDownloadUseCredential(m_download.get(), 0, webChallenge->authenticationChallenge().cfURLAuthChallengeRef());
+ return S_OK;
+}
+
+HRESULT STDMETHODCALLTYPE WebDownload::useCredential(
+ /* [in] */ IWebURLCredential* credential,
+ /* [in] */ IWebURLAuthenticationChallenge* challenge)
+{
+ COMPtr<WebURLAuthenticationChallenge> webChallenge(Query, challenge);
+ if (!webChallenge)
+ return E_NOINTERFACE;
+
+ COMPtr<WebURLCredential> webCredential(Query, credential);
+ if (!webCredential)
+ return E_NOINTERFACE;
+
+ RetainPtr<CFURLCredentialRef> cfCredential(AdoptCF, createCF(webCredential->credential()));
+
+ if (m_download)
+ CFURLDownloadUseCredential(m_download.get(), cfCredential.get(), webChallenge->authenticationChallenge().cfURLAuthChallengeRef());
+ return S_OK;
+}
+
+// CFURLDownload Callbacks -------------------------------------------------------------------
+void WebDownload::didStart()
+{
+#ifndef NDEBUG
+ m_startTime = m_dataTime = currentTime();
+ m_received = 0;
+ LOG(Download, "DOWNLOAD - Started %p at %.3f seconds", this, m_startTime);
+#endif
+ if (FAILED(m_delegate->didBegin(this)))
+ LOG_ERROR("DownloadDelegate->didBegin failed");
+}
+
+CFURLRequestRef WebDownload::willSendRequest(CFURLRequestRef request, CFURLResponseRef response)
+{
+ COMPtr<WebMutableURLRequest> webRequest(AdoptCOM, WebMutableURLRequest::createInstance(ResourceRequest(request)));
+ COMPtr<WebURLResponse> webResponse(AdoptCOM, WebURLResponse::createInstance(ResourceResponse(response)));
+ COMPtr<IWebMutableURLRequest> finalRequest;
+
+ if (FAILED(m_delegate->willSendRequest(this, webRequest.get(), webResponse.get(), &finalRequest)))
+ LOG_ERROR("DownloadDelegate->willSendRequest failed");
+
+ if (!finalRequest)
+ return 0;
+
+ COMPtr<WebMutableURLRequest> finalWebRequest(AdoptCOM, WebMutableURLRequest::createInstance(finalRequest.get()));
+ m_request = finalWebRequest.get();
+ CFURLRequestRef result = finalWebRequest->resourceRequest().cfURLRequest();
+ CFRetain(result);
+ return result;
+}
+
+void WebDownload::didReceiveAuthenticationChallenge(CFURLAuthChallengeRef challenge)
+{
+ COMPtr<IWebURLAuthenticationChallenge> webChallenge(AdoptCOM,
+ WebURLAuthenticationChallenge::createInstance(AuthenticationChallenge(challenge, 0), this));
+
+ if (SUCCEEDED(m_delegate->didReceiveAuthenticationChallenge(this, webChallenge.get())))
+ return;
+
+ cancelAuthenticationChallenge(webChallenge.get());
+}
+
+void WebDownload::didReceiveResponse(CFURLResponseRef response)
+{
+ COMPtr<WebURLResponse> webResponse(AdoptCOM, WebURLResponse::createInstance(ResourceResponse(response)));
+ if (FAILED(m_delegate->didReceiveResponse(this, webResponse.get())))
+ LOG_ERROR("DownloadDelegate->didReceiveResponse failed");
+}
+
+void WebDownload::willResumeWithResponse(CFURLResponseRef response, UInt64 fromByte)
+{
+ COMPtr<WebURLResponse> webResponse(AdoptCOM, WebURLResponse::createInstance(ResourceResponse(response)));
+ if (FAILED(m_delegate->willResumeWithResponse(this, webResponse.get(), fromByte)))
+ LOG_ERROR("DownloadDelegate->willResumeWithResponse failed");
+}
+
+void WebDownload::didReceiveData(CFIndex length)
+{
+#ifndef NDEBUG
+ m_received += length;
+ double current = currentTime();
+ if (current - m_dataTime > 2.0)
+ LOG(Download, "DOWNLOAD - %p hanged for %.3f seconds - Received %i bytes for a total of %i", this, current - m_dataTime, length, m_received);
+ m_dataTime = current;
+#endif
+ if (FAILED(m_delegate->didReceiveDataOfLength(this, length)))
+ LOG_ERROR("DownloadDelegate->didReceiveData failed");
+}
+
+bool WebDownload::shouldDecodeDataOfMIMEType(CFStringRef mimeType)
+{
+ BOOL result;
+ if (FAILED(m_delegate->shouldDecodeSourceDataOfMIMEType(this, BString(mimeType), &result))) {
+ LOG_ERROR("DownloadDelegate->shouldDecodeSourceDataOfMIMEType failed");
+ return false;
+ }
+ return !!result;
+}
+
+void WebDownload::decideDestinationWithSuggestedObjectName(CFStringRef name)
+{
+ if (FAILED(m_delegate->decideDestinationWithSuggestedFilename(this, BString(name))))
+ LOG_ERROR("DownloadDelegate->decideDestinationWithSuggestedObjectName failed");
+}
+
+void WebDownload::didCreateDestination(CFURLRef destination)
+{
+ // The concept of the ".download bundle" is internal to the WebDownload, so therefore
+ // we try to mask the delegate from its existence as much as possible by telling it the final
+ // destination was created, when in reality the bundle was created
+
+ String createdDestination = MarshallingHelpers::FileCFURLRefToPathString(destination);
+
+ // At this point in receiving CFURLDownload callbacks, we should definitely have the bundle path stored locally
+ // and it should match with the file that CFURLDownload created
+ ASSERT(createdDestination == m_bundlePath);
+ // And we should also always have the final-destination stored
+ ASSERT(!m_destination.isEmpty());
+
+ BString path(m_destination);
+ if (FAILED(m_delegate->didCreateDestination(this, path)))
+ LOG_ERROR("DownloadDelegate->didCreateDestination failed");
+}
+
+void WebDownload::didFinish()
+{
+#ifndef NDEBUG
+ LOG(Download, "DOWNLOAD - Finished %p after %i bytes and %.3f seconds", this, m_received, currentTime() - m_startTime);
+#endif
+
+ ASSERT(!m_bundlePath.isEmpty() && !m_destination.isEmpty());
+ LOG(Download, "WebDownload - Moving file from bundle %s to destination %s", m_bundlePath.ascii().data(), m_destination.ascii().data());
+
+ // We try to rename the bundle to the final file name. If that fails, we give the delegate one more chance to chose
+ // the final file name, then we just leave it
+ if (!MoveFileEx(m_bundlePath.charactersWithNullTermination(), m_destination.charactersWithNullTermination(), 0)) {
+ LOG_ERROR("Failed to move bundle %s to %s on completion\nError - %i", m_bundlePath.ascii().data(), m_destination.ascii().data(), GetLastError());
+
+ bool reportBundlePathAsFinalPath = true;
+
+ BString destinationBSTR(m_destination.characters(), m_destination.length());
+ if (FAILED(m_delegate->decideDestinationWithSuggestedFilename(this, destinationBSTR)))
+ LOG_ERROR("delegate->decideDestinationWithSuggestedFilename() failed");
+
+ // The call to m_delegate->decideDestinationWithSuggestedFilename() should have changed our destination, so we'll try the move
+ // one last time.
+ if (!m_destination.isEmpty())
+ if (MoveFileEx(m_bundlePath.charactersWithNullTermination(), m_destination.charactersWithNullTermination(), 0))
+ reportBundlePathAsFinalPath = false;
+
+ // We either need to tell the delegate our final filename is the bundle filename, or is the file name they just told us to use
+ if (reportBundlePathAsFinalPath) {
+ BString bundleBSTR(m_bundlePath);
+ m_delegate->didCreateDestination(this, bundleBSTR);
+ } else {
+ BString finalDestinationBSTR = BString(m_destination);
+ m_delegate->didCreateDestination(this, finalDestinationBSTR);
+ }
+ }
+
+ // It's extremely likely the call to delegate->didFinish() will deref this, so lets not let that cause our destruction just yet
+ COMPtr<WebDownload> protect = this;
+ if (FAILED(m_delegate->didFinish(this)))
+ LOG_ERROR("DownloadDelegate->didFinish failed");
+
+ m_download = 0;
+}
+
+void WebDownload::didFail(CFErrorRef error)
+{
+ COMPtr<WebError> webError(AdoptCOM, WebError::createInstance(ResourceError(error)));
+ if (FAILED(m_delegate->didFailWithError(this, webError.get())))
+ LOG_ERROR("DownloadDelegate->didFailWithError failed");
+}
+
+// CFURLDownload Callbacks ----------------------------------------------------------------
+void didStartCallback(CFURLDownloadRef, const void *clientInfo)
+{ ((WebDownload*)clientInfo)->didStart(); }
+
+CFURLRequestRef willSendRequestCallback(CFURLDownloadRef, CFURLRequestRef request, CFURLResponseRef redirectionResponse, const void *clientInfo)
+{ return ((WebDownload*)clientInfo)->willSendRequest(request, redirectionResponse); }
+
+void didReceiveAuthenticationChallengeCallback(CFURLDownloadRef, CFURLAuthChallengeRef challenge, const void *clientInfo)
+{ ((WebDownload*)clientInfo)->didReceiveAuthenticationChallenge(challenge); }
+
+void didReceiveResponseCallback(CFURLDownloadRef, CFURLResponseRef response, const void *clientInfo)
+{ ((WebDownload*)clientInfo)->didReceiveResponse(response); }
+
+void willResumeWithResponseCallback(CFURLDownloadRef, CFURLResponseRef response, UInt64 startingByte, const void *clientInfo)
+{ ((WebDownload*)clientInfo)->willResumeWithResponse(response, startingByte); }
+
+void didReceiveDataCallback(CFURLDownloadRef, CFIndex length, const void *clientInfo)
+{ ((WebDownload*)clientInfo)->didReceiveData(length); }
+
+Boolean shouldDecodeDataOfMIMETypeCallback(CFURLDownloadRef, CFStringRef encodingType, const void *clientInfo)
+{ return ((WebDownload*)clientInfo)->shouldDecodeDataOfMIMEType(encodingType); }
+
+void decideDestinationWithSuggestedObjectNameCallback(CFURLDownloadRef, CFStringRef objectName, const void *clientInfo)
+{ ((WebDownload*)clientInfo)->decideDestinationWithSuggestedObjectName(objectName); }
+
+void didCreateDestinationCallback(CFURLDownloadRef, CFURLRef path, const void *clientInfo)
+{ ((WebDownload*)clientInfo)->didCreateDestination(path); }
+
+void didFinishCallback(CFURLDownloadRef, const void *clientInfo)
+{ ((WebDownload*)clientInfo)->didFinish(); }
+
+void didFailCallback(CFURLDownloadRef, CFErrorRef error, const void *clientInfo)
+{ ((WebDownload*)clientInfo)->didFail(error); }
diff --git a/WebKit/win/WebDownloadCurl.cpp b/WebKit/win/WebDownloadCurl.cpp
new file mode 100644
index 0000000..608830b
--- /dev/null
+++ b/WebKit/win/WebDownloadCurl.cpp
@@ -0,0 +1,151 @@
+/*
+ * Copyright (C) 2008 Brent Fulgham <bfulgham@gmail.com>. All Rights Reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY APPLE COMPUTER, INC. ``AS IS'' AND ANY
+ * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE COMPUTER, INC. OR
+ * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+ * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+ * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+ * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+ * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#include "config.h"
+#include "WebKitDLL.h"
+#include "WebDownload.h"
+
+#include "CString.h"
+#include "DefaultDownloadDelegate.h"
+#include "MarshallingHelpers.h"
+#include "WebError.h"
+#include "WebKit.h"
+#include "WebKitLogging.h"
+#include "WebMutableURLRequest.h"
+#include "WebURLAuthenticationChallenge.h"
+#include "WebURLCredential.h"
+#include "WebURLResponse.h"
+
+#include <wtf/platform.h>
+
+#include <io.h>
+#include <sys/stat.h>
+#include <sys/types.h>
+
+#pragma warning(push, 0)
+#include <WebCore/BString.h>
+#include <WebCore/NotImplemented.h>
+#include <WebCore/ResourceError.h>
+#include <WebCore/ResourceHandle.h>
+#include <WebCore/ResourceRequest.h>
+#include <WebCore/ResourceResponse.h>
+#include <WebCore/SystemTime.h>
+#pragma warning(pop)
+
+using namespace WebCore;
+
+// WebDownload ----------------------------------------------------------------
+
+void WebDownload::init(ResourceHandle* handle, const ResourceRequest& request, const ResourceResponse& response, IWebDownloadDelegate* delegate)
+{
+ notImplemented();
+}
+
+void WebDownload::init(const KURL& url, IWebDownloadDelegate* delegate)
+{
+ notImplemented();
+}
+
+// IWebDownload -------------------------------------------------------------------
+
+HRESULT STDMETHODCALLTYPE WebDownload::initWithRequest(
+ /* [in] */ IWebURLRequest* request,
+ /* [in] */ IWebDownloadDelegate* delegate)
+{
+ notImplemented();
+ return E_FAIL;
+}
+
+HRESULT STDMETHODCALLTYPE WebDownload::initToResumeWithBundle(
+ /* [in] */ BSTR bundlePath,
+ /* [in] */ IWebDownloadDelegate* delegate)
+{
+ notImplemented();
+ return E_FAIL;
+}
+
+HRESULT STDMETHODCALLTYPE WebDownload::start()
+{
+ notImplemented();
+ return E_FAIL;
+}
+
+HRESULT STDMETHODCALLTYPE WebDownload::cancel()
+{
+ notImplemented();
+ return E_FAIL;
+}
+
+HRESULT STDMETHODCALLTYPE WebDownload::cancelForResume()
+{
+ notImplemented();
+ return E_FAIL;
+}
+
+HRESULT STDMETHODCALLTYPE WebDownload::deletesFileUponFailure(
+ /* [out, retval] */ BOOL* result)
+{
+ notImplemented();
+ return E_FAIL;
+}
+
+HRESULT STDMETHODCALLTYPE WebDownload::setDeletesFileUponFailure(
+ /* [in] */ BOOL deletesFileUponFailure)
+{
+ notImplemented();
+ return E_FAIL;
+}
+
+HRESULT STDMETHODCALLTYPE WebDownload::setDestination(
+ /* [in] */ BSTR path,
+ /* [in] */ BOOL allowOverwrite)
+{
+ notImplemented();
+ return E_FAIL;
+}
+
+// IWebURLAuthenticationChallengeSender -------------------------------------------------------------------
+
+HRESULT STDMETHODCALLTYPE WebDownload::cancelAuthenticationChallenge(
+ /* [in] */ IWebURLAuthenticationChallenge*)
+{
+ notImplemented();
+ return E_FAIL;
+}
+
+HRESULT STDMETHODCALLTYPE WebDownload::continueWithoutCredentialForAuthenticationChallenge(
+ /* [in] */ IWebURLAuthenticationChallenge* challenge)
+{
+ notImplemented();
+ return E_FAIL;
+}
+
+HRESULT STDMETHODCALLTYPE WebDownload::useCredential(
+ /* [in] */ IWebURLCredential* credential,
+ /* [in] */ IWebURLAuthenticationChallenge* challenge)
+{
+ notImplemented();
+ return E_FAIL;
+}
diff --git a/WebKit/win/WebDropSource.cpp b/WebKit/win/WebDropSource.cpp
index bc68c6c..47ffd5a 100644
--- a/WebKit/win/WebDropSource.cpp
+++ b/WebKit/win/WebDropSource.cpp
@@ -34,7 +34,7 @@
#include <WebCore/Frame.h>
#include <WebCore/Page.h>
#include <WebCore/PlatformMouseEvent.h>
-#include <WebCore/SystemTime.h>
+#include <wtf/CurrentTime.h>
#include <Windows.h>
diff --git a/WebKit/win/WebFrame.cpp b/WebKit/win/WebFrame.cpp
index 701d1ab..009111a 100644
--- a/WebKit/win/WebFrame.cpp
+++ b/WebKit/win/WebFrame.cpp
@@ -313,6 +313,7 @@ HRESULT STDMETHODCALLTYPE WebFrame::paintDocumentRectToContext(
HDC dc = (HDC)(ULONG64)deviceContext;
GraphicsContext gc(dc);
+ gc.setShouldIncludeChildWindows(true);
gc.save();
LONG width = rect.right - rect.left;
LONG height = rect.bottom - rect.top;
@@ -475,7 +476,7 @@ HRESULT STDMETHODCALLTYPE WebFrame::loadRequest(
if (!coreFrame)
return E_FAIL;
- coreFrame->loader()->load(requestImpl->resourceRequest());
+ coreFrame->loader()->load(requestImpl->resourceRequest(), false);
return S_OK;
}
@@ -486,15 +487,20 @@ void WebFrame::loadData(PassRefPtr<WebCore::SharedBuffer> data, BSTR mimeType, B
mimeTypeString = "text/html";
String encodingString(textEncodingName, SysStringLen(textEncodingName));
- KURL baseKURL(String(baseURL ? baseURL : L"", SysStringLen(baseURL)));
- KURL failingKURL(String(failingURL, SysStringLen(failingURL)));
+
+ // FIXME: We should really be using MarshallingHelpers::BSTRToKURL here,
+ // but that would turn a null BSTR into a null KURL, and we crash inside of
+ // WebCore if we use a null KURL in constructing the ResourceRequest.
+ KURL baseKURL = KURL(KURL(), String(baseURL ? baseURL : L"", SysStringLen(baseURL)));
+
+ KURL failingKURL = MarshallingHelpers::BSTRToKURL(failingURL);
ResourceRequest request(baseKURL);
SubstituteData substituteData(data, mimeTypeString, encodingString, failingKURL);
// This method is only called from IWebFrame methods, so don't ASSERT that the Frame pointer isn't null.
if (Frame* coreFrame = core(this))
- coreFrame->loader()->load(request, substituteData);
+ coreFrame->loader()->load(request, substituteData, false);
}
@@ -910,8 +916,7 @@ HRESULT STDMETHODCALLTYPE WebFrame::selectedString(
if (!coreFrame)
return E_FAIL;
- String text = coreFrame->selectedText();
- text.replace('\\', coreFrame->backslashAsCurrencySymbol());
+ String text = coreFrame->displayStringModifiedByEncoding(coreFrame->selectedText());
*result = BString(text).release();
return S_OK;
@@ -1322,10 +1327,6 @@ String WebFrame::userAgent(const KURL& url)
return d->webView->userAgentForKURL(url);
}
-void WebFrame::transitionToCommittedFromCachedPage(CachedPage*)
-{
-}
-
void WebFrame::saveViewStateToItem(HistoryItem*)
{
}
@@ -1343,10 +1344,10 @@ ResourceError WebFrame::blockedError(const ResourceRequest& request)
return ResourceError(String(WebKitErrorDomain), WebKitErrorCannotUseRestrictedPort, request.url().string(), String());
}
-ResourceError WebFrame::cannotShowURLError(const ResourceRequest&)
+ResourceError WebFrame::cannotShowURLError(const ResourceRequest& request)
{
- notImplemented();
- return ResourceError();
+ // FIXME: Need to implement the String descriptions for errors in the WebKitErrorDomain and have them localized
+ return ResourceError(String(WebKitErrorDomain), WebKitErrorCannotShowURL, request.url().string(), String());
}
ResourceError WebFrame::interruptForPolicyChangeError(const ResourceRequest& request)
@@ -1812,6 +1813,7 @@ HRESULT STDMETHODCALLTYPE WebFrame::spoolPages(
float headerHeight = 0, footerHeight = 0;
headerAndFooterHeights(&headerHeight, &footerHeight);
GraphicsContext spoolCtx(pctx);
+ spoolCtx.setShouldIncludeChildWindows(true);
for (UINT ii = startPage; ii < endPage; ii++) {
IntRect pageRect = m_pageRects[ii];
@@ -2036,13 +2038,10 @@ void WebFrame::updateBackground()
{
Color backgroundColor = webView()->transparent() ? Color::transparent : Color::white;
Frame* coreFrame = core(this);
- for (Frame* frame = coreFrame; frame; frame = frame->tree()->traverseNext(coreFrame)) {
- FrameView* view = frame->view();
- if (!view)
- continue;
- view->setTransparent(webView()->transparent());
- view->setBaseBackgroundColor(backgroundColor);
- }
+ if (!coreFrame || !coreFrame->view())
+ return;
+
+ coreFrame->view()->updateBackgroundRecursively(backgroundColor, webView()->transparent());
}
diff --git a/WebKit/win/WebFrame.h b/WebKit/win/WebFrame.h
index 1bd7478..bf234d3 100644
--- a/WebKit/win/WebFrame.h
+++ b/WebKit/win/WebFrame.h
@@ -260,7 +260,6 @@ public:
virtual void didFinishLoad();
virtual void prepareForDataSourceReplacement();
virtual WebCore::String userAgent(const WebCore::KURL&);
- virtual void transitionToCommittedFromCachedPage(WebCore::CachedPage*);
virtual void saveViewStateToItem(WebCore::HistoryItem *);
virtual WebCore::ResourceError cancelledError(const WebCore::ResourceRequest&);
virtual WebCore::ResourceError blockedError(const WebCore::ResourceRequest&);
diff --git a/WebKit/win/WebHistory.cpp b/WebKit/win/WebHistory.cpp
index d0bc07a..5ee2e32 100644
--- a/WebKit/win/WebHistory.cpp
+++ b/WebKit/win/WebHistory.cpp
@@ -39,6 +39,7 @@
#include <wtf/Vector.h>
#include <WebCore/KURL.h>
#include <WebCore/PageGroup.h>
+#include <WebCore/HistoryItem.h>
#pragma warning( pop )
using namespace WebCore;
@@ -148,6 +149,8 @@ HRESULT STDMETHODCALLTYPE WebHistory::QueryInterface(REFIID riid, void** ppvObje
*ppvObject = static_cast<IWebHistory*>(this);
else if (IsEqualGUID(riid, IID_IWebHistory))
*ppvObject = static_cast<IWebHistory*>(this);
+ else if (IsEqualGUID(riid, IID_IWebHistoryPrivate))
+ *ppvObject = static_cast<IWebHistoryPrivate*>(this);
else
return E_NOINTERFACE;
@@ -310,8 +313,10 @@ HRESULT WebHistory::loadHistoryGutsFromURL(CFURLRef url, CFMutableArrayRef disca
if (ageLimitPassed || itemLimitPassed)
CFArrayAppendValue(discardedItems, item.get());
else {
- addItem(item.get()); // ref is added inside addItem
- ++numberOfItemsLoaded;
+ bool added;
+ addItem(item.get(), true, &added); // ref is added inside addItem
+ if (added)
+ ++numberOfItemsLoaded;
if (numberOfItemsLoaded == itemCountLimit)
itemLimitPassed = true;
}
@@ -428,7 +433,7 @@ HRESULT STDMETHODCALLTYPE WebHistory::addItems(
HRESULT hr;
for (int i = itemCount - 1; i >= 0; --i) {
- hr = addItem(items[i]);
+ hr = addItem(items[i], false, 0);
if (FAILED(hr))
return hr;
}
@@ -454,11 +459,18 @@ HRESULT STDMETHODCALLTYPE WebHistory::removeAllItems( void)
{
CFArrayRemoveAllValues(m_entriesByDate.get());
CFArrayRemoveAllValues(m_datesWithEntries.get());
+
+ CFIndex itemCount = CFDictionaryGetCount(m_entriesByURL.get());
+ Vector<IWebHistoryItem*> itemsVector(itemCount);
+ CFDictionaryGetKeysAndValues(m_entriesByURL.get(), 0, (const void**)itemsVector.data());
+ RetainPtr<CFArrayRef> allItems(AdoptCF, CFArrayCreate(kCFAllocatorDefault, (const void**)itemsVector.data(), itemCount, &MarshallingHelpers::kIUnknownArrayCallBacks));
+
CFDictionaryRemoveAllValues(m_entriesByURL.get());
PageGroup::removeAllVisitedLinks();
- return postNotification(kWebHistoryAllItemsRemovedNotification);
+ CFDictionaryPropertyBag* userInfo = createUserInfoFromArray(getNotificationString(kWebHistoryAllItemsRemovedNotification), allItems.get());
+ return postNotification(kWebHistoryAllItemsRemovedNotification, userInfo);
}
HRESULT STDMETHODCALLTYPE WebHistory::orderedLastVisitedDays(
@@ -520,15 +532,37 @@ HRESULT STDMETHODCALLTYPE WebHistory::orderedItemsLastVisitedOnDay(
*count = newCount;
for (int i = 0; i < newCount; i++) {
IWebHistoryItem* item = (IWebHistoryItem*)CFArrayGetValueAtIndex(entries, i);
- if (!item)
- return E_FAIL;
item->AddRef();
- items[newCount-i-1] = item; // reverse when inserting to get the list sorted oldest to newest
+ items[newCount - i - 1] = item; // reverse when inserting to get the list sorted oldest to newest
}
return S_OK;
}
+HRESULT STDMETHODCALLTYPE WebHistory::allItems(
+ /* [out][in] */ int* count,
+ /* [out][retval] */ IWebHistoryItem** items)
+{
+ int entriesByURLCount = CFDictionaryGetCount(m_entriesByURL.get());
+
+ if (!items) {
+ *count = entriesByURLCount;
+ return S_OK;
+ }
+
+ if (*count < entriesByURLCount) {
+ *count = entriesByURLCount;
+ return E_FAIL;
+ }
+
+ *count = entriesByURLCount;
+ CFDictionaryGetKeysAndValues(m_entriesByURL.get(), 0, (const void**)items);
+ for (int i = 0; i < entriesByURLCount; i++)
+ items[i]->AddRef();
+
+ return S_OK;
+}
+
HRESULT STDMETHODCALLTYPE WebHistory::setHistoryItemLimit(
/* [in] */ int limit)
{
@@ -592,7 +626,7 @@ HRESULT WebHistory::removeItem(IWebHistoryItem* entry)
return hr;
}
-HRESULT WebHistory::addItem(IWebHistoryItem* entry)
+HRESULT WebHistory::addItem(IWebHistoryItem* entry, bool discardDuplicate, bool* added)
{
HRESULT hr = S_OK;
@@ -611,6 +645,12 @@ HRESULT WebHistory::addItem(IWebHistoryItem* entry)
m_entriesByURL.get(), urlString.get()));
if (oldEntry) {
+ if (discardDuplicate) {
+ if (added)
+ *added = false;
+ return S_OK;
+ }
+
removeItemForURLString(urlString.get());
// If we already have an item with this URL, we need to merge info that drives the
@@ -634,30 +674,82 @@ HRESULT WebHistory::addItem(IWebHistoryItem* entry)
hr = postNotification(kWebHistoryItemsAddedNotification, userInfo);
releaseUserInfo(userInfo);
+ if (added)
+ *added = true;
+
return hr;
}
-void WebHistory::addItem(const KURL& url, const String& title)
+void WebHistory::visitedURL(const KURL& url, const String& title, const String& httpMethod, bool wasFailure, const KURL& serverRedirectURL, bool isClientRedirect)
{
- COMPtr<WebHistoryItem> item(AdoptCOM, WebHistoryItem::createInstance());
- if (!item)
- return;
+ if (isClientRedirect) {
+ ASSERT(serverRedirectURL.isEmpty());
+ if (m_lastVisitedEntry)
+ m_lastVisitedEntry->historyItem()->addRedirectURL(url.string());
+ }
- SYSTEMTIME currentTime;
- GetSystemTime(&currentTime);
- DATE lastVisited;
- if (!SystemTimeToVariantTime(&currentTime, &lastVisited))
- return;
+ RetainPtr<CFStringRef> urlString(AdoptCF, url.string().createCFString());
- HRESULT hr = item->initWithURLString(BString(url.string()), BString(title), 0);
- if (FAILED(hr))
- return;
+ IWebHistoryItem* entry = (IWebHistoryItem*) CFDictionaryGetValue(m_entriesByURL.get(), urlString.get());
- hr = item->setLastVisitedTimeInterval(lastVisited); // also increments visitedCount
- if (FAILED(hr))
+ if (entry) {
+ COMPtr<IWebHistoryItemPrivate> entryPrivate(Query, entry);
+ if (!entryPrivate)
+ return;
+
+ // Remove the item from date caches before changing its last visited date. Otherwise we might get duplicate entries
+ // as seen in <rdar://problem/6570573>.
+ removeItemFromDateCaches(entry);
+ entryPrivate->visitedWithTitle(BString(title));
+ } else {
+ COMPtr<WebHistoryItem> item(AdoptCOM, WebHistoryItem::createInstance());
+ if (!item)
+ return;
+
+ entry = item.get();
+
+ SYSTEMTIME currentTime;
+ GetSystemTime(&currentTime);
+ DATE lastVisited;
+ if (!SystemTimeToVariantTime(&currentTime, &lastVisited))
+ return;
+
+ if (FAILED(entry->initWithURLString(BString(url.string()), BString(title), lastVisited)))
+ return;
+
+ item->recordInitialVisit();
+
+ CFDictionarySetValue(m_entriesByURL.get(), urlString.get(), entry);
+ }
+
+ addItemToDateCaches(entry);
+
+ m_lastVisitedEntry.query(entry);
+
+ COMPtr<IWebHistoryItemPrivate> entryPrivate(Query, entry);
+ if (!entryPrivate)
return;
- addItem(item.get());
+ entryPrivate->setLastVisitWasFailure(wasFailure);
+ if (!httpMethod.isEmpty())
+ entryPrivate->setLastVisitWasHTTPNonGet(!equalIgnoringCase(httpMethod, "GET"));
+
+ if (!serverRedirectURL.isEmpty()) {
+ ASSERT(!isClientRedirect);
+ COMPtr<WebHistoryItem> item(Query, entry);
+ item->historyItem()->addRedirectURL(serverRedirectURL);
+ }
+
+ CFDictionaryPropertyBag* userInfo = createUserInfoFromHistoryItem(
+ getNotificationString(kWebHistoryItemsAddedNotification), entry);
+ postNotification(kWebHistoryItemsAddedNotification, userInfo);
+ releaseUserInfo(userInfo);
+}
+
+void WebHistory::visitedURLForRedirectWithoutHistoryItem(const KURL& url)
+{
+ if (m_lastVisitedEntry)
+ m_lastVisitedEntry->historyItem()->addRedirectURL(url.string());
}
HRESULT WebHistory::itemForURLString(
diff --git a/WebKit/win/WebHistory.h b/WebKit/win/WebHistory.h
index a49f320..111f6ae 100644
--- a/WebKit/win/WebHistory.h
+++ b/WebKit/win/WebHistory.h
@@ -42,7 +42,7 @@ namespace WebCore {
class WebPreferences;
-class WebHistory : public IWebHistory {
+class WebHistory : public IWebHistory, public IWebHistoryPrivate {
public:
static WebHistory* createInstance();
private:
@@ -107,9 +107,16 @@ public:
virtual HRESULT STDMETHODCALLTYPE historyAgeInDaysLimit(
/* [retval][out] */ int* limit);
+ // IWebHistoryPrivate
+
+ virtual HRESULT STDMETHODCALLTYPE allItems(
+ /* [out][in] */ int* count,
+ /* [retval][out] */ IWebHistoryItem** items);
+
// WebHistory
static WebHistory* sharedHistory();
- void addItem(const WebCore::KURL&, const WebCore::String&);
+ void visitedURL(const WebCore::KURL&, const WebCore::String& title, const WebCore::String& httpMethod, bool wasFailure, const WebCore::KURL& serverRedirectURL, bool isClientRedirect);
+ void visitedURLForRedirectWithoutHistoryItem(const WebCore::KURL&);
void addVisitedLinksToPageGroup(WebCore::PageGroup&);
private:
@@ -127,7 +134,7 @@ private:
HRESULT saveHistoryGuts(CFURLRef url, IWebError** error);
HRESULT postNotification(NotificationType notifyType, IPropertyBag* userInfo = 0);
HRESULT removeItem(IWebHistoryItem* entry);
- HRESULT addItem(IWebHistoryItem* entry);
+ HRESULT addItem(IWebHistoryItem* entry, bool discardDuplicate, bool* added);
HRESULT removeItemForURLString(CFStringRef urlString);
HRESULT addItemToDateCaches(IWebHistoryItem* entry);
HRESULT removeItemFromDateCaches(IWebHistoryItem* entry);
@@ -144,6 +151,7 @@ private:
RetainPtr<CFMutableArrayRef> m_datesWithEntries;
RetainPtr<CFMutableArrayRef> m_entriesByDate;
COMPtr<WebPreferences> m_preferences;
+ COMPtr<WebHistoryItem> m_lastVisitedEntry;
};
#endif
diff --git a/WebKit/win/WebHistoryItem.cpp b/WebKit/win/WebHistoryItem.cpp
index 594309e..5866c41 100644
--- a/WebKit/win/WebHistoryItem.cpp
+++ b/WebKit/win/WebHistoryItem.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2006, 2007 Apple Inc. All rights reserved.
+ * Copyright (C) 2006, 2007, 2008 Apple Inc. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
@@ -27,13 +27,16 @@
#include "WebKitDLL.h"
#include "WebHistoryItem.h"
+#include "COMEnumVariant.h"
#include "COMPtr.h"
#include "MarshallingHelpers.h"
#include "WebKit.h"
#pragma warning(push, 0)
#include <WebCore/BString.h>
+#include <WebCore/CString.h>
#include <WebCore/HistoryItem.h>
+#include <WebCore/KURL.h>
#pragma warning(pop)
#include <wtf/RetainPtr.h>
@@ -94,51 +97,109 @@ static CFStringRef urlKey = CFSTR("");
static CFStringRef lastVisitedDateKey = CFSTR("lastVisitedDate");
static CFStringRef titleKey = CFSTR("title");
static CFStringRef visitCountKey = CFSTR("visitCount");
+static CFStringRef lastVisitWasFailureKey = CFSTR("lastVisitWasFailure");
+static CFStringRef lastVisitWasHTTPNonGetKey = CFSTR("lastVisitWasHTTPNonGet");
+static CFStringRef redirectURLsKey = CFSTR("redirectURLs");
+static CFStringRef dailyVisitCountKey = CFSTR("D"); // short key to save space
+static CFStringRef weeklyVisitCountKey = CFSTR("W"); // short key to save space
HRESULT STDMETHODCALLTYPE WebHistoryItem::initFromDictionaryRepresentation(void* dictionary)
{
CFDictionaryRef dictionaryRef = (CFDictionaryRef) dictionary;
- HRESULT hr = S_OK;
- int visitedCount = 0;
- CFAbsoluteTime lastVisitedTime = 0.0;
CFStringRef urlStringRef = (CFStringRef) CFDictionaryGetValue(dictionaryRef, urlKey);
- if (urlStringRef && CFGetTypeID(urlStringRef) != CFStringGetTypeID()) {
- hr = E_FAIL;
- goto exit;
- }
+ if (urlStringRef && CFGetTypeID(urlStringRef) != CFStringGetTypeID())
+ return E_FAIL;
CFStringRef lastVisitedRef = (CFStringRef) CFDictionaryGetValue(dictionaryRef, lastVisitedDateKey);
- if (!lastVisitedRef || CFGetTypeID(lastVisitedRef) != CFStringGetTypeID()) {
- hr = E_FAIL;
- goto exit;
- }
- lastVisitedTime = CFStringGetDoubleValue(lastVisitedRef);
+ if (!lastVisitedRef || CFGetTypeID(lastVisitedRef) != CFStringGetTypeID())
+ return E_FAIL;
+ CFAbsoluteTime lastVisitedTime = CFStringGetDoubleValue(lastVisitedRef);
CFStringRef titleRef = (CFStringRef) CFDictionaryGetValue(dictionaryRef, titleKey);
- if (titleRef && CFGetTypeID(titleRef) != CFStringGetTypeID()) {
- hr = E_FAIL;
- goto exit;
- }
+ if (titleRef && CFGetTypeID(titleRef) != CFStringGetTypeID())
+ return E_FAIL;
CFNumberRef visitCountRef = (CFNumberRef) CFDictionaryGetValue(dictionaryRef, visitCountKey);
- if (!visitCountRef || CFGetTypeID(visitCountRef) != CFNumberGetTypeID()) {
- hr = E_FAIL;
- goto exit;
+ if (!visitCountRef || CFGetTypeID(visitCountRef) != CFNumberGetTypeID())
+ return E_FAIL;
+ int visitedCount = 0;
+ if (!CFNumberGetValue(visitCountRef, kCFNumberIntType, &visitedCount))
+ return E_FAIL;
+
+ // Can't trust data on disk, and we've had at least one report of this (<rdar://6572300>).
+ if (visitedCount < 0) {
+ LOG_ERROR("visit count for history item \"%s\" is negative (%d), will be reset to 1", String(urlStringRef).utf8().data(), visitedCount);
+ visitedCount = 1;
+ }
+
+ CFBooleanRef lastVisitWasFailureRef = static_cast<CFBooleanRef>(CFDictionaryGetValue(dictionaryRef, lastVisitWasFailureKey));
+ if (lastVisitWasFailureRef && CFGetTypeID(lastVisitWasFailureRef) != CFBooleanGetTypeID())
+ return E_FAIL;
+ bool lastVisitWasFailure = lastVisitWasFailureRef && CFBooleanGetValue(lastVisitWasFailureRef);
+
+ CFBooleanRef lastVisitWasHTTPNonGetRef = static_cast<CFBooleanRef>(CFDictionaryGetValue(dictionaryRef, lastVisitWasHTTPNonGetKey));
+ if (lastVisitWasHTTPNonGetRef && CFGetTypeID(lastVisitWasHTTPNonGetRef) != CFBooleanGetTypeID())
+ return E_FAIL;
+ bool lastVisitWasHTTPNonGet = lastVisitWasHTTPNonGetRef && CFBooleanGetValue(lastVisitWasHTTPNonGetRef);
+
+ std::auto_ptr<Vector<String> > redirectURLsVector;
+ if (CFArrayRef redirectURLsRef = static_cast<CFArrayRef>(CFDictionaryGetValue(dictionaryRef, redirectURLsKey))) {
+ CFIndex size = CFArrayGetCount(redirectURLsRef);
+ redirectURLsVector.reset(new Vector<String>(size));
+ for (CFIndex i = 0; i < size; ++i)
+ (*redirectURLsVector)[i] = String(static_cast<CFStringRef>(CFArrayGetValueAtIndex(redirectURLsRef, i)));
+ }
+
+ CFArrayRef dailyCounts = static_cast<CFArrayRef>(CFDictionaryGetValue(dictionaryRef, dailyVisitCountKey));
+ if (dailyCounts && CFGetTypeID(dailyCounts) != CFArrayGetTypeID())
+ dailyCounts = 0;
+ CFArrayRef weeklyCounts = static_cast<CFArrayRef>(CFDictionaryGetValue(dictionaryRef, weeklyVisitCountKey));
+ if (weeklyCounts && CFGetTypeID(weeklyCounts) != CFArrayGetTypeID())
+ weeklyCounts = 0;
+
+ std::auto_ptr<Vector<int> > dailyVector, weeklyVector;
+ if (dailyCounts || weeklyCounts) {
+ CFIndex dailySize = dailyCounts ? CFArrayGetCount(dailyCounts) : 0;
+ CFIndex weeklySize = weeklyCounts ? CFArrayGetCount(weeklyCounts) : 0;
+ dailyVector.reset(new Vector<int>(dailySize));
+ weeklyVector.reset(new Vector<int>(weeklySize));
+
+ // Daily and weekly counts < 0 are errors in the data read from disk, so reset to 0.
+ for (CFIndex i = 0; i < dailySize; ++i) {
+ CFNumberRef dailyCount = static_cast<CFNumberRef>(CFArrayGetValueAtIndex(dailyCounts, i));
+ if (CFGetTypeID(dailyCount) == CFNumberGetTypeID())
+ CFNumberGetValue(dailyCount, kCFNumberIntType, &(*dailyVector)[i]);
+ if ((*dailyVector)[i] < 0)
+ (*dailyVector)[i] = 0;
+ }
+ for (CFIndex i = 0; i < weeklySize; ++i) {
+ CFNumberRef weeklyCount = static_cast<CFNumberRef>(CFArrayGetValueAtIndex(weeklyCounts, i));
+ if (CFGetTypeID(weeklyCount) == CFNumberGetTypeID())
+ CFNumberGetValue(weeklyCount, kCFNumberIntType, &(*weeklyVector)[i]);
+ if ((*weeklyVector)[i] < 0)
+ (*weeklyVector)[i] = 0;
+ }
}
historyItemWrappers().remove(m_historyItem.get());
m_historyItem = HistoryItem::create(urlStringRef, titleRef, lastVisitedTime);
historyItemWrappers().set(m_historyItem.get(), this);
- if (!CFNumberGetValue(visitCountRef, kCFNumberIntType, &visitedCount)) {
- hr = E_FAIL;
- goto exit;
- }
-
m_historyItem->setVisitCount(visitedCount);
-exit:
- return hr;
+ if (lastVisitWasFailure)
+ m_historyItem->setLastVisitWasFailure(true);
+
+ if (lastVisitWasHTTPNonGet && (protocolIs(m_historyItem->urlString(), "http") || protocolIs(m_historyItem->urlString(), "https")))
+ m_historyItem->setLastVisitWasHTTPNonGet(true);
+
+ if (redirectURLsVector.get())
+ m_historyItem->setRedirectURLs(redirectURLsVector);
+
+ if (dailyVector.get())
+ m_historyItem->adoptVisitCounts(*dailyVector, *weeklyVector);
+
+ return S_OK;
}
HRESULT STDMETHODCALLTYPE WebHistoryItem::dictionaryRepresentation(void** dictionary)
@@ -151,8 +212,9 @@ HRESULT STDMETHODCALLTYPE WebHistoryItem::dictionaryRepresentation(void** dictio
return E_FAIL;
int keyCount = 0;
- CFTypeRef keys[4];
- CFTypeRef values[4];
+ CFTypeRef keys[9];
+ CFTypeRef values[9];
+
if (!m_historyItem->urlString().isEmpty()) {
keys[keyCount] = urlKey;
values[keyCount++] = m_historyItem->urlString().createCFString();
@@ -160,16 +222,72 @@ HRESULT STDMETHODCALLTYPE WebHistoryItem::dictionaryRepresentation(void** dictio
keys[keyCount] = lastVisitedDateKey;
values[keyCount++] = lastVisitedStringRef;
-
+
if (!m_historyItem->title().isEmpty()) {
keys[keyCount] = titleKey;
values[keyCount++] = m_historyItem->title().createCFString();
}
-
- keys[keyCount] = visitCountKey;
+
+ keys[keyCount] = visitCountKey;
int visitCount = m_historyItem->visitCount();
values[keyCount++] = CFNumberCreate(0, kCFNumberIntType, &visitCount);
-
+
+ if (m_historyItem->lastVisitWasFailure()) {
+ keys[keyCount] = lastVisitWasFailureKey;
+ values[keyCount++] = CFRetain(kCFBooleanTrue);
+ }
+
+ if (m_historyItem->lastVisitWasHTTPNonGet()) {
+ ASSERT(m_historyItem->urlString().startsWith("http:", false) || m_historyItem->urlString().startsWith("https:", false));
+ keys[keyCount] = lastVisitWasHTTPNonGetKey;
+ values[keyCount++] = CFRetain(kCFBooleanTrue);
+ }
+
+ if (Vector<String>* redirectURLs = m_historyItem->redirectURLs()) {
+ size_t size = redirectURLs->size();
+ ASSERT(size);
+ CFStringRef* items = new CFStringRef[size];
+ for (size_t i = 0; i < size; ++i)
+ items[i] = redirectURLs->at(i).createCFString();
+ CFArrayRef result = CFArrayCreate(0, (const void**)items, size, &kCFTypeArrayCallBacks);
+ for (size_t i = 0; i < size; ++i)
+ CFRelease(items[i]);
+ delete[] items;
+
+ keys[keyCount] = redirectURLsKey;
+ values[keyCount++] = result;
+ }
+
+ const Vector<int>& dailyVisitCount(m_historyItem->dailyVisitCounts());
+ if (size_t size = dailyVisitCount.size()) {
+ Vector<CFNumberRef, 13> numbers(size);
+ for (size_t i = 0; i < size; ++i)
+ numbers[i] = CFNumberCreate(0, kCFNumberIntType, &dailyVisitCount[i]);
+
+ CFArrayRef result = CFArrayCreate(0, (const void**)numbers.data(), size, &kCFTypeArrayCallBacks);
+
+ for (size_t i = 0; i < size; ++i)
+ CFRelease(numbers[i]);
+
+ keys[keyCount] = dailyVisitCountKey;
+ values[keyCount++] = result;
+ }
+
+ const Vector<int>& weeklyVisitCount(m_historyItem->weeklyVisitCounts());
+ if (size_t size = weeklyVisitCount.size()) {
+ Vector<CFNumberRef, 5> numbers(size);
+ for (size_t i = 0; i < size; ++i)
+ numbers[i] = CFNumberCreate(0, kCFNumberIntType, &weeklyVisitCount[i]);
+
+ CFArrayRef result = CFArrayCreate(0, (const void**)numbers.data(), size, &kCFTypeArrayCallBacks);
+
+ for (size_t i = 0; i < size; ++i)
+ CFRelease(numbers[i]);
+
+ keys[keyCount] = weeklyVisitCountKey;
+ values[keyCount++] = result;
+ }
+
*dictionaryRef = CFDictionaryCreate(0, keys, values, keyCount, &kCFTypeDictionaryKeyCallBacks, &kCFTypeDictionaryValueCallBacks);
for (int i = 0; i < keyCount; ++i)
@@ -225,7 +343,7 @@ HRESULT STDMETHODCALLTYPE WebHistoryItem::setTitle(BSTR title)
HRESULT STDMETHODCALLTYPE WebHistoryItem::RSSFeedReferrer(BSTR* url)
{
- BString str(m_historyItem->rssFeedReferrer());
+ BString str(m_historyItem->referrer());
*url = str.release();
return S_OK;
@@ -233,7 +351,7 @@ HRESULT STDMETHODCALLTYPE WebHistoryItem::RSSFeedReferrer(BSTR* url)
HRESULT STDMETHODCALLTYPE WebHistoryItem::setRSSFeedReferrer(BSTR url)
{
- m_historyItem->setRSSFeedReferrer(String(url, SysStringLen(url)));
+ m_historyItem->setReferrer(String(url, SysStringLen(url)));
return S_OK;
}
@@ -320,6 +438,96 @@ HRESULT STDMETHODCALLTYPE WebHistoryItem::children(unsigned* outChildCount, SAFE
}
+HRESULT STDMETHODCALLTYPE WebHistoryItem::lastVisitWasFailure(BOOL* wasFailure)
+{
+ if (!wasFailure) {
+ ASSERT_NOT_REACHED();
+ return E_POINTER;
+ }
+
+ *wasFailure = m_historyItem->lastVisitWasFailure();
+ return S_OK;
+}
+
+HRESULT STDMETHODCALLTYPE WebHistoryItem::setLastVisitWasFailure(BOOL wasFailure)
+{
+ m_historyItem->setLastVisitWasFailure(wasFailure);
+ return S_OK;
+}
+
+HRESULT STDMETHODCALLTYPE WebHistoryItem::lastVisitWasHTTPNonGet(BOOL* HTTPNonGet)
+{
+ if (!HTTPNonGet) {
+ ASSERT_NOT_REACHED();
+ return E_POINTER;
+ }
+
+ *HTTPNonGet = m_historyItem->lastVisitWasHTTPNonGet();
+
+ return S_OK;
+}
+
+HRESULT STDMETHODCALLTYPE WebHistoryItem::setLastVisitWasHTTPNonGet(BOOL HTTPNonGet)
+{
+ m_historyItem->setLastVisitWasHTTPNonGet(HTTPNonGet);
+ return S_OK;
+}
+
+HRESULT STDMETHODCALLTYPE WebHistoryItem::redirectURLs(IEnumVARIANT** urls)
+{
+ if (!urls) {
+ ASSERT_NOT_REACHED();
+ return E_POINTER;
+ }
+
+ Vector<String>* urlVector = m_historyItem->redirectURLs();
+ if (!urlVector) {
+ *urls = 0;
+ return S_OK;
+ }
+
+ COMPtr<COMEnumVariant<Vector<String> > > enumVariant(AdoptCOM, COMEnumVariant<Vector<String> >::createInstance(*urlVector));
+ *urls = enumVariant.releaseRef();
+
+ return S_OK;
+}
+
+HRESULT STDMETHODCALLTYPE WebHistoryItem::visitedWithTitle(BSTR title)
+{
+ m_historyItem->visited(title, CFAbsoluteTimeGetCurrent());
+ return S_OK;
+}
+
+HRESULT STDMETHODCALLTYPE WebHistoryItem::getDailyVisitCounts(int* number, int** counts)
+{
+ if (!number || !counts) {
+ ASSERT_NOT_REACHED();
+ return E_POINTER;
+ }
+
+ *counts = const_cast<int*>(m_historyItem->dailyVisitCounts().data());
+ *number = m_historyItem->dailyVisitCounts().size();
+ return S_OK;
+}
+
+HRESULT STDMETHODCALLTYPE WebHistoryItem::getWeeklyVisitCounts(int* number, int** counts)
+{
+ if (!number || !counts) {
+ ASSERT_NOT_REACHED();
+ return E_POINTER;
+ }
+
+ *counts = const_cast<int*>(m_historyItem->weeklyVisitCounts().data());
+ *number = m_historyItem->weeklyVisitCounts().size();
+ return S_OK;
+}
+
+HRESULT STDMETHODCALLTYPE WebHistoryItem::recordInitialVisit()
+{
+ m_historyItem->recordInitialVisit();
+ return S_OK;
+}
+
// IUnknown -------------------------------------------------------------------
HRESULT STDMETHODCALLTYPE WebHistoryItem::QueryInterface(REFIID riid, void** ppvObject)
@@ -438,6 +646,7 @@ HRESULT STDMETHODCALLTYPE WebHistoryItem::icon(
}
// WebHistoryItem -------------------------------------------------------------
+
HistoryItem* WebHistoryItem::historyItem() const
{
return m_historyItem.get();
diff --git a/WebKit/win/WebHistoryItem.h b/WebKit/win/WebHistoryItem.h
index 6734ff0..861dc6e 100644
--- a/WebKit/win/WebHistoryItem.h
+++ b/WebKit/win/WebHistoryItem.h
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2006, 2007 Apple Inc. All rights reserved.
+ * Copyright (C) 2006, 2007, 2008 Apple Inc. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
@@ -97,9 +97,18 @@ public:
virtual HRESULT STDMETHODCALLTYPE target(BSTR* target);
virtual HRESULT STDMETHODCALLTYPE isTargetItem(BOOL* result);
virtual HRESULT STDMETHODCALLTYPE children(unsigned* childCount, SAFEARRAY** children);
-
+ virtual HRESULT STDMETHODCALLTYPE lastVisitWasFailure(BOOL* wasFailure);
+ virtual HRESULT STDMETHODCALLTYPE setLastVisitWasFailure(BOOL wasFailure);
+ virtual HRESULT STDMETHODCALLTYPE lastVisitWasHTTPNonGet(BOOL* HTTPNonGet);
+ virtual HRESULT STDMETHODCALLTYPE setLastVisitWasHTTPNonGet(BOOL HTTPNonGet);
+ virtual HRESULT STDMETHODCALLTYPE redirectURLs(IEnumVARIANT**);
+ virtual HRESULT STDMETHODCALLTYPE visitedWithTitle(BSTR title);
+ virtual HRESULT STDMETHODCALLTYPE getDailyVisitCounts(int* number, int** counts);
+ virtual HRESULT STDMETHODCALLTYPE getWeeklyVisitCounts(int* number, int** counts);
+ virtual HRESULT STDMETHODCALLTYPE recordInitialVisit();
// WebHistoryItem
WebCore::HistoryItem* historyItem() const;
+
protected:
ULONG m_refCount;
diff --git a/WebKit/win/WebIconDatabase.cpp b/WebKit/win/WebIconDatabase.cpp
index 5f9121f..237438c 100644
--- a/WebKit/win/WebIconDatabase.cpp
+++ b/WebKit/win/WebIconDatabase.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2006, 2007, 2008 Apple Inc. All rights reserved.
+ * Copyright (C) 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
@@ -71,6 +71,15 @@ void WebIconDatabase::init()
LOG_ERROR("Unable to get icon database enabled preference");
}
iconDatabase()->setEnabled(!!enabled);
+ if (!(!!enabled))
+ return;
+
+ startUpIconDatabase();
+}
+
+void WebIconDatabase::startUpIconDatabase()
+{
+ WebPreferences* standardPrefs = WebPreferences::sharedStandardPreferences();
iconDatabase()->setClient(this);
@@ -91,6 +100,10 @@ void WebIconDatabase::init()
LOG_ERROR("Failed to open icon database path");
}
+void WebIconDatabase::shutDownIconDatabase()
+{
+}
+
WebIconDatabase* WebIconDatabase::createInstance()
{
WebIconDatabase* instance = new WebIconDatabase();
@@ -225,6 +238,28 @@ HRESULT STDMETHODCALLTYPE WebIconDatabase::iconURLForURL(
return S_OK;
}
+HRESULT STDMETHODCALLTYPE WebIconDatabase::isEnabled(
+ /* [retval][out] */ BOOL *result)
+{
+ *result = iconDatabase()->isEnabled();
+ return S_OK;
+}
+
+HRESULT STDMETHODCALLTYPE WebIconDatabase::setEnabled(
+ /* [in] */ BOOL flag)
+{
+ BOOL currentlyEnabled;
+ isEnabled(&currentlyEnabled);
+ if (currentlyEnabled && !flag) {
+ iconDatabase()->setEnabled(false);
+ shutDownIconDatabase();
+ } else if (!currentlyEnabled && flag) {
+ iconDatabase()->setEnabled(true);
+ startUpIconDatabase();
+ }
+ return S_OK;
+}
+
HBITMAP createDIB(LPSIZE size)
{
HBITMAP result;
diff --git a/WebKit/win/WebIconDatabase.h b/WebKit/win/WebIconDatabase.h
index 85f57b7..ac42d4a 100644
--- a/WebKit/win/WebIconDatabase.h
+++ b/WebKit/win/WebIconDatabase.h
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2006, 2007, 2008 Apple Inc. All rights reserved.
+ * Copyright (C) 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
@@ -57,6 +57,8 @@ private:
WebIconDatabase();
~WebIconDatabase();
void init();
+ void startUpIconDatabase();
+ void shutDownIconDatabase();
public:
// IUnknown
@@ -94,6 +96,12 @@ public:
/* [in] */ BSTR url,
/* [retval][out] */ BSTR *iconURL);
+ virtual HRESULT STDMETHODCALLTYPE isEnabled(
+ /* [retval][out] */ BOOL *result);
+
+ virtual HRESULT STDMETHODCALLTYPE setEnabled(
+ /* [in] */ BOOL /*flag*/);
+
// IconDatabaseClient
virtual void dispatchDidRemoveAllIcons();
virtual void dispatchDidAddIconForPageURL(const WebCore::String&);
diff --git a/WebKit/win/WebJavaScriptCollector.cpp b/WebKit/win/WebJavaScriptCollector.cpp
index 818fb4e..2e0d7e6 100644
--- a/WebKit/win/WebJavaScriptCollector.cpp
+++ b/WebKit/win/WebJavaScriptCollector.cpp
@@ -114,6 +114,6 @@ HRESULT STDMETHODCALLTYPE WebJavaScriptCollector::objectCount(
}
JSLock lock(false);
- *count = (UINT)JSDOMWindow::commonJSGlobalData()->heap.size();
+ *count = (UINT)JSDOMWindow::commonJSGlobalData()->heap.objectCount();
return S_OK;
}
diff --git a/WebKit/win/WebKit.resources/Info.plist b/WebKit/win/WebKit.resources/Info.plist
index 859ce3d..9477472 100644
--- a/WebKit/win/WebKit.resources/Info.plist
+++ b/WebKit/win/WebKit.resources/Info.plist
@@ -7,7 +7,7 @@
<key>CFBundleExecutable</key>
<string>WebKit</string>
<key>CFBundleGetInfoString</key>
- <string>522+, Copyright 2003-2007 Apple Inc.</string>
+ <string>522+, Copyright 2003-2009 Apple Inc.</string>
<key>CFBundleIdentifier</key>
<string>com.apple.WebKit</string>
<key>CFBundleInfoDictionaryVersion</key>
diff --git a/WebKit/win/WebKit.vcproj/WebKit.def b/WebKit/win/WebKit.vcproj/WebKit.def
index a436558..fa3f2bc 100644
--- a/WebKit/win/WebKit.vcproj/WebKit.def
+++ b/WebKit/win/WebKit.vcproj/WebKit.def
@@ -29,10 +29,12 @@ EXPORTS
JSObjectIsConstructor
JSObjectIsFunction
JSObjectMake
+ JSObjectMakeArray
JSObjectMakeConstructor
- JSObjectMakeFunction
+ JSObjectMakeDate
JSObjectMakeFunction
JSObjectMakeFunctionWithCallback
+ JSObjectMakeRegExp
JSObjectSetPrivate
JSObjectSetProperty
JSObjectSetPropertyAtIndex
diff --git a/WebKit/win/WebKit.vcproj/WebKit.rc b/WebKit/win/WebKit.vcproj/WebKit.rc
index bfab23a..1c4e4f5 100644
--- a/WebKit/win/WebKit.vcproj/WebKit.rc
+++ b/WebKit/win/WebKit.vcproj/WebKit.rc
@@ -42,7 +42,7 @@ BEGIN
VALUE "FileVersion", __VERSION_TEXT__
VALUE "CompanyName", "Apple Inc."
VALUE "InternalName", "WebKit"
- VALUE "LegalCopyright", "Copyright Apple Inc. 2003-2008"
+ VALUE "LegalCopyright", "Copyright Apple Inc. 2003-2009"
VALUE "OriginalFilename", "WebKit.dll"
VALUE "ProductName", " WebKit"
VALUE "ProductVersion", __BUILD_NUMBER_SHORT__
@@ -77,4 +77,8 @@ IDR_PAN_SOUTH_EAST_CURSOR PNG "panSouthEastCursor.png
IDR_PAN_SOUTH_WEST_CURSOR PNG "panSouthWestCursor.png"
IDR_PAN_NORTH_EAST_CURSOR PNG "panNorthEastCursor.png"
IDR_PAN_NORTH_WEST_CURSOR PNG "panNorthWestCursor.png"
+IDR_SEARCH_CANCEL PNG "searchCancel.png"
+IDR_SEARCH_CANCEL_PRESSED PNG "searchCancelPressed.png"
+IDR_SEARCH_MAGNIFIER PNG "searchMagnifier.png"
+IDR_SEARCH_MAGNIFIER_RESULTS PNG "searchMagnifierResults.png"
diff --git a/WebKit/win/WebKit.vcproj/WebKit.sln b/WebKit/win/WebKit.vcproj/WebKit.sln
index beca071..e06e650 100644
--- a/WebKit/win/WebKit.vcproj/WebKit.sln
+++ b/WebKit/win/WebKit.vcproj/WebKit.sln
@@ -235,13 +235,11 @@ Global
{0A324352-B3B6-496C-9E5B-4C7E923E628B}.Release|Win32.ActiveCfg = Release|Win32
{0A324352-B3B6-496C-9E5B-4C7E923E628B}.Release|Win32.Build.0 = Release|Win32
{E498CA9D-3BD2-4D52-8E37-C8DC76526325}.Debug_Cairo|Win32.ActiveCfg = Debug|Win32
- {E498CA9D-3BD2-4D52-8E37-C8DC76526325}.Debug_Cairo|Win32.Build.0 = Debug|Win32
{E498CA9D-3BD2-4D52-8E37-C8DC76526325}.Debug_Internal|Win32.ActiveCfg = Debug_Internal|Win32
{E498CA9D-3BD2-4D52-8E37-C8DC76526325}.Debug_Internal|Win32.Build.0 = Debug_Internal|Win32
{E498CA9D-3BD2-4D52-8E37-C8DC76526325}.Debug|Win32.ActiveCfg = Debug|Win32
{E498CA9D-3BD2-4D52-8E37-C8DC76526325}.Debug|Win32.Build.0 = Debug|Win32
{E498CA9D-3BD2-4D52-8E37-C8DC76526325}.Release_Cairo|Win32.ActiveCfg = Release|Win32
- {E498CA9D-3BD2-4D52-8E37-C8DC76526325}.Release_Cairo|Win32.Build.0 = Release|Win32
{E498CA9D-3BD2-4D52-8E37-C8DC76526325}.Release|Win32.ActiveCfg = Release|Win32
{E498CA9D-3BD2-4D52-8E37-C8DC76526325}.Release|Win32.Build.0 = Release|Win32
{114FCA11-216B-4C8C-957E-30A75AE80443}.Debug_Cairo|Win32.ActiveCfg = Debug|Win32
diff --git a/WebKit/win/WebKit.vcproj/WebKit.vcproj b/WebKit/win/WebKit.vcproj/WebKit.vcproj
index d4d21d1..0740e8a 100644
--- a/WebKit/win/WebKit.vcproj/WebKit.vcproj
+++ b/WebKit/win/WebKit.vcproj/WebKit.vcproj
@@ -40,7 +40,7 @@
<Tool
Name="VCCLCompilerTool"
AdditionalIncludeDirectories="&quot;$(WebKitOutputDir)\include\WebKit&quot;;&quot;$(WebKitOutputDir)\Include&quot;;&quot;$(WebKitLibrariesDir)\Include&quot;;&quot;$(WebKitOutputDir)\Include\WebCore&quot;;&quot;$(WebKitLibrariesDir)\Include\WebCore&quot;;&quot;$(WebKitOutputDir)\Include\WebCore\ForwardingHeaders&quot;;&quot;$(WebKitLibrariesDir)\Include\WebCore\ForwardingHeaders&quot;;&quot;$(WebKitOutputDir)\Include\JavaScriptCore&quot;;&quot;$(WebKitLibrariesDir)\Include\JavaScriptCore&quot;;&quot;$(WebKitOutputDir)\Include\icu&quot;;&quot;$(WebKitLibrariesDir)\Include\icu&quot;;&quot;$(WebKitLibrariesDir)\include\pthreads&quot;;&quot;$(WebKitOutputDir)\Include\CoreFoundation\OSXCompatibilityHeaders&quot;;&quot;$(WebKitLibrariesDir)\Include\CoreFoundation\OSXCompatibilityHeaders&quot;;&quot;$(WebKitOutputDir)\Include\CoreFoundation\OSXCompatibilityHeaders\GNUCompatibility&quot;;&quot;$(WebKitLibrariesDir)\Include\CoreFoundation\OSXCompatibilityHeaders\GNUCompatibility&quot;;&quot;$(ProjectDir)\..&quot;;&quot;$(ProjectDir)&quot;;&quot;$(ProjectDir)\..\WebCoreSupport&quot;;&quot;$(IntDir)\include&quot;;&quot;$(WebKitOutputDir)\obj\WebKit\DerivedSources&quot;"
- PreprocessorDefinitions="_USRDLL;WEBKIT_EXPORTS;ENABLE_DOM_STORAGE;ENABLE_OFFLINE_WEB_APPLICATIONS;ENABLE_SVG;ENABLE_XSLT;ENABLE_XPATH;FRAMEWORK_NAME=WebKit"
+ PreprocessorDefinitions="_USRDLL;WEBKIT_EXPORTS;FRAMEWORK_NAME=WebKit;ENABLE_DATABASE;ENABLE_DOM_STORAGE;ENABLE_ICONDATABASE;ENABLE_OFFLINE_WEB_APPLICATIONS;ENABLE_SVG;ENABLE_SVG_ANIMATION;ENABLE_SVG_AS_IMAGE;ENABLE_SVG_FONTS;ENABLE_SVG_FOREIGN_OBJECT;ENABLE_SVG_USE;ENABLE_VIDEO;ENABLE_WORKERS;ENABLE_XPATH;ENABLE_XSLT"
UsePrecompiledHeader="2"
PrecompiledHeaderThrough="WebKitPrefix.h"
ForcedIncludeFiles="WebKitPrefix.h"
@@ -116,7 +116,7 @@
<Tool
Name="VCCLCompilerTool"
AdditionalIncludeDirectories="&quot;$(WebKitOutputDir)\include\WebKit&quot;;&quot;$(WebKitOutputDir)\Include&quot;;&quot;$(WebKitLibrariesDir)\Include&quot;;&quot;$(WebKitOutputDir)\Include\WebCore&quot;;&quot;$(WebKitLibrariesDir)\Include\WebCore&quot;;&quot;$(WebKitOutputDir)\Include\WebCore\ForwardingHeaders&quot;;&quot;$(WebKitLibrariesDir)\Include\WebCore\ForwardingHeaders&quot;;&quot;$(WebKitOutputDir)\Include\JavaScriptCore&quot;;&quot;$(WebKitLibrariesDir)\Include\JavaScriptCore&quot;;&quot;$(WebKitOutputDir)\Include\icu&quot;;&quot;$(WebKitLibrariesDir)\Include\icu&quot;;&quot;$(WebKitLibrariesDir)\include\pthreads&quot;;&quot;$(WebKitOutputDir)\Include\CoreFoundation\OSXCompatibilityHeaders&quot;;&quot;$(WebKitLibrariesDir)\Include\CoreFoundation\OSXCompatibilityHeaders&quot;;&quot;$(WebKitOutputDir)\Include\CoreFoundation\OSXCompatibilityHeaders\GNUCompatibility&quot;;&quot;$(WebKitLibrariesDir)\Include\CoreFoundation\OSXCompatibilityHeaders\GNUCompatibility&quot;;&quot;$(ProjectDir)\..&quot;;&quot;$(ProjectDir)&quot;;&quot;$(ProjectDir)\..\WebCoreSupport&quot;;&quot;$(IntDir)\include&quot;;&quot;$(WebKitOutputDir)\obj\WebKit\DerivedSources&quot;"
- PreprocessorDefinitions="_USRDLL;WEBKIT_EXPORTS;ENABLE_DOM_STORAGE;ENABLE_OFFLINE_WEB_APPLICATIONS;ENABLE_SVG;ENABLE_XSLT;ENABLE_XPATH;FRAMEWORK_NAME=WebKit"
+ PreprocessorDefinitions="_USRDLL;WEBKIT_EXPORTS;FRAMEWORK_NAME=WebKit;ENABLE_DATABASE;ENABLE_DOM_STORAGE;ENABLE_ICONDATABASE;ENABLE_OFFLINE_WEB_APPLICATIONS;ENABLE_SVG;ENABLE_SVG_ANIMATION;ENABLE_SVG_AS_IMAGE;ENABLE_SVG_FONTS;ENABLE_SVG_FOREIGN_OBJECT;ENABLE_SVG_USE;ENABLE_VIDEO;ENABLE_WORKERS;ENABLE_XPATH;ENABLE_XSLT"
UsePrecompiledHeader="2"
PrecompiledHeaderThrough="WebKitPrefix.h"
ForcedIncludeFiles="WebKitPrefix.h"
@@ -191,7 +191,7 @@
<Tool
Name="VCCLCompilerTool"
AdditionalIncludeDirectories="&quot;$(WebKitOutputDir)\include\WebKit&quot;;&quot;$(WebKitOutputDir)\Include&quot;;&quot;$(WebKitLibrariesDir)\Include&quot;;&quot;$(WebKitOutputDir)\Include\WebCore&quot;;&quot;$(WebKitLibrariesDir)\Include\WebCore&quot;;&quot;$(WebKitOutputDir)\Include\WebCore\ForwardingHeaders&quot;;&quot;$(WebKitLibrariesDir)\Include\WebCore\ForwardingHeaders&quot;;&quot;$(WebKitOutputDir)\Include\JavaScriptCore&quot;;&quot;$(WebKitLibrariesDir)\Include\JavaScriptCore&quot;;&quot;$(WebKitOutputDir)\Include\icu&quot;;&quot;$(WebKitLibrariesDir)\Include\icu&quot;;&quot;$(WebKitLibrariesDir)\include\pthreads&quot;;&quot;$(WebKitOutputDir)\Include\CoreFoundation\OSXCompatibilityHeaders&quot;;&quot;$(WebKitLibrariesDir)\Include\CoreFoundation\OSXCompatibilityHeaders&quot;;&quot;$(WebKitOutputDir)\Include\CoreFoundation\OSXCompatibilityHeaders\GNUCompatibility&quot;;&quot;$(WebKitLibrariesDir)\Include\CoreFoundation\OSXCompatibilityHeaders\GNUCompatibility&quot;;&quot;$(ProjectDir)\..&quot;;&quot;$(ProjectDir)&quot;;&quot;$(ProjectDir)\..\WebCoreSupport&quot;;&quot;$(IntDir)\include&quot;;&quot;$(WebKitOutputDir)\obj\WebKit\DerivedSources&quot;"
- PreprocessorDefinitions="_USRDLL;WEBKIT_EXPORTS;ENABLE_DOM_STORAGE;ENABLE_OFFLINE_WEB_APPLICATIONS;ENABLE_SVG;ENABLE_XSLT;ENABLE_XPATH;FRAMEWORK_NAME=WebKit"
+ PreprocessorDefinitions="_USRDLL;WEBKIT_EXPORTS;FRAMEWORK_NAME=WebKit;ENABLE_DATABASE;ENABLE_DOM_STORAGE;ENABLE_ICONDATABASE;ENABLE_OFFLINE_WEB_APPLICATIONS;ENABLE_SVG;ENABLE_SVG_ANIMATION;ENABLE_SVG_AS_IMAGE;ENABLE_SVG_FONTS;ENABLE_SVG_FOREIGN_OBJECT;ENABLE_SVG_USE;ENABLE_VIDEO;ENABLE_WORKERS;ENABLE_XPATH;ENABLE_XSLT"
UsePrecompiledHeader="2"
PrecompiledHeaderThrough="WebKitPrefix.h"
Detect64BitPortabilityProblems="false"
@@ -269,7 +269,7 @@
<Tool
Name="VCCLCompilerTool"
AdditionalIncludeDirectories="&quot;$(WebKitOutputDir)\include\WebKit&quot;;&quot;$(WebKitOutputDir)\Include&quot;;&quot;$(WebKitLibrariesDir)\Include&quot;;&quot;$(WebKitOutputDir)\Include\WebCore&quot;;&quot;$(WebKitLibrariesDir)\Include\WebCore&quot;;&quot;$(WebKitOutputDir)\Include\WebCore\ForwardingHeaders&quot;;&quot;$(WebKitLibrariesDir)\Include\WebCore\ForwardingHeaders&quot;;&quot;$(WebKitOutputDir)\Include\JavaScriptCore&quot;;&quot;$(WebKitLibrariesDir)\Include\JavaScriptCore&quot;;&quot;$(WebKitOutputDir)\Include\icu&quot;;&quot;$(WebKitLibrariesDir)\Include\icu&quot;;&quot;$(WebKitLibrariesDir)\include\pthreads&quot;;&quot;$(WebKitOutputDir)\Include\CoreFoundation\OSXCompatibilityHeaders&quot;;&quot;$(WebKitLibrariesDir)\Include\CoreFoundation\OSXCompatibilityHeaders&quot;;&quot;$(WebKitOutputDir)\Include\CoreFoundation\OSXCompatibilityHeaders\GNUCompatibility&quot;;&quot;$(WebKitLibrariesDir)\Include\CoreFoundation\OSXCompatibilityHeaders\GNUCompatibility&quot;;&quot;$(ProjectDir)\..&quot;;&quot;$(ProjectDir)&quot;;&quot;$(ProjectDir)\..\WebCoreSupport&quot;;&quot;$(IntDir)\include&quot;;&quot;$(WebKitOutputDir)\obj\WebKit\DerivedSources&quot;"
- PreprocessorDefinitions="_USRDLL;WEBKIT_EXPORTS;ENABLE_DOM_STORAGE;ENABLE_OFFLINE_WEB_APPLICATIONS;ENABLE_SVG;ENABLE_XSLT;ENABLE_XPATH;FRAMEWORK_NAME=WebKit"
+ PreprocessorDefinitions="_USRDLL;WEBKIT_EXPORTS;FRAMEWORK_NAME=WebKit;ENABLE_DATABASE;ENABLE_DOM_STORAGE;ENABLE_ICONDATABASE;ENABLE_OFFLINE_WEB_APPLICATIONS;ENABLE_SVG;ENABLE_SVG_ANIMATION;ENABLE_SVG_AS_IMAGE;ENABLE_SVG_FONTS;ENABLE_SVG_FOREIGN_OBJECT;ENABLE_SVG_USE;ENABLE_WORKERS;ENABLE_XPATH;ENABLE_XSLT"
UsePrecompiledHeader="2"
PrecompiledHeaderThrough="WebKitPrefix.h"
ForcedIncludeFiles="WebKitPrefix.h"
@@ -287,17 +287,18 @@
/>
<Tool
Name="VCLinkerTool"
- AdditionalDependencies="delayimp.lib kernel32.lib user32.lib gdi32.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib usp10.lib comctl32.lib version.lib shlwapi.lib libxml2$(LibraryConfigSuffix).lib libxslt$(LibraryConfigSuffix).lib icuin$(LibraryConfigSuffix).lib icuuc$(LibraryConfigSuffix).lib SQLite3$(LibraryConfigSuffix).lib pthreadVC2$(LibraryConfigSuffix).lib CoreFoundation$(LibraryConfigSuffix).lib CoreGraphics.lib CFNetwork$(LibraryConfigSuffix).lib JavaScriptCore$(WebKitConfigSuffix).lib WebKitGUID$(WebKitConfigSuffix).lib WebCore$(WebKitConfigSuffix).lib WTF$(WebKitConfigSuffix).lib WebKitSystemInterface$(WebKitConfigSuffix).lib msimg32.lib QTMovieWin$(WebKitConfigSuffix).lib crypt32.lib cairo.lib giflib.lib jpeg.lib libpng.lib libcurl_imp.lib ws2_32.lib wininet.lib Wldap32.lib iphlpapi.lib"
+ AdditionalDependencies="delayimp.lib kernel32.lib user32.lib gdi32.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib usp10.lib comctl32.lib version.lib shlwapi.lib libxml2$(LibraryConfigSuffix).lib libxslt$(LibraryConfigSuffix).lib icuin$(LibraryConfigSuffix).lib icuuc$(LibraryConfigSuffix).lib SQLite3$(LibraryConfigSuffix).lib pthreadVC2$(LibraryConfigSuffix).lib CFLite_Debug.lib JavaScriptCore$(WebKitConfigSuffix).lib WebKitGUID$(WebKitConfigSuffix).lib WebCore$(WebKitConfigSuffix).lib WTF$(WebKitConfigSuffix).lib msimg32.lib crypt32.lib cairo.lib giflib.lib jpeg.lib libpng.lib libcurl_imp.lib ws2_32.lib wininet.lib Wldap32.lib iphlpapi.lib"
OutputFile="$(OutDir)\$(ProjectName)$(WebKitDLLConfigSuffix).dll"
AdditionalLibraryDirectories=""
- ModuleDefinitionFile="WebKit$(WebKitDLLConfigSuffix).def"
- DelayLoadDLLs="comdlg32.dll;usp10.dll;comctl32.dll;version.dll;libxslt$(LibraryConfigSuffix).dll;SQLite3$(LibraryConfigSuffix).dll;msimg32.dll;QTMovieWin$(WebKitConfigSuffix).dll;iphlpapi.dll"
+ ModuleDefinitionFile="WebKit_Cairo$(WebKitDLLConfigSuffix).def"
+ DelayLoadDLLs="comdlg32.dll;usp10.dll;comctl32.dll;version.dll;libxslt$(LibraryConfigSuffix).dll;SQLite3$(LibraryConfigSuffix).dll;msimg32.dll;iphlpapi.dll"
/>
<Tool
Name="VCALinkTool"
/>
<Tool
Name="VCManifestTool"
+ VerboseOutput="false"
/>
<Tool
Name="VCXDCMakeTool"
@@ -347,7 +348,7 @@
<Tool
Name="VCCLCompilerTool"
AdditionalIncludeDirectories="&quot;$(WebKitOutputDir)\include\WebKit&quot;;&quot;$(WebKitOutputDir)\Include&quot;;&quot;$(WebKitLibrariesDir)\Include&quot;;&quot;$(WebKitOutputDir)\Include\WebCore&quot;;&quot;$(WebKitLibrariesDir)\Include\WebCore&quot;;&quot;$(WebKitOutputDir)\Include\WebCore\ForwardingHeaders&quot;;&quot;$(WebKitLibrariesDir)\Include\WebCore\ForwardingHeaders&quot;;&quot;$(WebKitOutputDir)\Include\JavaScriptCore&quot;;&quot;$(WebKitLibrariesDir)\Include\JavaScriptCore&quot;;&quot;$(WebKitOutputDir)\Include\icu&quot;;&quot;$(WebKitLibrariesDir)\Include\icu&quot;;&quot;$(WebKitLibrariesDir)\include\pthreads&quot;;&quot;$(WebKitOutputDir)\Include\CoreFoundation\OSXCompatibilityHeaders&quot;;&quot;$(WebKitLibrariesDir)\Include\CoreFoundation\OSXCompatibilityHeaders&quot;;&quot;$(WebKitOutputDir)\Include\CoreFoundation\OSXCompatibilityHeaders\GNUCompatibility&quot;;&quot;$(WebKitLibrariesDir)\Include\CoreFoundation\OSXCompatibilityHeaders\GNUCompatibility&quot;;&quot;$(ProjectDir)\..&quot;;&quot;$(ProjectDir)&quot;;&quot;$(ProjectDir)\..\WebCoreSupport&quot;;&quot;$(IntDir)\include&quot;;&quot;$(WebKitOutputDir)\obj\WebKit\DerivedSources&quot;"
- PreprocessorDefinitions="_USRDLL;WEBKIT_EXPORTS;ENABLE_DOM_STORAGE;ENABLE_OFFLINE_WEB_APPLICATIONS;ENABLE_SVG;ENABLE_XSLT;ENABLE_XPATH;FRAMEWORK_NAME=WebKit"
+ PreprocessorDefinitions="_USRDLL;WEBKIT_EXPORTS;FRAMEWORK_NAME=WebKit;ENABLE_DATABASE;ENABLE_DOM_STORAGE;ENABLE_ICONDATABASE;ENABLE_OFFLINE_WEB_APPLICATIONS;ENABLE_SVG;ENABLE_SVG_ANIMATION;ENABLE_SVG_AS_IMAGE;ENABLE_SVG_FONTS;ENABLE_SVG_FOREIGN_OBJECT;ENABLE_SVG_USE;ENABLE_WORKERS;ENABLE_XPATH;ENABLE_XSLT"
UsePrecompiledHeader="2"
PrecompiledHeaderThrough="WebKitPrefix.h"
ForcedIncludeFiles="WebKitPrefix.h"
@@ -365,11 +366,11 @@
/>
<Tool
Name="VCLinkerTool"
- AdditionalDependencies="delayimp.lib kernel32.lib user32.lib gdi32.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib usp10.lib comctl32.lib version.lib shlwapi.lib libxml2$(LibraryConfigSuffix).lib libxslt$(LibraryConfigSuffix).lib icuin$(LibraryConfigSuffix).lib icuuc$(LibraryConfigSuffix).lib SQLite3$(LibraryConfigSuffix).lib pthreadVC2$(LibraryConfigSuffix).lib CoreFoundation$(LibraryConfigSuffix).lib CFNetwork$(LibraryConfigSuffix).lib CoreGraphics$(LibraryConfigSuffix).lib JavaScriptCore$(WebKitConfigSuffix).lib WebKitGUID$(WebKitConfigSuffix).lib WebCore$(WebKitConfigSuffix).lib WTF$(WebKitConfigSuffix).lib WebKitSystemInterface$(WebKitConfigSuffix).lib msimg32.lib QTMovieWin$(WebKitConfigSuffix).lib crypt32.lib cairo.lib giflib.lib jpeg.lib libpng.lib libcurl_imp.lib ws2_32.lib wininet.lib Wldap32.lib iphlpapi.lib"
+ AdditionalDependencies="delayimp.lib kernel32.lib user32.lib gdi32.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib usp10.lib comctl32.lib version.lib shlwapi.lib libxml2$(LibraryConfigSuffix).lib libxslt$(LibraryConfigSuffix).lib icuin$(LibraryConfigSuffix).lib icuuc$(LibraryConfigSuffix).lib SQLite3$(LibraryConfigSuffix).lib pthreadVC2$(LibraryConfigSuffix).lib CFLite.lib JavaScriptCore$(WebKitConfigSuffix).lib WebKitGUID$(WebKitConfigSuffix).lib WebCore$(WebKitConfigSuffix).lib WTF$(WebKitConfigSuffix).lib msimg32.lib crypt32.lib cairo.lib giflib.lib jpeg.lib libpng.lib libcurl_imp.lib ws2_32.lib wininet.lib Wldap32.lib iphlpapi.lib"
OutputFile="$(OutDir)\$(ProjectName)$(WebKitDLLConfigSuffix).dll"
AdditionalLibraryDirectories=""
- ModuleDefinitionFile="WebKit$(WebKitDLLConfigSuffix).def"
- DelayLoadDLLs="comdlg32.dll;usp10.dll;comctl32.dll;version.dll;libxslt$(LibraryConfigSuffix).dll;SQLite3$(LibraryConfigSuffix).dll;msimg32.dll;QTMovieWin$(WebKitConfigSuffix).dll;iphlpapi.dll"
+ ModuleDefinitionFile="WebKit_Cairo$(WebKitDLLConfigSuffix).def"
+ DelayLoadDLLs="comdlg32.dll;usp10.dll;comctl32.dll;version.dll;libxslt$(LibraryConfigSuffix).dll;SQLite3$(LibraryConfigSuffix).dll;msimg32.dll;iphlpapi.dll"
/>
<Tool
Name="VCALinkTool"
@@ -425,7 +426,7 @@
Name="VCCLCompilerTool"
WholeProgramOptimization="false"
AdditionalIncludeDirectories="&quot;$(WebKitOutputDir)\include\WebKit&quot;;&quot;$(WebKitOutputDir)\Include&quot;;&quot;$(WebKitLibrariesDir)\Include&quot;;&quot;$(WebKitOutputDir)\Include\WebCore&quot;;&quot;$(WebKitLibrariesDir)\Include\WebCore&quot;;&quot;$(WebKitOutputDir)\Include\WebCore\ForwardingHeaders&quot;;&quot;$(WebKitLibrariesDir)\Include\WebCore\ForwardingHeaders&quot;;&quot;$(WebKitOutputDir)\Include\JavaScriptCore&quot;;&quot;$(WebKitLibrariesDir)\Include\JavaScriptCore&quot;;&quot;$(WebKitOutputDir)\Include\icu&quot;;&quot;$(WebKitLibrariesDir)\Include\icu&quot;;&quot;$(WebKitLibrariesDir)\include\pthreads&quot;;&quot;$(WebKitOutputDir)\Include\CoreFoundation\OSXCompatibilityHeaders&quot;;&quot;$(WebKitLibrariesDir)\Include\CoreFoundation\OSXCompatibilityHeaders&quot;;&quot;$(WebKitOutputDir)\Include\CoreFoundation\OSXCompatibilityHeaders\GNUCompatibility&quot;;&quot;$(WebKitLibrariesDir)\Include\CoreFoundation\OSXCompatibilityHeaders\GNUCompatibility&quot;;&quot;$(ProjectDir)\..&quot;;&quot;$(ProjectDir)&quot;;&quot;$(ProjectDir)\..\WebCoreSupport&quot;;&quot;$(IntDir)\include&quot;;&quot;$(WebKitOutputDir)\obj\WebKit\DerivedSources&quot;"
- PreprocessorDefinitions="_USRDLL;WEBKIT_EXPORTS;ENABLE_DOM_STORAGE;ENABLE_OFFLINE_WEB_APPLICATIONS;ENABLE_SVG;ENABLE_XSLT;ENABLE_XPATH;FRAMEWORK_NAME=WebKit"
+ PreprocessorDefinitions="_USRDLL;WEBKIT_EXPORTS;FRAMEWORK_NAME=WebKit;ENABLE_DATABASE;ENABLE_DOM_STORAGE;ENABLE_ICONDATABASE;ENABLE_OFFLINE_WEB_APPLICATIONS;ENABLE_SVG;ENABLE_SVG_ANIMATION;ENABLE_SVG_AS_IMAGE;ENABLE_SVG_FONTS;ENABLE_SVG_FOREIGN_OBJECT;ENABLE_SVG_USE;ENABLE_VIDEO;ENABLE_WORKERS;ENABLE_XPATH;ENABLE_XSLT"
UsePrecompiledHeader="2"
PrecompiledHeaderThrough="WebKitPrefix.h"
ForcedIncludeFiles="WebKitPrefix.h"
@@ -504,7 +505,7 @@
Name="VCCLCompilerTool"
WholeProgramOptimization="false"
AdditionalIncludeDirectories="&quot;$(WebKitOutputDir)\include\WebKit&quot;;&quot;$(WebKitOutputDir)\Include&quot;;&quot;$(WebKitLibrariesDir)\Include&quot;;&quot;$(WebKitOutputDir)\Include\WebCore&quot;;&quot;$(WebKitLibrariesDir)\Include\WebCore&quot;;&quot;$(WebKitOutputDir)\Include\WebCore\ForwardingHeaders&quot;;&quot;$(WebKitLibrariesDir)\Include\WebCore\ForwardingHeaders&quot;;&quot;$(WebKitOutputDir)\Include\JavaScriptCore&quot;;&quot;$(WebKitLibrariesDir)\Include\JavaScriptCore&quot;;&quot;$(WebKitOutputDir)\Include\icu&quot;;&quot;$(WebKitLibrariesDir)\Include\icu&quot;;&quot;$(WebKitLibrariesDir)\include\pthreads&quot;;&quot;$(WebKitOutputDir)\Include\CoreFoundation\OSXCompatibilityHeaders&quot;;&quot;$(WebKitLibrariesDir)\Include\CoreFoundation\OSXCompatibilityHeaders&quot;;&quot;$(WebKitOutputDir)\Include\CoreFoundation\OSXCompatibilityHeaders\GNUCompatibility&quot;;&quot;$(WebKitLibrariesDir)\Include\CoreFoundation\OSXCompatibilityHeaders\GNUCompatibility&quot;;&quot;$(ProjectDir)\..&quot;;&quot;$(ProjectDir)&quot;;&quot;$(ProjectDir)\..\WebCoreSupport&quot;;&quot;$(IntDir)\include&quot;;&quot;$(WebKitOutputDir)\obj\WebKit\DerivedSources&quot;"
- PreprocessorDefinitions="_USRDLL;WEBKIT_EXPORTS;ENABLE_DOM_STORAGE;ENABLE_OFFLINE_WEB_APPLICATIONS;ENABLE_SVG;ENABLE_XSLT;ENABLE_XPATH;FRAMEWORK_NAME=WebKit"
+ PreprocessorDefinitions="_USRDLL;WEBKIT_EXPORTS;FRAMEWORK_NAME=WebKit;ENABLE_DATABASE;ENABLE_DOM_STORAGE;ENABLE_ICONDATABASE;ENABLE_OFFLINE_WEB_APPLICATIONS;ENABLE_SVG;ENABLE_SVG_ANIMATION;ENABLE_SVG_AS_IMAGE;ENABLE_SVG_FONTS;ENABLE_SVG_FOREIGN_OBJECT;ENABLE_SVG_USE;ENABLE_VIDEO;ENABLE_WORKERS;ENABLE_XPATH;ENABLE_XSLT"
UsePrecompiledHeader="2"
PrecompiledHeaderThrough="WebKitPrefix.h"
ForcedIncludeFiles="WebKitPrefix.h"
@@ -687,7 +688,7 @@
>
</File>
<File
- RelativePath="..\WebCachedPagePlatformData.h"
+ RelativePath="..\WebCachedFramePlatformData.h"
>
</File>
<File
@@ -773,6 +774,22 @@
<File
RelativePath="..\WebKitGraphics.h"
>
+ <FileConfiguration
+ Name="Debug_Cairo|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release_Cairo|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="..\WebKitLogging.h"
@@ -793,6 +810,22 @@
<File
RelativePath="..\WebLocalizableStrings.h"
>
+ <FileConfiguration
+ Name="Debug_Cairo|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release_Cairo|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="..\WebMutableURLRequest.h"
@@ -939,6 +972,70 @@
>
</File>
<File
+ RelativePath="..\WebCookieManagerCFNet.cpp"
+ >
+ <FileConfiguration
+ Name="Debug_Cairo|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release_Cairo|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
+ </File>
+ <File
+ RelativePath="..\WebCookieManagerCurl.cpp"
+ >
+ <FileConfiguration
+ Name="Debug|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug_Internal|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release_PGOInstrument|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release_PGOOptimize|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
+ </File>
+ <File
RelativePath="..\WebCoreStatistics.cpp"
>
</File>
@@ -959,6 +1056,70 @@
>
</File>
<File
+ RelativePath="..\WebDownloadCFNet.cpp"
+ >
+ <FileConfiguration
+ Name="Debug_Cairo|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release_Cairo|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
+ </File>
+ <File
+ RelativePath="..\WebDownloadCurl.cpp"
+ >
+ <FileConfiguration
+ Name="Debug|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug_Internal|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release_PGOInstrument|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release_PGOOptimize|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
+ </File>
+ <File
RelativePath="..\WebDropSource.cpp"
>
</File>
@@ -1067,6 +1228,70 @@
>
</File>
<File
+ RelativePath="..\WebURLAuthenticationChallengeSenderCFNet.cpp"
+ >
+ <FileConfiguration
+ Name="Debug_Cairo|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release_Cairo|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
+ </File>
+ <File
+ RelativePath="..\WebURLAuthenticationChallengeSenderCurl.cpp"
+ >
+ <FileConfiguration
+ Name="Debug|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug_Internal|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release_PGOInstrument|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release_PGOOptimize|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
+ </File>
+ <File
RelativePath="..\WebURLCredential.cpp"
>
</File>
@@ -1095,6 +1320,22 @@
>
</File>
<File
+ RelativePath=".\searchCancel.png"
+ >
+ </File>
+ <File
+ RelativePath=".\searchCancelPressed.png"
+ >
+ </File>
+ <File
+ RelativePath=".\searchMagnifier.png"
+ >
+ </File>
+ <File
+ RelativePath=".\searchMagnifierResults.png"
+ >
+ </File>
+ <File
RelativePath=".\textAreaResizeCorner.png"
>
</File>
@@ -1185,10 +1426,34 @@
<File
RelativePath="..\WebKitGraphics.cpp"
>
+ <FileConfiguration
+ Name="Debug_Cairo|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release_Cairo|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="..\WebLocalizableStrings.cpp"
>
+ <FileConfiguration
+ Name="Release_Cairo|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
</Filter>
<Filter
diff --git a/WebKit/win/WebKit.vcproj/WebKit_Cairo.def b/WebKit/win/WebKit.vcproj/WebKit_Cairo.def
new file mode 100755
index 0000000..50b3675
--- /dev/null
+++ b/WebKit/win/WebKit.vcproj/WebKit_Cairo.def
@@ -0,0 +1,127 @@
+LIBRARY "WebKit"
+
+EXPORTS
+ DllGetClassObject PRIVATE
+ DllCanUnloadNow PRIVATE
+ DllRegisterServer PRIVATE
+ DllUnregisterServer PRIVATE
+ RunAsLocalServer PRIVATE
+ LocalServerDidDie PRIVATE
+ JSCheckScriptSyntax
+ JSClassCreate
+ JSClassRelease
+ JSClassRetain
+ JSContextGetGlobalObject
+ JSEvaluateScript
+ JSGarbageCollect
+ JSGlobalContextCreate
+ JSGlobalContextRelease
+ JSGlobalContextRetain
+ JSObjectCallAsConstructor
+ JSObjectCallAsFunction
+ JSObjectCopyPropertyNames
+ JSObjectDeleteProperty
+ JSObjectGetPrivate
+ JSObjectGetProperty
+ JSObjectGetPropertyAtIndex
+ JSObjectGetPrototype
+ JSObjectHasProperty
+ JSObjectIsConstructor
+ JSObjectIsFunction
+ JSObjectMake
+ JSObjectMakeArray
+ JSObjectMakeConstructor
+ JSObjectMakeDate
+ JSObjectMakeFunction
+ JSObjectMakeFunctionWithCallback
+ JSObjectMakeRegExp
+ JSObjectSetPrivate
+ JSObjectSetProperty
+ JSObjectSetPropertyAtIndex
+ JSObjectSetPrototype
+ JSPropertyNameAccumulatorAddName
+ JSPropertyNameArrayGetCount
+ JSPropertyNameArrayGetNameAtIndex
+ JSPropertyNameArrayRelease
+ JSPropertyNameArrayRetain
+ JSStringCopyBSTR
+ JSStringCopyCFString
+ JSStringCreateWithBSTR
+ JSStringCreateWithCFString
+ JSStringCreateWithCharacters
+ JSStringCreateWithUTF8CString
+ JSStringGetCharactersPtr
+ JSStringGetLength
+ JSStringGetMaximumUTF8CStringSize
+ JSStringGetUTF8CString
+ JSStringIsEqual
+ JSStringIsEqualToUTF8CString
+ JSStringRelease
+ JSStringRetain
+ JSValueGetType
+ JSValueIsBoolean
+ JSValueIsEqual
+ JSValueIsInstanceOfConstructor
+ JSValueIsNull
+ JSValueIsNumber
+ JSValueIsObject
+ JSValueIsObjectOfClass
+ JSValueIsStrictEqual
+ JSValueIsString
+ JSValueIsUndefined
+ JSValueMakeBoolean
+ JSValueMakeNull
+ JSValueMakeNumber
+ JSValueMakeString
+ JSValueMakeUndefined
+ JSValueProtect
+ JSValueToBoolean
+ JSValueToNumber
+ JSValueToObject
+ JSValueToStringCopy
+ JSValueUnprotect
+; KJS_JSCreateNativeJSObject
+; KJS_JSObject_JSFinalize
+; KJS_JSObject_JSObjectCall
+; KJS_JSObject_JSObjectEval
+; KJS_JSObject_JSObjectGetMember
+; KJS_JSObject_JSObjectGetSlot
+; KJS_JSObject_JSObjectRemoveMember
+; KJS_JSObject_JSObjectSetMember
+; KJS_JSObject_JSObjectSetSlot
+; KJS_JSObject_JSObjectToString
+ setUseOpenSourceWebKit
+ shutDownWebKit
+ progIDForClass
+ WebLocalizedStringUTF8
+ WebLocalizedLPCTSTRUTF8
+ ?fastMalloc@WTF@@YAPAXI@Z
+ ?fastZeroedMalloc@WTF@@YAPAXI@Z
+ ?fastFree@WTF@@YAXPAX@Z
+ ?fastCalloc@WTF@@YAPAXII@Z
+ ??0Mutex@WTF@@QAE@XZ
+ ??0ThreadCondition@WTF@@QAE@XZ
+ ??1Mutex@WTF@@QAE@XZ
+ ??1ThreadCondition@WTF@@QAE@XZ
+ ?broadcast@ThreadCondition@WTF@@QAEXXZ
+ ?callOnMainThread@WTF@@YAXP6AXPAX@Z0@Z
+ ?createThread@WTF@@YAIP6APAXPAX@Z0PBD@Z
+ ?currentThread@WTF@@YAIXZ
+ ?detachThread@WTF@@YAXI@Z
+ ?initializeMainThread@WTF@@YAXXZ
+ ?initializeThreading@WTF@@YAXXZ
+ ?isMainThread@WTF@@YA_NXZ
+ ?lock@Mutex@WTF@@QAEXXZ
+ ?lockAtomicallyInitializedStaticMutex@WTF@@YAXXZ
+ ?signal@ThreadCondition@WTF@@QAEXXZ
+ ?tryLock@Mutex@WTF@@QAE_NXZ
+ ?unlock@Mutex@WTF@@QAEXXZ
+ ?unlockAtomicallyInitializedStaticMutex@WTF@@YAXXZ
+ ?wait@ThreadCondition@WTF@@QAEXAAVMutex@2@@Z
+ ?waitForThreadCompletion@WTF@@YAHIPAPAX@Z
+
+ ; These functions are deprecated
+ WebLocalizedString
+ WebLocalizedLPCTSTR
+ SetWebLocalizedStringMainBundle
+ ?createThread@WTF@@YAIP6APAXPAX@Z0@Z
diff --git a/WebKit/win/WebKit.vcproj/WebKit_Cairo_debug.def b/WebKit/win/WebKit.vcproj/WebKit_Cairo_debug.def
new file mode 100755
index 0000000..a53f027
--- /dev/null
+++ b/WebKit/win/WebKit.vcproj/WebKit_Cairo_debug.def
@@ -0,0 +1,133 @@
+LIBRARY "WebKit_debug"
+
+EXPORTS
+ DllGetClassObject PRIVATE
+ DllCanUnloadNow PRIVATE
+ DllRegisterServer PRIVATE
+ DllUnregisterServer PRIVATE
+ RunAsLocalServer PRIVATE
+ LocalServerDidDie PRIVATE
+ JSCheckScriptSyntax
+ JSClassCreate
+ JSClassRelease
+ JSClassRetain
+ JSContextGetGlobalObject
+ JSEvaluateScript
+ JSGarbageCollect
+ JSGlobalContextCreate
+ JSGlobalContextRelease
+ JSGlobalContextRetain
+ JSObjectCallAsConstructor
+ JSObjectCallAsFunction
+ JSObjectCopyPropertyNames
+ JSObjectDeleteProperty
+ JSObjectGetPrivate
+ JSObjectGetProperty
+ JSObjectGetPropertyAtIndex
+ JSObjectGetPrototype
+ JSObjectHasProperty
+ JSObjectIsConstructor
+ JSObjectIsFunction
+ JSObjectMake
+ JSObjectMakeArray
+ JSObjectMakeConstructor
+ JSObjectMakeDate
+ JSObjectMakeFunction
+ JSObjectMakeFunctionWithCallback
+ JSObjectMakeRegExp
+ JSObjectSetPrivate
+ JSObjectSetProperty
+ JSObjectSetPropertyAtIndex
+ JSObjectSetPrototype
+ JSPropertyNameAccumulatorAddName
+ JSPropertyNameArrayGetCount
+ JSPropertyNameArrayGetNameAtIndex
+ JSPropertyNameArrayRelease
+ JSPropertyNameArrayRetain
+ JSStringCopyBSTR
+ JSStringCopyCFString
+ JSStringCreateWithBSTR
+ JSStringCreateWithCFString
+ JSStringCreateWithCharacters
+ JSStringCreateWithUTF8CString
+ JSStringGetCharactersPtr
+ JSStringGetLength
+ JSStringGetMaximumUTF8CStringSize
+ JSStringGetUTF8CString
+ JSStringIsEqual
+ JSStringIsEqualToUTF8CString
+ JSStringRelease
+ JSStringRetain
+ JSValueGetType
+ JSValueIsBoolean
+ JSValueIsEqual
+ JSValueIsInstanceOfConstructor
+ JSValueIsNull
+ JSValueIsNumber
+ JSValueIsObject
+ JSValueIsObjectOfClass
+ JSValueIsStrictEqual
+ JSValueIsString
+ JSValueIsUndefined
+ JSValueMakeBoolean
+ JSValueMakeNull
+ JSValueMakeNumber
+ JSValueMakeString
+ JSValueMakeUndefined
+ JSValueProtect
+ JSValueToBoolean
+ JSValueToNumber
+ JSValueToObject
+ JSValueToStringCopy
+ JSValueUnprotect
+; KJS_JSCreateNativeJSObject
+; KJS_JSObject_JSFinalize
+; KJS_JSObject_JSObjectCall
+; KJS_JSObject_JSObjectEval
+; KJS_JSObject_JSObjectGetMember
+; KJS_JSObject_JSObjectGetSlot
+; KJS_JSObject_JSObjectRemoveMember
+; KJS_JSObject_JSObjectSetMember
+; KJS_JSObject_JSObjectSetSlot
+; KJS_JSObject_JSObjectToString
+ setUseOpenSourceWebKit
+ shutDownWebKit
+ progIDForClass
+ WebLocalizedStringUTF8
+ WebLocalizedLPCTSTRUTF8
+ WebDrawText
+ ?fastMalloc@WTF@@YAPAXI@Z
+ ?fastZeroedMalloc@WTF@@YAPAXI@Z
+ ?fastFree@WTF@@YAXPAX@Z
+ ?fastCalloc@WTF@@YAPAXII@Z
+ ??0Mutex@WTF@@QAE@XZ
+ ??0ThreadCondition@WTF@@QAE@XZ
+ ??1Mutex@WTF@@QAE@XZ
+ ??1ThreadCondition@WTF@@QAE@XZ
+ ?broadcast@ThreadCondition@WTF@@QAEXXZ
+ ?callOnMainThread@WTF@@YAXP6AXPAX@Z0@Z
+ ?createThread@WTF@@YAIP6APAXPAX@Z0PBD@Z
+ ?currentThread@WTF@@YAIXZ
+ ?detachThread@WTF@@YAXI@Z
+ ?initializeMainThread@WTF@@YAXXZ
+ ?initializeThreading@WTF@@YAXXZ
+ ?isMainThread@WTF@@YA_NXZ
+ ?lock@Mutex@WTF@@QAEXXZ
+ ?lockAtomicallyInitializedStaticMutex@WTF@@YAXXZ
+ ?signal@ThreadCondition@WTF@@QAEXXZ
+ ?tryLock@Mutex@WTF@@QAE_NXZ
+ ?unlock@Mutex@WTF@@QAEXXZ
+ ?unlockAtomicallyInitializedStaticMutex@WTF@@YAXXZ
+ ?wait@ThreadCondition@WTF@@QAEXAAVMutex@2@@Z
+ ?waitForThreadCompletion@WTF@@YAHIPAPAX@Z
+ WTFLog
+ WTFReportArgumentAssertionFailure
+ WTFReportAssertionFailure
+ WTFReportAssertionFailureWithMessage
+ WTFReportError
+
+ ; These functions are deprecated
+ WebLocalizedString
+ WebLocalizedLPCTSTR
+ SetWebLocalizedStringMainBundle
+ ?createThread@WTF@@YAIP6APAXPAX@Z0@Z
diff --git a/WebKit/win/WebKit.vcproj/WebKit_debug.def b/WebKit/win/WebKit.vcproj/WebKit_debug.def
index d4fb488..6ed6a90 100644
--- a/WebKit/win/WebKit.vcproj/WebKit_debug.def
+++ b/WebKit/win/WebKit.vcproj/WebKit_debug.def
@@ -29,10 +29,12 @@ EXPORTS
JSObjectIsConstructor
JSObjectIsFunction
JSObjectMake
+ JSObjectMakeArray
JSObjectMakeConstructor
- JSObjectMakeFunction
+ JSObjectMakeDate
JSObjectMakeFunction
JSObjectMakeFunctionWithCallback
+ JSObjectMakeRegExp
JSObjectSetPrivate
JSObjectSetProperty
JSObjectSetPropertyAtIndex
diff --git a/WebKit/win/WebKit.vcproj/resource.h b/WebKit/win/WebKit.vcproj/resource.h
index 134e215..028cb3c 100644
--- a/WebKit/win/WebKit.vcproj/resource.h
+++ b/WebKit/win/WebKit.vcproj/resource.h
@@ -19,6 +19,10 @@
#define IDR_PAN_SOUTH_WEST_CURSOR 15
#define IDR_PAN_NORTH_EAST_CURSOR 16
#define IDR_PAN_NORTH_WEST_CURSOR 17
+#define IDR_SEARCH_CANCEL 18
+#define IDR_SEARCH_CANCEL_PRESSED 19
+#define IDR_SEARCH_MAGNIFIER 20
+#define IDR_SEARCH_MAGNIFIER_RESULTS 21
#define IDC_STATIC -1
#define BUILD_NUMBER 1
@@ -27,7 +31,7 @@
//
#ifdef APSTUDIO_INVOKED
#ifndef APSTUDIO_READONLY_SYMBOLS
-#define _APS_NEXT_RESOURCE_VALUE 18
+#define _APS_NEXT_RESOURCE_VALUE 22
#define _APS_NEXT_COMMAND_VALUE 40001
#define _APS_NEXT_CONTROL_VALUE 1000
#define _APS_NEXT_SYMED_VALUE 101
diff --git a/WebKit/win/WebKit.vcproj/searchCancel.png b/WebKit/win/WebKit.vcproj/searchCancel.png
new file mode 100644
index 0000000..49f3f47
--- /dev/null
+++ b/WebKit/win/WebKit.vcproj/searchCancel.png
Binary files differ
diff --git a/WebKit/win/WebKit.vcproj/searchCancelPressed.png b/WebKit/win/WebKit.vcproj/searchCancelPressed.png
new file mode 100644
index 0000000..b699d81
--- /dev/null
+++ b/WebKit/win/WebKit.vcproj/searchCancelPressed.png
Binary files differ
diff --git a/WebKit/win/WebKit.vcproj/searchMagnifier.png b/WebKit/win/WebKit.vcproj/searchMagnifier.png
new file mode 100644
index 0000000..f9b8cae
--- /dev/null
+++ b/WebKit/win/WebKit.vcproj/searchMagnifier.png
Binary files differ
diff --git a/WebKit/win/WebKit.vcproj/searchMagnifierResults.png b/WebKit/win/WebKit.vcproj/searchMagnifierResults.png
new file mode 100644
index 0000000..9aa1b36
--- /dev/null
+++ b/WebKit/win/WebKit.vcproj/searchMagnifierResults.png
Binary files differ
diff --git a/WebKit/win/WebKitClassFactory.cpp b/WebKit/win/WebKitClassFactory.cpp
index 0da303a..112dabe 100644
--- a/WebKit/win/WebKitClassFactory.cpp
+++ b/WebKit/win/WebKitClassFactory.cpp
@@ -54,6 +54,7 @@
#include "WebScriptDebugServer.h"
#include "WebView.h"
#pragma warning(push, 0)
+#include <JavaScriptCore/InitializeThreading.h>
#include <WebCore/FontDatabase.h>
#include <WebCore/SoftLinking.h>
#pragma warning(pop)
@@ -82,6 +83,7 @@ WebKitClassFactory::WebKitClassFactory(CLSID targetClass)
}
#endif
+ JSC::initializeThreading();
WebCore::populateFontDatabase();
gClassCount++;
diff --git a/WebKit/win/WebKitDLL.cpp b/WebKit/win/WebKitDLL.cpp
index eab96b9..2df3584 100644
--- a/WebKit/win/WebKitDLL.cpp
+++ b/WebKit/win/WebKitDLL.cpp
@@ -167,6 +167,14 @@ PassRefPtr<WebCore::SharedBuffer> loadResourceIntoBuffer(const char* name)
idr = IDR_PAN_NORTH_EAST_CURSOR;
else if (!strcmp(name, "panNorthWestCursor"))
idr = IDR_PAN_NORTH_WEST_CURSOR;
+ else if (!strcmp(name, "searchMagnifier"))
+ idr = IDR_SEARCH_MAGNIFIER;
+ else if (!strcmp(name, "searchMagnifierResults"))
+ idr = IDR_SEARCH_MAGNIFIER_RESULTS;
+ else if (!strcmp(name, "searchCancel"))
+ idr = IDR_SEARCH_CANCEL;
+ else if (!strcmp(name, "searchCancelPressed"))
+ idr = IDR_SEARCH_CANCEL_PRESSED;
else if (!strcmp(name, "zoomInCursor"))
idr = IDR_ZOOM_IN_CURSOR;
else if (!strcmp(name, "zoomOutCursor"))
diff --git a/WebKit/win/WebKitPrefix.cpp b/WebKit/win/WebKitPrefix.cpp
index e82b88d..193e9f6 100644
--- a/WebKit/win/WebKitPrefix.cpp
+++ b/WebKit/win/WebKitPrefix.cpp
@@ -27,3 +27,4 @@
*/
#include "WebKitPrefix.h"
+
diff --git a/WebKit/win/WebMutableURLRequest.cpp b/WebKit/win/WebMutableURLRequest.cpp
index c4e034e..63a060e 100644
--- a/WebKit/win/WebMutableURLRequest.cpp
+++ b/WebKit/win/WebMutableURLRequest.cpp
@@ -35,9 +35,12 @@
#include <WebCore/BString.h>
#include <WebCore/CString.h>
#include <WebCore/FormData.h>
+#include <WebCore/NotImplemented.h>
#include <WebCore/ResourceHandle.h>
#pragma warning(pop)
+#include <wtf/RetainPtr.h>
+
using namespace WebCore;
// IWebURLRequest ----------------------------------------------------------------
@@ -367,9 +370,15 @@ HRESULT STDMETHODCALLTYPE WebMutableURLRequest::mutableCopy(
{
if (!result)
return E_POINTER;
+
+#if USE(CFNETWORK)
RetainPtr<CFMutableURLRequestRef> mutableRequest(AdoptCF, CFURLRequestCreateMutableCopy(kCFAllocatorDefault, m_request.cfURLRequest()));
*result = createInstance(ResourceRequest(mutableRequest.get()));
return S_OK;
+#else
+ notImplemented();
+ return E_NOTIMPL;
+#endif
}
// IWebMutableURLRequest ----------------------------------------------------
diff --git a/WebKit/win/WebPreferenceKeysPrivate.h b/WebKit/win/WebPreferenceKeysPrivate.h
index 6f3dacd..758254e 100644
--- a/WebKit/win/WebPreferenceKeysPrivate.h
+++ b/WebKit/win/WebPreferenceKeysPrivate.h
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2005, 2006, 2007, 2008 Apple Inc. All rights reserved.
+ * Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
@@ -49,6 +49,8 @@
#define WebKitJavaScriptEnabledPreferenceKey "WebKitJavaScriptEnabled"
#define WebKitJavaScriptCanOpenWindowsAutomaticallyPreferenceKey "WebKitJavaScriptCanOpenWindowsAutomatically"
#define WebKitPluginsEnabledPreferenceKey "WebKitPluginsEnabled"
+#define WebKitDatabasesEnabledPreferenceKey "WebKitDatabasesEnabled"
+#define WebKitLocalStorageEnabledPreferenceKey "WebKitLocalStorageEnabled"
#define WebKitAllowAnimatedImagesPreferenceKey "WebKitAllowAnimatedImagesPreferenceKey"
#define WebKitAllowAnimatedImageLoopingPreferenceKey "WebKitAllowAnimatedImageLoopingPreferenceKey"
#define WebKitDisplayImagesKey "WebKitDisplayImagesKey"
@@ -89,6 +91,7 @@
// Windows-specific keys
#define WebKitFontSmoothingTypePreferenceKey "WebKitFontSmoothingType" // default: FontSmoothingTypeMedium (2)
+#define WebKitFontSmoothingContrastPreferenceKey "WebKitFontSmoothingContrast" // default: "2"
#define WebKitCookieStorageAcceptPolicyPreferenceKey "WebKitCookieStorageAcceptPolicy" // default: WebKitCookieStorageAcceptPolicyOnlyFromMainDocumentDomain
#define WebContinuousSpellCheckingEnabledPreferenceKey "WebContinuousSpellCheckingEnabled" // default: false
@@ -116,3 +119,5 @@
#define WebKitPaintNativeControlsPreferenceKey "WebKitPaintNativeControls"
+#define WebKitZoomsTextOnlyPreferenceKey "WebKitZoomsTextOnly"
+
diff --git a/WebKit/win/WebPreferences.cpp b/WebKit/win/WebPreferences.cpp
index 316524a..5fcd319 100644
--- a/WebKit/win/WebPreferences.cpp
+++ b/WebKit/win/WebPreferences.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2006, 2007, 2008 Apple Inc. All rights reserved.
+ * Copyright (C) 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
@@ -42,14 +42,17 @@
#pragma warning( pop )
#include <CoreFoundation/CoreFoundation.h>
-#include <CoreGraphics/CoreGraphics.h>
#include <shlobj.h>
#include <shfolder.h>
#include <tchar.h>
-#include <WebKitSystemInterface/WebKitSystemInterface.h>
#include <wtf/HashMap.h>
#include <wtf/OwnArrayPtr.h>
+#if PLATFORM(CG)
+#include <CoreGraphics/CoreGraphics.h>
+#include <WebKitSystemInterface/WebKitSystemInterface.h>
+#endif
+
using namespace WebCore;
static const String& oldPreferencesPath()
@@ -202,6 +205,8 @@ void WebPreferences::initializeDefaultSettings()
CFDictionaryAddValue(defaults, CFSTR(WebKitJavaScriptEnabledPreferenceKey), kCFBooleanTrue);
CFDictionaryAddValue(defaults, CFSTR(WebKitJavaScriptCanOpenWindowsAutomaticallyPreferenceKey), kCFBooleanTrue);
CFDictionaryAddValue(defaults, CFSTR(WebKitPluginsEnabledPreferenceKey), kCFBooleanTrue);
+ CFDictionaryAddValue(defaults, CFSTR(WebKitDatabasesEnabledPreferenceKey), kCFBooleanTrue);
+ CFDictionaryAddValue(defaults, CFSTR(WebKitLocalStorageEnabledPreferenceKey), kCFBooleanTrue);
CFDictionaryAddValue(defaults, CFSTR(WebKitAllowAnimatedImagesPreferenceKey), kCFBooleanTrue);
CFDictionaryAddValue(defaults, CFSTR(WebKitAllowAnimatedImageLoopingPreferenceKey), kCFBooleanTrue);
CFDictionaryAddValue(defaults, CFSTR(WebKitDisplayImagesKey), kCFBooleanTrue);
@@ -221,6 +226,7 @@ void WebPreferences::initializeDefaultSettings()
CFDictionaryAddValue(defaults, CFSTR(WebKitIconDatabaseLocationKey), CFSTR(""));
CFDictionaryAddValue(defaults, CFSTR(WebKitIconDatabaseEnabledPreferenceKey), kCFBooleanTrue);
CFDictionaryAddValue(defaults, CFSTR(WebKitFontSmoothingTypePreferenceKey), CFSTR("2"));
+ CFDictionaryAddValue(defaults, CFSTR(WebKitFontSmoothingContrastPreferenceKey), CFSTR("2"));
CFDictionaryAddValue(defaults, CFSTR(WebKitCookieStorageAcceptPolicyPreferenceKey), CFSTR("2"));
CFDictionaryAddValue(defaults, CFSTR(WebContinuousSpellCheckingEnabledPreferenceKey), kCFBooleanFalse);
CFDictionaryAddValue(defaults, CFSTR(WebGrammarCheckingEnabledPreferenceKey), kCFBooleanFalse);
@@ -334,6 +340,16 @@ void WebPreferences::setIntegerValue(CFStringRef key, int value)
postPreferencesChangesNotification();
}
+void WebPreferences::setFloatValue(CFStringRef key, float value)
+{
+ if (floatValueForKey(key) == value)
+ return;
+
+ setValueForKey(key, cfNumber(value).get());
+
+ postPreferencesChangesNotification();
+}
+
void WebPreferences::setBoolValue(CFStringRef key, BOOL value)
{
if (boolValueForKey(key) == value)
@@ -963,8 +979,27 @@ HRESULT STDMETHODCALLTYPE WebPreferences::setFontSmoothing(
{
setIntegerValue(CFSTR(WebKitFontSmoothingTypePreferenceKey), smoothingType);
if (smoothingType == FontSmoothingTypeWindows)
- smoothingType = FontSmoothingTypeStandard;
+ smoothingType = FontSmoothingTypeMedium;
+#if PLATFORM(CG)
wkSetFontSmoothingLevel((int)smoothingType);
+#endif
+ return S_OK;
+}
+
+HRESULT STDMETHODCALLTYPE WebPreferences::fontSmoothingContrast(
+ /* [retval][out] */ float* contrast)
+{
+ *contrast = floatValueForKey(CFSTR(WebKitFontSmoothingContrastPreferenceKey));
+ return S_OK;
+}
+
+HRESULT STDMETHODCALLTYPE WebPreferences::setFontSmoothingContrast(
+ /* [in] */ float contrast)
+{
+ setFloatValue(CFSTR(WebKitFontSmoothingContrastPreferenceKey), contrast);
+#if PLATFORM(CG)
+ wkSetFontSmoothingContrast(contrast);
+#endif
return S_OK;
}
@@ -1173,6 +1208,30 @@ HRESULT STDMETHODCALLTYPE WebPreferences::offlineWebApplicationCacheEnabled(BOOL
return S_OK;
}
+HRESULT STDMETHODCALLTYPE WebPreferences::setDatabasesEnabled(BOOL enabled)
+{
+ setBoolValue(CFSTR(WebKitDatabasesEnabledPreferenceKey), enabled);
+ return S_OK;
+}
+
+HRESULT STDMETHODCALLTYPE WebPreferences::databasesEnabled(BOOL* enabled)
+{
+ *enabled = boolValueForKey(CFSTR(WebKitDatabasesEnabledPreferenceKey));
+ return S_OK;
+}
+
+HRESULT STDMETHODCALLTYPE WebPreferences::setLocalStorageEnabled(BOOL enabled)
+{
+ setBoolValue(CFSTR(WebKitLocalStorageEnabledPreferenceKey), enabled);
+ return S_OK;
+}
+
+HRESULT STDMETHODCALLTYPE WebPreferences::localStorageEnabled(BOOL* enabled)
+{
+ *enabled = boolValueForKey(CFSTR(WebKitLocalStorageEnabledPreferenceKey));
+ return S_OK;
+}
+
HRESULT STDMETHODCALLTYPE WebPreferences::localStorageDatabasePath(BSTR* location)
{
*location = stringValueForKey(CFSTR(WebKitLocalStorageDatabasePathPreferenceKey));
@@ -1185,6 +1244,18 @@ HRESULT STDMETHODCALLTYPE WebPreferences::setLocalStorageDatabasePath(BSTR locat
return S_OK;
}
+HRESULT WebPreferences::setZoomsTextOnly(BOOL zoomsTextOnly)
+{
+ setBoolValue(CFSTR(WebKitZoomsTextOnlyPreferenceKey), zoomsTextOnly);
+ return S_OK;
+}
+
+HRESULT WebPreferences::zoomsTextOnly(BOOL* zoomsTextOnly)
+{
+ *zoomsTextOnly = boolValueForKey(CFSTR(WebKitZoomsTextOnlyPreferenceKey));
+ return S_OK;
+}
+
void WebPreferences::willAddToWebView()
{
++m_numWebViews;
diff --git a/WebKit/win/WebPreferences.h b/WebKit/win/WebPreferences.h
index 46df0a2..6ab3dcb 100644
--- a/WebKit/win/WebPreferences.h
+++ b/WebKit/win/WebPreferences.h
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2006, 2007, 2008 Apple Inc. All rights reserved.
+ * Copyright (C) 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
@@ -308,6 +308,18 @@ public:
virtual HRESULT STDMETHODCALLTYPE offlineWebApplicationCacheEnabled(
/* [retval][out] */ BOOL *enabled);
+ virtual HRESULT STDMETHODCALLTYPE setDatabasesEnabled(
+ /* [in] */ BOOL enabled);
+
+ virtual HRESULT STDMETHODCALLTYPE databasesEnabled(
+ /* [retval][out] */ BOOL *enabled);
+
+ virtual HRESULT STDMETHODCALLTYPE setLocalStorageEnabled(
+ /* [in] */ BOOL enabled);
+
+ virtual HRESULT STDMETHODCALLTYPE localStorageEnabled(
+ /* [retval][out] */ BOOL *enabled);
+
virtual HRESULT STDMETHODCALLTYPE localStorageDatabasePath(
/* [out, retval] */ BSTR* location);
@@ -320,6 +332,18 @@ public:
virtual HRESULT STDMETHODCALLTYPE shouldPaintNativeControls(
/* [retval][out] */ BOOL *shouldPaint);
+ virtual HRESULT STDMETHODCALLTYPE setZoomsTextOnly(
+ /* [retval][out] */ BOOL zoomsTextOnly);
+
+ virtual HRESULT STDMETHODCALLTYPE zoomsTextOnly(
+ /* [retval][out] */ BOOL *zoomsTextOnly);
+
+ virtual HRESULT STDMETHODCALLTYPE fontSmoothingContrast(
+ /* [retval][out] */ float* contrast);
+
+ virtual HRESULT STDMETHODCALLTYPE setFontSmoothingContrast(
+ /* [in] */ float contrast);
+
// WebPreferences
// This method accesses a different preference key than developerExtrasEnabled.
@@ -355,6 +379,7 @@ protected:
void setStringValue(CFStringRef key, LPCTSTR value);
void setIntegerValue(CFStringRef key, int value);
void setBoolValue(CFStringRef key, BOOL value);
+ void setFloatValue(CFStringRef key, float value);
void setLongLongValue(CFStringRef key, LONGLONG value);
static WebPreferences* getInstanceForIdentifier(BSTR identifier);
static void initializeDefaultSettings();
diff --git a/WebKit/win/WebResource.cpp b/WebKit/win/WebResource.cpp
index 9374aec..3c2087f 100644
--- a/WebKit/win/WebResource.cpp
+++ b/WebKit/win/WebResource.cpp
@@ -27,6 +27,7 @@
#include "WebKitDLL.h"
#include "WebResource.h"
+#include "MarshallingHelpers.h"
#include "MemoryStream.h"
#pragma warning(push, 0)
@@ -105,7 +106,7 @@ HRESULT STDMETHODCALLTYPE WebResource::initWithData(
/* [in] */ BSTR frameName)
{
m_data = data;
- m_url = KURL(String(url));
+ m_url = MarshallingHelpers::BSTRToKURL(url);
m_mimeType = String(mimeType);
m_textEncodingName = String(textEncodingName);
m_frameName = String(frameName);
diff --git a/WebKit/win/WebScriptCallFrame.cpp b/WebKit/win/WebScriptCallFrame.cpp
index a831565..fa76fe9 100644
--- a/WebKit/win/WebScriptCallFrame.cpp
+++ b/WebKit/win/WebScriptCallFrame.cpp
@@ -32,7 +32,7 @@
#include "COMEnumVariant.h"
#include "WebKitDLL.h"
-#include <JavaScriptCore/Interpreter.h>
+#include <JavaScriptCore/Completion.h>
#include <JavaScriptCore/JSFunction.h>
#include <JavaScriptCore/JSGlobalObject.h>
#include <JavaScriptCore/JSLock.h>
@@ -49,20 +49,20 @@
using namespace JSC;
-UString WebScriptCallFrame::jsValueToString(JSC::ExecState* state, JSValue* jsvalue)
+UString WebScriptCallFrame::jsValueToString(JSC::ExecState* state, JSValuePtr jsvalue)
{
if (!jsvalue)
return "undefined";
- if (jsvalue->isString())
- return jsvalue->getString();
- else if (jsvalue->isNumber())
- return UString::from(jsvalue->getNumber());
- else if (jsvalue->isBoolean())
- return jsvalue->getBoolean() ? "True" : "False";
- else if (jsvalue->isObject()) {
- jsvalue = jsvalue->getObject()->defaultValue(state, PreferString);
- return jsvalue->getString();
+ if (jsvalue.isString())
+ return jsvalue.getString();
+ else if (jsvalue.isNumber())
+ return UString::from(jsvalue.uncheckedGetNumber());
+ else if (jsvalue.isBoolean())
+ return jsvalue.getBoolean() ? "True" : "False";
+ else if (jsvalue.isObject()) {
+ jsvalue = jsvalue.getObject()->defaultValue(state, PreferString);
+ return jsvalue.getString();
}
return "undefined";
@@ -182,7 +182,7 @@ HRESULT STDMETHODCALLTYPE WebScriptCallFrame::stringByEvaluatingJavaScriptFromSt
JSLock lock(false);
- JSValue* scriptExecutionResult = valueByEvaluatingJavaScriptFromString(script);
+ JSValuePtr scriptExecutionResult = valueByEvaluatingJavaScriptFromString(script);
*result = WebCore::BString(jsValueToString(m_state, scriptExecutionResult)).release();
return S_OK;
@@ -221,7 +221,7 @@ HRESULT STDMETHODCALLTYPE WebScriptCallFrame::valueForVariable(
Identifier identKey(m_state, reinterpret_cast<UChar*>(key), SysStringLen(key));
#if 0
- JSValue* jsvalue = noValue();
+ JSValuePtr jsvalue = noValue();
ScopeChain scopeChain = m_state->scopeChain();
for (ScopeChainIterator it = scopeChain.begin(); it != scopeChain.end() && !jsvalue; ++it)
jsvalue = (*it)->get(m_state, identKey);
@@ -231,7 +231,7 @@ HRESULT STDMETHODCALLTYPE WebScriptCallFrame::valueForVariable(
return S_OK;
}
-JSValue* WebScriptCallFrame::valueByEvaluatingJavaScriptFromString(BSTR script)
+JSValuePtr WebScriptCallFrame::valueByEvaluatingJavaScriptFromString(BSTR script)
{
#if 0
ExecState* state = m_state;
@@ -240,7 +240,7 @@ JSValue* WebScriptCallFrame::valueByEvaluatingJavaScriptFromString(BSTR script)
// find "eval"
JSObject* eval = 0;
if (state->scopeNode()) { // "eval" won't work without context (i.e. at global scope)
- JSValue* v = globObj->get(state, "eval");
+ JSValuePtr v = globObj->get(state, "eval");
if (v->isObject() && asObject(v)->implementsCall())
eval = asObject(v);
else
@@ -248,20 +248,20 @@ JSValue* WebScriptCallFrame::valueByEvaluatingJavaScriptFromString(BSTR script)
state = globObj->globalExec();
}
- JSValue* savedException = state->exception();
+ JSValuePtr savedException = state->exception();
state->clearException();
UString code(reinterpret_cast<UChar*>(script), SysStringLen(script));
// evaluate
- JSValue* scriptExecutionResult;
+ JSValuePtr scriptExecutionResult;
if (eval) {
ArgList args;
args.append(jsString(state, code));
scriptExecutionResult = eval->call(state, 0, args);
} else
// no "eval", or no context (i.e. global scope) - use global fallback
- scriptExecutionResult = Interpreter::evaluate(state, UString(), 0, code.data(), code.size(), globObj).value();
+ scriptExecutionResult = JSC::evaluate(state, UString(), 0, code.data(), code.size(), globObj).value();
if (state->hadException())
scriptExecutionResult = state->exception(); // (may be redundant depending on which eval path was used)
diff --git a/WebKit/win/WebScriptCallFrame.h b/WebKit/win/WebScriptCallFrame.h
index d3cc4f8..d3c3243 100644
--- a/WebKit/win/WebScriptCallFrame.h
+++ b/WebKit/win/WebScriptCallFrame.h
@@ -74,10 +74,10 @@ public:
/* [out, retval] */ BSTR* value);
// Helper and accessors
- virtual JSC::JSValue* valueByEvaluatingJavaScriptFromString(BSTR script);
+ virtual JSC::JSValuePtr valueByEvaluatingJavaScriptFromString(BSTR script);
virtual JSC::ExecState* state() const { return m_state; }
- static JSC::UString jsValueToString(JSC::ExecState*, JSC::JSValue*);
+ static JSC::UString jsValueToString(JSC::ExecState*, JSC::JSValuePtr);
private:
ULONG m_refCount;
diff --git a/WebKit/win/WebTextRenderer.cpp b/WebKit/win/WebTextRenderer.cpp
index 38fa544..7ff2ff3 100644
--- a/WebKit/win/WebTextRenderer.cpp
+++ b/WebKit/win/WebTextRenderer.cpp
@@ -32,7 +32,9 @@
#include "WebKitDLL.h"
#include <CoreFoundation/CFString.h>
+#if PLATFORM(CG)
#include <WebKitSystemInterface/WebKitSystemInterface.h>
+#endif
#include <wtf/RetainPtr.h>
WebTextRenderer* WebTextRenderer::createInstance()
@@ -90,6 +92,8 @@ HRESULT STDMETHODCALLTYPE WebTextRenderer::registerPrivateFont(
return E_FAIL;
RetainPtr<CFStringRef> string(AdoptCF, CFStringCreateWithCharacters(0, reinterpret_cast<const UniChar*>(fontFilePath), static_cast<CFIndex>(wcslen(fontFilePath))));
+#if PLATFORM(CG)
wkAddFontsAtPath(string.get());
+#endif
return S_OK;
}
diff --git a/WebKit/win/WebURLAuthenticationChallenge.cpp b/WebKit/win/WebURLAuthenticationChallenge.cpp
index e0923d5..7c37501 100644
--- a/WebKit/win/WebURLAuthenticationChallenge.cpp
+++ b/WebKit/win/WebURLAuthenticationChallenge.cpp
@@ -149,9 +149,10 @@ HRESULT STDMETHODCALLTYPE WebURLAuthenticationChallenge::initWithProtectionSpace
// FIXME: After we change AuthenticationChallenge to use "ResourceHandle" as the abstract "Sender" or "Source of this Auth Challenge", then we'll
// construct the AuthenticationChallenge with that as obtained from the webSender
-
+#if USE(CFNETWORK)
m_authenticationChallenge = AuthenticationChallenge(webSpace->protectionSpace(), webCredential->credential(),
previousFailureCount, webResponse->resourceResponse(), webError->resourceError());
+#endif
return S_OK;
}
diff --git a/WebKit/win/WebURLAuthenticationChallengeSender.cpp b/WebKit/win/WebURLAuthenticationChallengeSender.cpp
index dfd2689..c80e33f 100644
--- a/WebKit/win/WebURLAuthenticationChallengeSender.cpp
+++ b/WebKit/win/WebURLAuthenticationChallengeSender.cpp
@@ -29,6 +29,7 @@
#include "WebURLAuthenticationChallengeSender.h"
#include "COMPtr.h"
+#include "NotImplemented.h"
#include "WebKit.h"
#include "WebURLAuthenticationChallenge.h"
#include "WebURLCredential.h"
@@ -95,46 +96,6 @@ ULONG STDMETHODCALLTYPE WebURLAuthenticationChallengeSender::Release(void)
return newRef;
}
-// IWebURLAuthenticationChallengeSender -------------------------------------------------------------------
-
-HRESULT STDMETHODCALLTYPE WebURLAuthenticationChallengeSender::cancelAuthenticationChallenge(
- /* [in] */ IWebURLAuthenticationChallenge* challenge)
-{
- COMPtr<WebURLAuthenticationChallenge> webChallenge(Query, challenge);
- if (!webChallenge)
- return E_FAIL;
-
- m_handle->receivedCancellation(webChallenge->authenticationChallenge());
- return S_OK;
-}
-
-HRESULT STDMETHODCALLTYPE WebURLAuthenticationChallengeSender::continueWithoutCredentialForAuthenticationChallenge(
- /* [in] */ IWebURLAuthenticationChallenge* challenge)
-{
- COMPtr<WebURLAuthenticationChallenge> webChallenge(Query, challenge);
- if (!webChallenge)
- return E_FAIL;
-
- m_handle->receivedRequestToContinueWithoutCredential(webChallenge->authenticationChallenge());
- return S_OK;
-}
-
-HRESULT STDMETHODCALLTYPE WebURLAuthenticationChallengeSender::useCredential(
- /* [in] */ IWebURLCredential* credential,
- /* [in] */ IWebURLAuthenticationChallenge* challenge)
-{
- COMPtr<WebURLAuthenticationChallenge> webChallenge(Query, challenge);
- if (!webChallenge)
- return E_FAIL;
-
- COMPtr<WebURLCredential> webCredential;
- if (!credential || FAILED(credential->QueryInterface(__uuidof(WebURLCredential), (void**)&webCredential)))
- return E_FAIL;
-
- m_handle->receivedCredential(webChallenge->authenticationChallenge(), webCredential->credential());
- return S_OK;
-}
-
// WebURLAuthenticationChallengeSender ----------------------------------------------------------------
ResourceHandle* WebURLAuthenticationChallengeSender::resourceHandle() const
diff --git a/WebKit/win/WebURLAuthenticationChallengeSenderCFNet.cpp b/WebKit/win/WebURLAuthenticationChallengeSenderCFNet.cpp
new file mode 100644
index 0000000..21f79e0
--- /dev/null
+++ b/WebKit/win/WebURLAuthenticationChallengeSenderCFNet.cpp
@@ -0,0 +1,80 @@
+/*
+ * Copyright (C) 2007 Apple Inc. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY APPLE COMPUTER, INC. ``AS IS'' AND ANY
+ * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE COMPUTER, INC. OR
+ * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+ * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+ * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+ * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+ * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#include "config.h"
+#include "WebKitDLL.h"
+#include <initguid.h>
+#include "WebURLAuthenticationChallengeSender.h"
+
+#include "COMPtr.h"
+#include "WebKit.h"
+#include "WebURLAuthenticationChallenge.h"
+#include "WebURLCredential.h"
+
+#pragma warning(push, 0)
+#include <WebCore/ResourceHandle.h>
+#pragma warning(pop)
+
+using namespace WebCore;
+
+// IWebURLAuthenticationChallengeSender -------------------------------------------------------------------
+
+HRESULT STDMETHODCALLTYPE WebURLAuthenticationChallengeSender::cancelAuthenticationChallenge(
+ /* [in] */ IWebURLAuthenticationChallenge* challenge)
+{
+ COMPtr<WebURLAuthenticationChallenge> webChallenge(Query, challenge);
+ if (!webChallenge)
+ return E_FAIL;
+
+ m_handle->receivedCancellation(webChallenge->authenticationChallenge());
+ return S_OK;
+}
+
+HRESULT STDMETHODCALLTYPE WebURLAuthenticationChallengeSender::continueWithoutCredentialForAuthenticationChallenge(
+ /* [in] */ IWebURLAuthenticationChallenge* challenge)
+{
+ COMPtr<WebURLAuthenticationChallenge> webChallenge(Query, challenge);
+ if (!webChallenge)
+ return E_FAIL;
+
+ m_handle->receivedRequestToContinueWithoutCredential(webChallenge->authenticationChallenge());
+ return S_OK;
+}
+
+HRESULT STDMETHODCALLTYPE WebURLAuthenticationChallengeSender::useCredential(
+ /* [in] */ IWebURLCredential* credential,
+ /* [in] */ IWebURLAuthenticationChallenge* challenge)
+{
+ COMPtr<WebURLAuthenticationChallenge> webChallenge(Query, challenge);
+ if (!webChallenge)
+ return E_FAIL;
+
+ COMPtr<WebURLCredential> webCredential;
+ if (!credential || FAILED(credential->QueryInterface(__uuidof(WebURLCredential), (void**)&webCredential)))
+ return E_FAIL;
+
+ m_handle->receivedCredential(webChallenge->authenticationChallenge(), webCredential->credential());
+ return S_OK;
+}
diff --git a/WebKit/win/WebURLAuthenticationChallengeSenderCurl.cpp b/WebKit/win/WebURLAuthenticationChallengeSenderCurl.cpp
new file mode 100644
index 0000000..2cf9a75
--- /dev/null
+++ b/WebKit/win/WebURLAuthenticationChallengeSenderCurl.cpp
@@ -0,0 +1,65 @@
+/*
+ * Copyright (C) 2008 Brent Fulgham <bfulgham@gmail.com>. All Rights Reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY APPLE COMPUTER, INC. ``AS IS'' AND ANY
+ * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE COMPUTER, INC. OR
+ * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+ * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+ * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+ * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+ * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#include "config.h"
+#include "WebKitDLL.h"
+#include <initguid.h>
+#include "WebURLAuthenticationChallengeSender.h"
+
+#include "COMPtr.h"
+#include "NotImplemented.h"
+#include "WebKit.h"
+#include "WebURLAuthenticationChallenge.h"
+#include "WebURLCredential.h"
+
+#pragma warning(push, 0)
+#include <WebCore/ResourceHandle.h>
+#pragma warning(pop)
+
+using namespace WebCore;
+
+// IWebURLAuthenticationChallengeSender -------------------------------------------------------------------
+
+HRESULT STDMETHODCALLTYPE WebURLAuthenticationChallengeSender::cancelAuthenticationChallenge(
+ /* [in] */ IWebURLAuthenticationChallenge* challenge)
+{
+ notImplemented();
+ return E_FAIL;
+}
+
+HRESULT STDMETHODCALLTYPE WebURLAuthenticationChallengeSender::continueWithoutCredentialForAuthenticationChallenge(
+ /* [in] */ IWebURLAuthenticationChallenge* challenge)
+{
+ notImplemented();
+ return E_FAIL;
+}
+
+HRESULT STDMETHODCALLTYPE WebURLAuthenticationChallengeSender::useCredential(
+ /* [in] */ IWebURLCredential* credential,
+ /* [in] */ IWebURLAuthenticationChallenge* challenge)
+{
+ notImplemented();
+ return E_FAIL;
+}
diff --git a/WebKit/win/WebURLProtectionSpace.cpp b/WebKit/win/WebURLProtectionSpace.cpp
index dc40704..c3d78bb 100644
--- a/WebKit/win/WebURLProtectionSpace.cpp
+++ b/WebKit/win/WebURLProtectionSpace.cpp
@@ -152,14 +152,19 @@ HRESULT STDMETHODCALLTYPE WebURLProtectionSpace::initWithHost(
/* [in] */ BSTR realm,
/* [in] */ BSTR authenticationMethod)
{
+ static BString& webURLProtectionSpaceHTTPBString = *new BString(WebURLProtectionSpaceHTTP);
+ static BString& webURLProtectionSpaceHTTPSBString = *new BString(WebURLProtectionSpaceHTTPS);
+ static BString& webURLProtectionSpaceFTPBString = *new BString(WebURLProtectionSpaceFTP);
+ static BString& webURLProtectionSpaceFTPSBString = *new BString(WebURLProtectionSpaceFTPS);
+
ProtectionSpaceServerType serverType = ProtectionSpaceServerHTTP;
- if (BString(protocol) == WebURLProtectionSpaceHTTP)
+ if (BString(protocol) == webURLProtectionSpaceHTTPBString)
serverType = ProtectionSpaceServerHTTP;
- else if (BString(protocol) == WebURLProtectionSpaceHTTPS)
+ else if (BString(protocol) == webURLProtectionSpaceHTTPSBString)
serverType = ProtectionSpaceServerHTTPS;
- else if (BString(protocol) == WebURLProtectionSpaceFTP)
+ else if (BString(protocol) == webURLProtectionSpaceFTPBString)
serverType = ProtectionSpaceServerFTP;
- else if (BString(protocol) == WebURLProtectionSpaceFTPS)
+ else if (BString(protocol) == webURLProtectionSpaceFTPSBString)
serverType = ProtectionSpaceServerFTPS;
else
ASSERT_NOT_REACHED();
@@ -177,14 +182,19 @@ HRESULT STDMETHODCALLTYPE WebURLProtectionSpace::initWithProxyHost(
/* [in] */ BSTR realm,
/* [in] */ BSTR authenticationMethod)
{
+ static BString& webURLProtectionSpaceHTTPProxyBString = *new BString(WebURLProtectionSpaceHTTPProxy);
+ static BString& webURLProtectionSpaceHTTPSProxyBString = *new BString(WebURLProtectionSpaceHTTPSProxy);
+ static BString& webURLProtectionSpaceFTPProxyBString = *new BString(WebURLProtectionSpaceFTPProxy);
+ static BString& webURLProtectionSpaceSOCKSProxyBString = *new BString(WebURLProtectionSpaceSOCKSProxy);
+
ProtectionSpaceServerType serverType = ProtectionSpaceProxyHTTP;
- if (BString(proxyType) == WebURLProtectionSpaceHTTPProxy)
+ if (BString(proxyType) == webURLProtectionSpaceHTTPProxyBString)
serverType = ProtectionSpaceProxyHTTP;
- else if (BString(proxyType) == WebURLProtectionSpaceHTTPSProxy)
+ else if (BString(proxyType) == webURLProtectionSpaceHTTPSProxyBString)
serverType = ProtectionSpaceProxyHTTPS;
- else if (BString(proxyType) == WebURLProtectionSpaceFTPProxy)
+ else if (BString(proxyType) == webURLProtectionSpaceFTPProxyBString)
serverType = ProtectionSpaceProxyFTP;
- else if (BString(proxyType) == WebURLProtectionSpaceSOCKSProxy)
+ else if (BString(proxyType) == webURLProtectionSpaceSOCKSProxyBString)
serverType = ProtectionSpaceProxySOCKS;
else
ASSERT_NOT_REACHED();
diff --git a/WebKit/win/WebURLResponse.cpp b/WebKit/win/WebURLResponse.cpp
index 7f2c795..b1f4488 100644
--- a/WebKit/win/WebURLResponse.cpp
+++ b/WebKit/win/WebURLResponse.cpp
@@ -33,7 +33,10 @@
#include "MarshallingHelpers.h"
#include "WebLocalizableStrings.h"
+#if USE(CFNETWORK)
#include <WebKitSystemInterface/WebKitSystemInterface.h>
+#endif
+
#include <wtf/platform.h>
#pragma warning( push, 0 )
#include <WebCore/BString.h>
@@ -293,7 +296,7 @@ HRESULT STDMETHODCALLTYPE WebURLResponse::initWithURL(
/* [in] */ int expectedContentLength,
/* [in] */ BSTR textEncodingName)
{
- m_response = ResourceResponse(KURL(url), String(mimeType), expectedContentLength, String(textEncodingName), String());
+ m_response = ResourceResponse(MarshallingHelpers::BSTRToKURL(url), String(mimeType), expectedContentLength, String(textEncodingName), String());
return S_OK;
}
@@ -360,7 +363,7 @@ HRESULT STDMETHODCALLTYPE WebURLResponse::allHeaderFields(
{
ASSERT(m_response.isHTTP());
- *headerFields = COMPropertyBag<String, CaseFoldingHash>::createInstance(m_response.httpHeaderFields());
+ *headerFields = COMPropertyBag<String, AtomicString, CaseFoldingHash>::createInstance(m_response.httpHeaderFields());
return S_OK;
}
diff --git a/WebKit/win/WebView.cpp b/WebKit/win/WebView.cpp
index 273d626..eb176dc 100644
--- a/WebKit/win/WebView.cpp
+++ b/WebKit/win/WebView.cpp
@@ -29,6 +29,7 @@
#include "CFDictionaryPropertyBag.h"
#include "DOMCoreClasses.h"
+#include "MarshallingHelpers.h"
#include "WebDatabaseManager.h"
#include "WebDocumentLoader.h"
#include "WebEditorClient.h"
@@ -67,6 +68,7 @@
#include <WebCore/EventNames.h>
#include <WebCore/FileSystem.h>
#include <WebCore/FocusController.h>
+#include <WebCore/FloatQuad.h>
#include <WebCore/FrameLoader.h>
#include <WebCore/FrameTree.h>
#include <WebCore/FrameView.h>
@@ -92,6 +94,7 @@
#include <WebCore/RenderTheme.h>
#include <WebCore/ResourceHandle.h>
#include <WebCore/ResourceHandleClient.h>
+#include <WebCore/ScriptValue.h>
#include <WebCore/ScrollbarTheme.h>
#include <WebCore/SelectionController.h>
#include <WebCore/Settings.h>
@@ -124,6 +127,20 @@ static HashSet<WebView*> pendingDeleteBackingStoreSet;
static String osVersion();
static String webKitVersion();
+typedef CFURLCacheRef (*CopySharedURLCacheFunction)();
+
+static HMODULE findCFNetworkModule()
+{
+ if (HMODULE module = GetModuleHandleA("CFNetwork"))
+ return module;
+ return GetModuleHandleA("CFNetwork_debug");
+}
+
+static CopySharedURLCacheFunction findCopySharedURLCacheFunction()
+{
+ return reinterpret_cast<CopySharedURLCacheFunction>(GetProcAddress(findCFNetworkModule(), "CFURLCacheCopySharedURLCache"));
+}
+
WebView* kit(Page* page)
{
return page ? static_cast<WebChromeClient*>(page->chrome()->client())->webView() : 0;
@@ -268,7 +285,6 @@ WebView::WebView()
, m_useBackForwardList(true)
, m_userAgentOverridden(false)
, m_zoomMultiplier(1.0f)
-, m_zoomMultiplierIsTextOnly(true)
, m_mouseActivated(false)
, m_dragData(0)
, m_currentCharacterCode(0)
@@ -283,6 +299,7 @@ WebView::WebView()
, m_topLevelParent(0)
, m_deleteBackingStoreTimerActive(false)
, m_transparent(false)
+, m_selectTrailingWhitespaceEnabled(false)
{
JSC::initializeThreading();
@@ -366,11 +383,14 @@ void WebView::setCacheModel(WebCacheModel cacheModel)
if (s_didSetCacheModel && cacheModel == s_cacheModel)
return;
-#ifdef CFURLCacheCopySharedURLCachePresent
- RetainPtr<CFURLCacheRef> cfurlCache(AdoptCF, CFURLCacheCopySharedURLCache());
-#else
- RetainPtr<CFURLCacheRef> cfurlCache = CFURLCacheSharedURLCache();
-#endif
+ // Once we require a newer version of CFNetwork with the CFURLCacheCopySharedURLCache function,
+ // we can call CFURLCacheCopySharedURLCache directly and eliminate copySharedURLCache.
+ static CopySharedURLCacheFunction copySharedURLCache = findCopySharedURLCacheFunction();
+ RetainPtr<CFURLCacheRef> cfurlCache;
+ if (copySharedURLCache)
+ cfurlCache.adoptCF(copySharedURLCache());
+ else
+ cfurlCache = CFURLCacheSharedURLCache();
RetainPtr<CFStringRef> cfurlCacheDirectory(AdoptCF, wkCopyFoundationCacheDirectory());
if (!cfurlCacheDirectory)
@@ -398,14 +418,12 @@ void WebView::setCacheModel(WebCacheModel cacheModel)
// Object cache capacities (in bytes)
if (memSize >= 2048)
- cacheTotalCapacity = 128 * 1024 * 1024;
+ cacheTotalCapacity = 96 * 1024 * 1024;
else if (memSize >= 1536)
- cacheTotalCapacity = 86 * 1024 * 1024;
- else if (memSize >= 1024)
cacheTotalCapacity = 64 * 1024 * 1024;
- else if (memSize >= 512)
+ else if (memSize >= 1024)
cacheTotalCapacity = 32 * 1024 * 1024;
- else if (memSize >= 256)
+ else if (memSize >= 512)
cacheTotalCapacity = 16 * 1024 * 1024;
cacheMinDeadCapacity = 0;
@@ -432,14 +450,12 @@ void WebView::setCacheModel(WebCacheModel cacheModel)
// Object cache capacities (in bytes)
if (memSize >= 2048)
- cacheTotalCapacity = 128 * 1024 * 1024;
+ cacheTotalCapacity = 96 * 1024 * 1024;
else if (memSize >= 1536)
- cacheTotalCapacity = 86 * 1024 * 1024;
- else if (memSize >= 1024)
cacheTotalCapacity = 64 * 1024 * 1024;
- else if (memSize >= 512)
+ else if (memSize >= 1024)
cacheTotalCapacity = 32 * 1024 * 1024;
- else if (memSize >= 256)
+ else if (memSize >= 512)
cacheTotalCapacity = 16 * 1024 * 1024;
cacheMinDeadCapacity = cacheTotalCapacity / 8;
@@ -486,14 +502,12 @@ void WebView::setCacheModel(WebCacheModel cacheModel)
// browsing pattern. Even growth above 128MB can have substantial
// value / MB for some content / browsing patterns.)
if (memSize >= 2048)
- cacheTotalCapacity = 256 * 1024 * 1024;
+ cacheTotalCapacity = 128 * 1024 * 1024;
else if (memSize >= 1536)
- cacheTotalCapacity = 172 * 1024 * 1024;
+ cacheTotalCapacity = 96 * 1024 * 1024;
else if (memSize >= 1024)
- cacheTotalCapacity = 128 * 1024 * 1024;
- else if (memSize >= 512)
cacheTotalCapacity = 64 * 1024 * 1024;
- else if (memSize >= 256)
+ else if (memSize >= 512)
cacheTotalCapacity = 32 * 1024 * 1024;
cacheMinDeadCapacity = cacheTotalCapacity / 4;
@@ -805,7 +819,7 @@ static void getUpdateRects(HRGN region, const IntRect& dirtyRect, Vector<IntRect
rects.append(*rect);
}
-void WebView::updateBackingStore(FrameView* frameView, HDC dc, bool backingStoreCompletelyDirty)
+void WebView::updateBackingStore(FrameView* frameView, HDC dc, bool backingStoreCompletelyDirty, WindowsToPaint windowsToPaint)
{
LOCAL_GDI_COUNTER(0, __FUNCTION__);
@@ -835,7 +849,7 @@ void WebView::updateBackingStore(FrameView* frameView, HDC dc, bool backingStore
}
for (unsigned i = 0; i < paintRects.size(); ++i)
- paintIntoBackingStore(frameView, bitmapDC, paintRects[i]);
+ paintIntoBackingStore(frameView, bitmapDC, paintRects[i], windowsToPaint);
if (m_uiDelegatePrivate) {
COMPtr<IWebUIDelegatePrivate2> uiDelegatePrivate2(Query, m_uiDelegatePrivate);
@@ -870,16 +884,23 @@ void WebView::paint(HDC dc, LPARAM options)
OwnPtr<HRGN> region;
int regionType = NULLREGION;
PAINTSTRUCT ps;
+ WindowsToPaint windowsToPaint;
if (!dc) {
region.set(CreateRectRgn(0,0,0,0));
regionType = GetUpdateRgn(m_viewWindow, region.get(), false);
hdc = BeginPaint(m_viewWindow, &ps);
rcPaint = ps.rcPaint;
+ // We're painting to the screen, and our child windows can handle
+ // painting themselves to the screen.
+ windowsToPaint = PaintWebViewOnly;
} else {
hdc = dc;
::GetClientRect(m_viewWindow, &rcPaint);
if (options & PRF_ERASEBKGND)
::FillRect(hdc, &rcPaint, (HBRUSH)GetStockObject(WHITE_BRUSH));
+ // Since we aren't painting to the screen, we want to paint all our
+ // children into the HDC.
+ windowsToPaint = PaintWebViewAndChildren;
}
HDC bitmapDC = ::CreateCompatibleDC(hdc);
@@ -887,7 +908,7 @@ void WebView::paint(HDC dc, LPARAM options)
::SelectObject(bitmapDC, m_backingStoreBitmap.get());
// Update our backing store if needed.
- updateBackingStore(frameView, bitmapDC, backingStoreCompletelyDirty);
+ updateBackingStore(frameView, bitmapDC, backingStoreCompletelyDirty, windowsToPaint);
// Now we blit the updated backing store
IntRect windowDirtyRect = rcPaint;
@@ -928,7 +949,7 @@ void WebView::paint(HDC dc, LPARAM options)
deleteBackingStoreSoon();
}
-void WebView::paintIntoBackingStore(FrameView* frameView, HDC bitmapDC, const IntRect& dirtyRect)
+void WebView::paintIntoBackingStore(FrameView* frameView, HDC bitmapDC, const IntRect& dirtyRect, WindowsToPaint windowsToPaint)
{
LOCAL_GDI_COUNTER(0, __FUNCTION__);
@@ -944,14 +965,18 @@ void WebView::paintIntoBackingStore(FrameView* frameView, HDC bitmapDC, const In
::ReleaseDC(m_viewWindow, dc);
#endif
- FillRect(bitmapDC, &rect, (HBRUSH)GetStockObject(WHITE_BRUSH));
+ GraphicsContext gc(bitmapDC, m_transparent);
+ gc.setShouldIncludeChildWindows(windowsToPaint == PaintWebViewAndChildren);
+ gc.save();
+ if (m_transparent)
+ gc.clearRect(dirtyRect);
+ else
+ FillRect(bitmapDC, &rect, (HBRUSH)GetStockObject(WHITE_BRUSH));
if (frameView && frameView->frame() && frameView->frame()->contentRenderer()) {
- GraphicsContext gc(bitmapDC, m_transparent);
- gc.save();
gc.clip(dirtyRect);
frameView->paint(&gc, dirtyRect);
- gc.restore();
}
+ gc.restore();
}
void WebView::paintIntoWindow(HDC bitmapDC, HDC windowDC, const IntRect& dirtyRect)
@@ -1053,18 +1078,23 @@ bool WebView::handleContextMenuEvent(WPARAM wParam, LPARAM lParam)
if (!renderer)
return false;
- // Calculate the rect of the first line of the selection (cribbed from -[WebCoreFrameBridge firstRectForDOMRange:]).
+ // Calculate the rect of the first line of the selection (cribbed from -[WebCoreFrameBridge firstRectForDOMRange:],
+ // now Frame::firstRectForRange(), which perhaps this should call).
int extraWidthToEndOfLine = 0;
InlineBox* startInlineBox;
int startCaretOffset;
start.getInlineBoxAndOffset(DOWNSTREAM, startInlineBox, startCaretOffset);
- IntRect startCaretRect = renderer->caretRect(startInlineBox, startCaretOffset, &extraWidthToEndOfLine);
+ IntRect startCaretRect = renderer->localCaretRect(startInlineBox, startCaretOffset, &extraWidthToEndOfLine);
+ if (startCaretRect != IntRect())
+ startCaretRect = renderer->localToAbsoluteQuad(FloatRect(startCaretRect)).enclosingBoundingBox();
InlineBox* endInlineBox;
int endCaretOffset;
end.getInlineBoxAndOffset(UPSTREAM, endInlineBox, endCaretOffset);
- IntRect endCaretRect = renderer->caretRect(endInlineBox, endCaretOffset);
+ IntRect endCaretRect = renderer->localCaretRect(endInlineBox, endCaretOffset);
+ if (endCaretRect != IntRect())
+ endCaretRect = renderer->localToAbsoluteQuad(FloatRect(endCaretRect)).enclosingBoundingBox();
IntRect firstRect;
if (startCaretRect.y() == endCaretRect.y())
@@ -1586,17 +1616,7 @@ bool WebView::keyPress(WPARAM charCode, LPARAM keyData, bool systemKeyDown)
// IE does not dispatch keypress event for WM_SYSCHAR.
if (systemKeyDown)
return frame->eventHandler()->handleAccessKey(keyEvent);
- if (frame->eventHandler()->keyEvent(keyEvent))
- return true;
-
- // Need to scroll the page if space is hit.
- if (charCode == ' ') {
- ScrollDirection direction = keyEvent.shiftKey() ? ScrollUp : ScrollDown;
- if (!frame->eventHandler()->scrollOverflow(direction, ScrollByPage))
- frame->view()->scroll(direction, ScrollByPage);
- return true;
- }
- return false;
+ return frame->eventHandler()->keyEvent(keyEvent);
}
bool WebView::inResizer(LPARAM lParam)
@@ -1662,7 +1682,7 @@ static LRESULT CALLBACK WebViewWndProc(HWND hWnd, UINT message, WPARAM wParam, L
{
LRESULT lResult = 0;
LONG_PTR longPtr = GetWindowLongPtr(hWnd, 0);
- WebView* webView = reinterpret_cast<WebView*>(longPtr);
+ COMPtr<WebView> webView = reinterpret_cast<WebView*>(longPtr); // hold a ref, since the WebView could go away in an event handler.
WebFrame* mainFrameImpl = webView ? webView->topLevelFrame() : 0;
if (!mainFrameImpl || webView->isBeingDestroyed())
return DefWindowProc(hWnd, message, wParam, lParam);
@@ -1758,7 +1778,7 @@ static LRESULT CALLBACK WebViewWndProc(HWND hWnd, UINT message, WPARAM wParam, L
COMPtr<IWebUIDelegatePrivate> uiDelegatePrivate;
if (SUCCEEDED(webView->uiDelegate(&uiDelegate)) && uiDelegate &&
SUCCEEDED(uiDelegate->QueryInterface(IID_IWebUIDelegatePrivate, (void**) &uiDelegatePrivate)) && uiDelegatePrivate)
- uiDelegatePrivate->webViewReceivedFocus(webView);
+ uiDelegatePrivate->webViewReceivedFocus(webView.get());
FocusController* focusController = webView->page()->focusController();
if (Frame* frame = focusController->focusedFrame()) {
@@ -1776,7 +1796,7 @@ static LRESULT CALLBACK WebViewWndProc(HWND hWnd, UINT message, WPARAM wParam, L
HWND newFocusWnd = reinterpret_cast<HWND>(wParam);
if (SUCCEEDED(webView->uiDelegate(&uiDelegate)) && uiDelegate &&
SUCCEEDED(uiDelegate->QueryInterface(IID_IWebUIDelegatePrivate, (void**) &uiDelegatePrivate)) && uiDelegatePrivate)
- uiDelegatePrivate->webViewLostFocus(webView, (OLE_HANDLE)(ULONG64)newFocusWnd);
+ uiDelegatePrivate->webViewLostFocus(webView.get(), (OLE_HANDLE)(ULONG64)newFocusWnd);
FocusController* focusController = webView->page()->focusController();
Frame* frame = focusController->focusedOrMainFrame();
@@ -1852,7 +1872,7 @@ static LRESULT CALLBACK WebViewWndProc(HWND hWnd, UINT message, WPARAM wParam, L
}
if (SUCCEEDED(webView->uiDelegate(&uiDelegate)) && uiDelegate &&
SUCCEEDED(uiDelegate->QueryInterface(IID_IWebUIDelegatePrivate, (void**) &uiDelegatePrivate)) && uiDelegatePrivate &&
- SUCCEEDED(uiDelegatePrivate->webViewGetDlgCode(webView, keyCode, &dlgCode)))
+ SUCCEEDED(uiDelegatePrivate->webViewGetDlgCode(webView.get(), keyCode, &dlgCode)))
return dlgCode;
handled = false;
break;
@@ -2060,7 +2080,8 @@ HRESULT STDMETHODCALLTYPE WebView::canShowMIMEType(
*canShow = MIMETypeRegistry::isSupportedImageMIMEType(mimeTypeStr) ||
MIMETypeRegistry::isSupportedNonImageMIMEType(mimeTypeStr) ||
- PluginInfoStore::supportsMIMEType(mimeTypeStr);
+ PluginInfoStore::supportsMIMEType(mimeTypeStr) ||
+ shouldUseEmbeddedView(mimeTypeStr);
return S_OK;
}
@@ -2147,6 +2168,7 @@ HRESULT STDMETHODCALLTYPE WebView::initWithFrame(
sharedPreferences->willAddToWebView();
m_preferences = sharedPreferences;
+ InitializeLoggingChannelsIfNecessary();
WebKitSetWebDatabasesPathIfNecessary();
WebKitSetApplicationCachePathIfNecessary();
@@ -2497,7 +2519,7 @@ HRESULT STDMETHODCALLTYPE WebView::setPageSizeMultiplier(
void WebView::setZoomMultiplier(float multiplier, bool isTextOnly)
{
m_zoomMultiplier = multiplier;
- m_zoomMultiplierIsTextOnly = isTextOnly;
+ m_page->settings()->setZoomsTextOnly(isTextOnly);
if (Frame* coreFrame = core(m_mainFrame))
coreFrame->setZoomFactor(multiplier, isTextOnly);
}
@@ -2518,7 +2540,7 @@ HRESULT STDMETHODCALLTYPE WebView::pageSizeMultiplier(
float WebView::zoomMultiplier(bool isTextOnly)
{
- if (isTextOnly != m_zoomMultiplierIsTextOnly)
+ if (isTextOnly != m_page->settings()->zoomsTextOnly())
return 1.0f;
return m_zoomMultiplier;
}
@@ -2564,8 +2586,7 @@ HRESULT STDMETHODCALLTYPE WebView::userAgentForURL(
/* [in] */ BSTR url,
/* [retval][out] */ BSTR* userAgent)
{
- String urlStr(url, SysStringLen(url));
- String userAgentString = this->userAgentForKURL(KURL(urlStr));
+ String userAgentString = userAgentForKURL(MarshallingHelpers::BSTRToKURL(url));
*userAgent = SysAllocStringLen(userAgentString.characters(), userAgentString.length());
if (!*userAgent && userAgentString.length())
return E_OUTOFMEMORY;
@@ -2593,7 +2614,7 @@ HRESULT STDMETHODCALLTYPE WebView::setCustomTextEncodingName(
if (oldEncoding != encodingName && (!oldEncoding || !encodingName || _tcscmp(oldEncoding, encodingName))) {
if (Frame* coreFrame = core(m_mainFrame))
- coreFrame->loader()->reloadAllowingStaleData(String(encodingName, SysStringLen(encodingName)));
+ coreFrame->loader()->reloadWithOverrideEncoding(String(encodingName, SysStringLen(encodingName)));
}
return S_OK;
@@ -2662,12 +2683,12 @@ HRESULT STDMETHODCALLTYPE WebView::stringByEvaluatingJavaScriptFromString(
if (!coreFrame)
return E_FAIL;
- JSC::JSValue* scriptExecutionResult = coreFrame->loader()->executeScript(WebCore::String(script), true);
- if(!scriptExecutionResult)
+ JSC::JSValuePtr scriptExecutionResult = coreFrame->loader()->executeScript(WebCore::String(script), true).jsValue();
+ if (!scriptExecutionResult)
return E_FAIL;
- else if (scriptExecutionResult->isString()) {
+ else if (scriptExecutionResult.isString()) {
JSLock lock(false);
- *result = BString(String(scriptExecutionResult->getString()));
+ *result = BString(String(scriptExecutionResult.getString()));
}
return S_OK;
@@ -2951,7 +2972,7 @@ HRESULT STDMETHODCALLTYPE WebView::selectionRect(RECT* rc)
WebCore::Frame* frame = m_page->focusController()->focusedOrMainFrame();
if (frame) {
- IntRect ir = enclosingIntRect(frame->selectionRect());
+ IntRect ir = enclosingIntRect(frame->selectionBounds());
ir = frame->view()->convertToContainingWindow(ir);
ir.move(-frame->view()->scrollOffset().width(), -frame->view()->scrollOffset().height());
rc->left = ir.x();
@@ -3255,7 +3276,7 @@ HRESULT STDMETHODCALLTYPE WebView::canMakeTextLarger(
/* [in] */ IUnknown* /*sender*/,
/* [retval][out] */ BOOL* result)
{
- bool canGrowMore = canZoomIn(true);
+ bool canGrowMore = canZoomIn(m_page->settings()->zoomsTextOnly());
*result = canGrowMore ? TRUE : FALSE;
return S_OK;
}
@@ -3277,7 +3298,7 @@ bool WebView::canZoomIn(bool isTextOnly)
HRESULT STDMETHODCALLTYPE WebView::makeTextLarger(
/* [in] */ IUnknown* /*sender*/)
{
- return zoomIn(true);
+ return zoomIn(m_page->settings()->zoomsTextOnly());
}
HRESULT STDMETHODCALLTYPE WebView::zoomPageIn(
@@ -3298,7 +3319,7 @@ HRESULT STDMETHODCALLTYPE WebView::canMakeTextSmaller(
/* [in] */ IUnknown* /*sender*/,
/* [retval][out] */ BOOL* result)
{
- bool canShrinkMore = canZoomOut(true);
+ bool canShrinkMore = canZoomOut(m_page->settings()->zoomsTextOnly());
*result = canShrinkMore ? TRUE : FALSE;
return S_OK;
}
@@ -3320,7 +3341,7 @@ bool WebView::canZoomOut(bool isTextOnly)
HRESULT STDMETHODCALLTYPE WebView::makeTextSmaller(
/* [in] */ IUnknown* /*sender*/)
{
- return zoomOut(true);
+ return zoomOut(m_page->settings()->zoomsTextOnly());
}
HRESULT STDMETHODCALLTYPE WebView::zoomPageOut(
@@ -3341,6 +3362,7 @@ HRESULT STDMETHODCALLTYPE WebView::canMakeTextStandardSize(
/* [in] */ IUnknown* /*sender*/,
/* [retval][out] */ BOOL* result)
{
+ // Since we always reset text zoom and page zoom together, this should continue to return an answer about text zoom even if its not enabled.
bool notAlreadyStandard = canResetZoom(true);
*result = notAlreadyStandard ? TRUE : FALSE;
return S_OK;
@@ -3487,6 +3509,8 @@ HRESULT STDMETHODCALLTYPE WebView::setSmartInsertDeleteEnabled(
/* [in] */ BOOL flag)
{
m_smartInsertDeleteEnabled = !!flag;
+ if (m_smartInsertDeleteEnabled)
+ setSelectTrailingWhitespaceEnabled(false);
return S_OK;
}
@@ -3496,7 +3520,23 @@ HRESULT STDMETHODCALLTYPE WebView::smartInsertDeleteEnabled(
*enabled = m_smartInsertDeleteEnabled ? TRUE : FALSE;
return S_OK;
}
+
+HRESULT STDMETHODCALLTYPE WebView::setSelectTrailingWhitespaceEnabled(
+ /* [in] */ BOOL flag)
+{
+ m_selectTrailingWhitespaceEnabled = !!flag;
+ if (m_selectTrailingWhitespaceEnabled)
+ setSmartInsertDeleteEnabled(false);
+ return S_OK;
+}
+HRESULT STDMETHODCALLTYPE WebView::isSelectTrailingWhitespaceEnabled(
+ /* [retval][out] */ BOOL* enabled)
+{
+ *enabled = m_selectTrailingWhitespaceEnabled ? TRUE : FALSE;
+ return S_OK;
+}
+
HRESULT STDMETHODCALLTYPE WebView::setContinuousSpellCheckingEnabled(
/* [in] */ BOOL flag)
{
@@ -3774,8 +3814,7 @@ HRESULT STDMETHODCALLTYPE WebView::paste(
HRESULT STDMETHODCALLTYPE WebView::copyURL(
/* [in] */ BSTR url)
{
- String temp(url, SysStringLen(url));
- m_page->focusController()->focusedOrMainFrame()->editor()->copyURL(KURL(temp), "");
+ m_page->focusController()->focusedOrMainFrame()->editor()->copyURL(MarshallingHelpers::BSTRToKURL(url), "");
return S_OK;
}
@@ -4121,6 +4160,11 @@ HRESULT WebView::notifyPreferencesChanged(IWebNotification* notification)
return hr;
settings->setShouldPaintCustomScrollbars(!!enabled);
+ hr = preferences->zoomsTextOnly(&enabled);
+ if (FAILED(hr))
+ return hr;
+ settings->setZoomsTextOnly(!!enabled);
+
settings->setShowsURLsInToolTips(false);
settings->setForceFTPDirectoryListings(true);
settings->setDeveloperExtrasEnabled(developerExtrasEnabled());
@@ -4150,6 +4194,16 @@ HRESULT WebView::notifyPreferencesChanged(IWebNotification* notification)
return hr;
settings->setOfflineWebApplicationCacheEnabled(enabled);
+ hr = prefsPrivate->databasesEnabled(&enabled);
+ if (FAILED(hr))
+ return hr;
+ settings->setDatabasesEnabled(enabled);
+
+ hr = prefsPrivate->localStorageEnabled(&enabled);
+ if (FAILED(hr))
+ return hr;
+ settings->setLocalStorageEnabled(enabled);
+
#if USE(SAFARI_THEME)
hr = prefsPrivate->shouldPaintNativeControls(&enabled);
if (FAILED(hr))
@@ -4963,6 +5017,27 @@ HRESULT STDMETHODCALLTYPE WebView::cookieEnabled(BOOL* enabled)
return S_OK;
}
+HRESULT STDMETHODCALLTYPE WebView::setMediaVolume(float volume)
+{
+ if (!m_page)
+ return E_FAIL;
+
+ m_page->setMediaVolume(volume);
+ return S_OK;
+}
+
+HRESULT STDMETHODCALLTYPE WebView::mediaVolume(float* volume)
+{
+ if (!volume)
+ return E_POINTER;
+
+ if (!m_page)
+ return E_FAIL;
+
+ *volume = m_page->mediaVolume();
+ return S_OK;
+}
+
HRESULT STDMETHODCALLTYPE WebView::setDefersCallbacks(BOOL defersCallbacks)
{
if (!m_page)
@@ -4984,6 +5059,23 @@ HRESULT STDMETHODCALLTYPE WebView::defersCallbacks(BOOL* defersCallbacks)
return S_OK;
}
+HRESULT STDMETHODCALLTYPE WebView::globalHistoryItem(IWebHistoryItem** item)
+{
+ if (!item)
+ return E_POINTER;
+
+ if (!m_page)
+ return E_FAIL;
+
+ if (!m_page->globalHistoryItem()) {
+ *item = 0;
+ return S_OK;
+ }
+
+ *item = WebHistoryItem::createInstance(m_page->globalHistoryItem());
+ return S_OK;
+}
+
HRESULT STDMETHODCALLTYPE WebView::setAlwaysUsesComplexTextCodePath(BOOL complex)
{
WebCoreSetAlwaysUsesComplexTextCodePath(complex);
@@ -5000,6 +5092,26 @@ HRESULT STDMETHODCALLTYPE WebView::alwaysUsesComplexTextCodePath(BOOL* complex)
return S_OK;
}
+HRESULT STDMETHODCALLTYPE WebView::registerEmbeddedViewMIMEType(BSTR mimeType)
+{
+ if (!mimeType)
+ return E_POINTER;
+
+ if (!m_embeddedViewMIMETypes)
+ m_embeddedViewMIMETypes.set(new HashSet<String>);
+
+ m_embeddedViewMIMETypes->add(String(mimeType, ::SysStringLen(mimeType)));
+ return S_OK;
+}
+
+bool WebView::shouldUseEmbeddedView(const WebCore::String& mimeType) const
+{
+ if (!m_embeddedViewMIMETypes)
+ return false;
+
+ return m_embeddedViewMIMETypes->contains(mimeType);
+}
+
bool WebView::onGetObject(WPARAM wParam, LPARAM lParam, LRESULT& lResult) const
{
lResult = 0;
@@ -5042,6 +5154,12 @@ STDMETHODIMP WebView::AccessibleObjectFromWindow(HWND hwnd, DWORD objectID, REFI
return procPtr(hwnd, objectID, riid, ppObject);
}
+HRESULT WebView::setMemoryCacheDelegateCallsEnabled(BOOL enabled)
+{
+ m_page->setMemoryCacheClientCallsEnabled(enabled);
+ return S_OK;
+}
+
class EnumTextMatches : public IEnumTextMatches
{
long m_ref;
diff --git a/WebKit/win/WebView.h b/WebKit/win/WebView.h
index c64bc59..281defd 100644
--- a/WebKit/win/WebView.h
+++ b/WebKit/win/WebView.h
@@ -34,6 +34,7 @@
#include <WebCore/IntRect.h>
#include <WebCore/Timer.h>
#include <WebCore/WindowMessageListener.h>
+#include <wtf/HashSet.h>
#include <wtf/OwnPtr.h>
class WebFrame;
@@ -390,7 +391,13 @@ public:
virtual HRESULT STDMETHODCALLTYPE smartInsertDeleteEnabled(
/* [in] */ BOOL *enabled);
+
+ virtual HRESULT STDMETHODCALLTYPE setSelectTrailingWhitespaceEnabled(
+ /* [in] */ BOOL flag);
+ virtual HRESULT STDMETHODCALLTYPE isSelectTrailingWhitespaceEnabled(
+ /* [in] */ BOOL *enabled);
+
virtual HRESULT STDMETHODCALLTYPE setContinuousSpellCheckingEnabled(
/* [in] */ BOOL flag);
@@ -690,6 +697,9 @@ public:
virtual HRESULT STDMETHODCALLTYPE defersCallbacks(
/* [out, retval] */ BOOL* defersCallbacks);
+ virtual HRESULT STDMETHODCALLTYPE globalHistoryItem(
+ /* [out, retval] */ IWebHistoryItem** item);
+
virtual HRESULT STDMETHODCALLTYPE setAlwaysUsesComplexTextCodePath(
/* [in] */ BOOL complex);
@@ -702,7 +712,21 @@ public:
virtual HRESULT STDMETHODCALLTYPE cookieEnabled(
/* [out, retval] */ BOOL* enabled);
+ virtual HRESULT STDMETHODCALLTYPE setMediaVolume(
+ /* [in] */ float volume);
+
+ virtual HRESULT STDMETHODCALLTYPE mediaVolume(
+ /* [out, retval] */ float* volume);
+
+ virtual HRESULT STDMETHODCALLTYPE registerEmbeddedViewMIMEType(
+ /* [in] */ BSTR mimeType);
+
+ virtual HRESULT STDMETHODCALLTYPE setMemoryCacheDelegateCallsEnabled(
+ /* [in] */ BOOL enabled);
+
// WebView
+ bool shouldUseEmbeddedView(const WebCore::String& mimeType) const;
+
WebCore::Page* page();
bool handleMouseEvent(UINT, WPARAM, LPARAM);
void setMouseActivated(bool flag) { m_mouseActivated = flag; }
@@ -719,13 +743,11 @@ public:
bool keyPress(WPARAM, LPARAM, bool systemKeyDown = false);
bool inResizer(LPARAM lParam);
void paint(HDC, LPARAM);
- void paintIntoBackingStore(WebCore::FrameView*, HDC bitmapDC, const WebCore::IntRect& dirtyRect);
void paintIntoWindow(HDC bitmapDC, HDC windowDC, const WebCore::IntRect& dirtyRect);
bool ensureBackingStore();
void addToDirtyRegion(const WebCore::IntRect&);
void addToDirtyRegion(HRGN);
void scrollBackingStore(WebCore::FrameView*, int dx, int dy, const WebCore::IntRect& scrollViewRect, const WebCore::IntRect& clipRect);
- void updateBackingStore(WebCore::FrameView*, HDC = 0, bool backingStoreCompletelyDirty = false);
void deleteBackingStore();
void repaint(const WebCore::IntRect&, bool contentChanged, bool immediate = false, bool repaintContentOnly = false);
void frameRect(RECT* rect);
@@ -802,6 +824,10 @@ private:
HRESULT resetZoom(bool isTextOnly);
bool active();
+ enum WindowsToPaint { PaintWebViewOnly, PaintWebViewAndChildren };
+ void paintIntoBackingStore(WebCore::FrameView*, HDC bitmapDC, const WebCore::IntRect& dirtyRect, WindowsToPaint);
+ void updateBackingStore(WebCore::FrameView*, HDC = 0, bool backingStoreCompletelyDirty = false, WindowsToPaint = PaintWebViewOnly);
+
protected:
HIMC getIMMContext();
void releaseIMMContext(HIMC);
@@ -849,7 +875,6 @@ protected:
WebCore::String m_userAgentCustom;
WebCore::String m_userAgentStandard;
float m_zoomMultiplier;
- bool m_zoomMultiplierIsTextOnly;
WebCore::String m_overrideEncoding;
WebCore::String m_applicationName;
bool m_mouseActivated;
@@ -862,6 +887,7 @@ protected:
unsigned m_paintCount;
bool m_hasSpellCheckerDocumentTag;
bool m_smartInsertDeleteEnabled;
+ bool m_selectTrailingWhitespaceEnabled;
bool m_didClose;
bool m_hasCustomDropTarget;
unsigned m_inIMEComposition;
@@ -877,6 +903,8 @@ protected:
OwnPtr<TRACKMOUSEEVENT> m_mouseOutTracker;
HWND m_topLevelParent;
+
+ OwnPtr<HashSet<WebCore::String> > m_embeddedViewMIMETypes;
};
#endif
diff --git a/WebKit/wx/ChangeLog b/WebKit/wx/ChangeLog
index beb9f8a..a7212f0 100644
--- a/WebKit/wx/ChangeLog
+++ b/WebKit/wx/ChangeLog
@@ -1,3 +1,268 @@
+2009-01-27 Brady Eidson <beidson@apple.com>
+
+ Reviewed by Dan Bernstein
+
+ Rework FrameLoaderClient to work on a CachedFrame basis instead of CachedPage
+
+ * WebKitSupport/FrameLoaderClientWx.cpp:
+ (WebCore::FrameLoaderClientWx::savePlatformDataToCachedFrame):
+ (WebCore::FrameLoaderClientWx::transitionToCommittedFromCachedFrame):
+ * WebKitSupport/FrameLoaderClientWx.h:
+
+2009-01-23 Kevin Ollivier <kevino@theolliviers.com>
+
+ wx build fix, add missing include dir.
+
+ * presets/wxwebkit.bkl:
+
+2009-01-19 Sam Weinig <sam@webkit.org>
+
+ Rubber-stamped by Gavin Barraclough.
+
+ Remove temporary operator-> from JSValuePtr.
+
+ * WebFrame.cpp:
+ (wxWebFrame::RunScript):
+
+2009-01-14 miggilin <mr.diggilin@gmail.com>
+
+ Reviewed by Kevin Ollivier.
+
+ Fixing wx compilation for wx 2.9/trunk.
+
+ * WebFrame.cpp:
+ (wxWebFrame::SetPageSource):
+ * WebView.cpp:
+
+2009-01-12 Kevin Ollivier <kevino@theolliviers.com>
+
+ wx build fix. JSValue* -> JSValuePtr.
+
+ * WebFrame.cpp:
+ (wxWebFrame::RunScript):
+
+2009-01-05 Adam Treat <adam.treat@torchmobile.com>
+
+ Reviewed by George Staikos.
+
+ Build fix for contentsSizeChanged
+
+ * WebKitSupport/ChromeClientWx.cpp:
+ (WebCore::ChromeClientWx::contentsSizeChanged):
+ * WebKitSupport/ChromeClientWx.h:
+
+2008-12-19 miggilin <mr.diggilin@gmail.com>
+
+ Reviewed by Kevin Ollivier.
+
+ Add Context Menu support to wx bindings.
+
+ https://bugs.webkit.org/show_bug.cgi?id=22675
+
+ * WebKitSupport/ContextMenuClientWx.cpp:
+ (WebCore::ContextMenuClientWx::contextMenuDestroyed):
+ (WebCore::ContextMenuClientWx::getCustomMenuFromDefaultItems):
+ * WebView.cpp:
+ (wxWebView::OnMouseEvents):
+ (wxWebView::OnContextMenuEvents):
+ (wxWebView::OnMenuSelectEvents):
+ * WebView.h:
+
+
+2008-12-19 Kevin Ollivier <kevino@theolliviers.com>
+
+ wx build fixes after recent changes.
+
+ * presets/wxwebkit.bkl:
+
+2008-12-18 Dan Bernstein <mitz@apple.com>
+
+ Reviewed by Sam Weinig.
+
+ - stub out FrameLoaderClient::shouldUseCredentialStorage().
+
+ * WebKitSupport/FrameLoaderClientWx.cpp:
+ (WebCore::FrameLoaderClientWx::shouldUseCredentialStorage):
+ * WebKitSupport/FrameLoaderClientWx.h:
+
+2008-12-18 Sam Weinig <sam@webkit.org>
+
+ Reviewed by John Sullivan.
+
+ Stub out FrameLoaderClient::dispatchDidFirstVisuallyNonEmptyLayout()
+
+ * WebKitSupport/FrameLoaderClientWx.cpp:
+ (WebCore::FrameLoaderClientWx::dispatchDidFirstVisuallyNonEmptyLayout):
+ * WebKitSupport/FrameLoaderClientWx.h:
+
+2008-12-13 Kevin Watters <kevinwatters@gmail.com>
+
+ Reviewed by Kevin Ollivier.
+
+ Expose findString in wxWebView as FindString.
+
+ https://bugs.webkit.org/show_bug.cgi?id=22458
+
+ * WebView.cpp:
+ (wxWebView::FindString):
+ * WebView.h:
+
+2008-12-09 Brett Wilson <brettw@chromium.org>
+
+ Reviewed by Dave Hyatt.
+
+ https://bugs.webkit.org/show_bug.cgi?id=22177
+
+ Add a callback on ChromeClient that the state of form elements on
+ the page has changed. This is to allow clients implementing session
+ saving to know when the current state is dirty.
+
+ * WebKitSupport/ChromeClientWx.h:
+ (WebCore::ChromeClientWx::formStateDidChange):
+
+2008-12-02 Kevin Watters <kevinwatters@gmail.com>
+
+ Reviewed by Kevin Ollivier.
+
+ Add HitTest to wxWebView (and wxWebFrame).
+
+ https://bugs.webkit.org/show_bug.cgi?id=22459
+
+ * WebFrame.cpp:
+ (wxWebFrame::HitTest):
+ * WebFrame.h:
+ * WebView.cpp:
+ (wxWebView::HitTest):
+ * WebView.h:
+
+2008-11-24 Darin Fisher <darin@chromium.org>
+
+ Fix bustage.
+
+ http://bugs.webkit.org/show_bug.cgi?id=15643
+
+ * WebKitSupport/EditorClientWx.cpp:
+ (WebCore::EditorClientWx::isSelectTrailingWhitespaceEnabled):
+ * WebKitSupport/EditorClientWx.h:
+
+2008-11-24 Darin Adler <darin@apple.com>
+
+ Reviewed by Dan Bernstein.
+
+ - https://bugs.webkit.org/show_bug.cgi?id=22470
+ remove unneeded URL argument from FrameLoaderClient::updateGlobalHistory
+
+ * WebKitSupport/FrameLoaderClientWx.cpp:
+ (WebCore::FrameLoaderClientWx::updateGlobalHistory): Remove argument.
+ * WebKitSupport/FrameLoaderClientWx.h: Ditto.
+
+2008-11-21 Kevin Watters <kevinwatters@gmail.com>
+
+ Reviewed by Kevin Ollivier.
+
+ Maintain an EditCommand stack in WebFramePrivate, and expose Undo and
+ Redo in wxWebView.
+
+ https://bugs.webkit.org/show_bug.cgi?id=22403
+
+ * WebFrame.cpp:
+ (wxWebFrame::wxWebFrame):
+ (wxWebFrame::Undo):
+ (wxWebFrame::Redo):
+ (wxWebFrame::CanUndo):
+ (wxWebFrame::CanRedo):
+ * WebFrame.h:
+ * WebFramePrivate.h: Added.
+ (WebFramePrivate::WebFramePrivate):
+ * WebKitSupport/ChromeClientWx.cpp:
+ (WebCore::ChromeClientWx::createWindow):
+ * WebKitSupport/EditCommandWx.h: Added.
+ (EditCommandWx::EditCommandWx):
+ (EditCommandWx::~EditCommandWx):
+ (EditCommandWx::editCommand):
+ * WebKitSupport/EditorClientWx.cpp:
+ (WebCore::EditorClientWx::registerCommandForUndo):
+ (WebCore::EditorClientWx::registerCommandForRedo):
+ (WebCore::EditorClientWx::canUndo):
+ (WebCore::EditorClientWx::canRedo):
+ (WebCore::EditorClientWx::undo):
+ (WebCore::EditorClientWx::redo):
+ * WebKitSupport/EditorClientWx.h:
+ * WebView.cpp:
+ (wxWebView::OnMouseEvents):
+ (wxWebView::OnKeyEvents):
+ * WebViewPrivate.h:
+
+2008-11-19 Darin Fisher <darin@chromium.org>
+
+ Reviewed by Geoff Garen.
+
+ https://bugs.webkit.org/show_bug.cgi?id=22345
+ Define ScriptValue as a thin container for a JSC::Value*.
+
+ * WebFrame.cpp:
+ (wxWebFrame::RunScript):
+
+2008-11-17 Geoffrey Garen <ggaren@apple.com>
+
+ Reviewed by Sam Weinig.
+
+ Updated for JavaScriptCore renames.
+
+ * presets/wxwebkit.bkl:
+
+2008-11-17 Geoffrey Garen <ggaren@apple.com>
+
+ Reviewed by Sam Weinig.
+
+ Updated for JavaScriptCore renames.
+
+ * presets/wxwebkit.bkl:
+
+2008-11-17 Geoffrey Garen <ggaren@apple.com>
+
+ Not reviewed.
+
+ Try to fix wx build.
+
+ * presets/wxwebkit.bkl:
+
+2008-11-15 Kevin Watters <kevinwatters@gmail.com>
+
+ Reviewed by Kevin Ollivier.
+
+ Add API for setting transparent webview background.
+
+ https://bugs.webkit.org/show_bug.cgi?id=22281
+
+ * WebView.cpp:
+ (wxWebView::SetTransparent):
+ (wxWebView::IsTransparent):
+ * WebView.h:
+
+2008-11-11 Cameron Zwarich <zwarich@apple.com>
+
+ Reviewed by Geoff Garen.
+
+ Remove pointless dependencies on the deleted kjs directory.
+
+ * presets/wxwebkit.bkl:
+
+2008-11-08 Kevin Ollivier <kevino@theolliviers.com>
+
+ wx build fixes after addition of JSCore parser and bycompiler dirs.
+
+ * presets/wxwebkit.bkl:
+
+2008-11-05 Cameron Zwarich <zwarich@apple.com>
+
+ Rubber-stamped by Sam Weinig.
+
+ Move more files to the runtime subdirectory of JavaScriptCore.
+
+ * WebFrame.cpp:
+ * WebView.cpp:
+
2008-10-31 Kevin Ollivier <kevino@theolliviers.com>
wxMSW build fix. Missing header.
diff --git a/WebKit/wx/WebFrame.cpp b/WebKit/wx/WebFrame.cpp
index b1f03e0..7bfcc5d 100644
--- a/WebKit/wx/WebFrame.cpp
+++ b/WebKit/wx/WebFrame.cpp
@@ -28,9 +28,11 @@
#include "Document.h"
#include "Editor.h"
#include "Element.h"
+#include "EventHandler.h"
#include "Frame.h"
#include "FrameLoader.h"
#include "FrameView.h"
+#include "HitTestResult.h"
#include "HTMLFrameOwnerElement.h"
#include "markup.h"
#include "Page.h"
@@ -42,9 +44,10 @@
#include "FrameLoaderClientWx.h"
#include "ScriptController.h"
+#include "ScriptValue.h"
#include "JSDOMBinding.h"
#include <runtime/JSValue.h>
-#include <kjs/ustring.h>
+#include <runtime/UString.h>
#include "wx/wxprec.h"
#ifndef WX_PRECOMP
@@ -53,6 +56,7 @@
#include "WebFrame.h"
#include "WebView.h"
+#include "WebFramePrivate.h"
#include "WebViewPrivate.h"
#include <wx/defs.h>
@@ -71,7 +75,7 @@ wxWebFrame::wxWebFrame(wxWebView* container, wxWebFrame* parent, WebViewFrameDat
m_title(wxEmptyString)
{
- m_impl = new WebViewPrivate();
+ m_impl = new WebFramePrivate();
WebCore::HTMLFrameOwnerElement* parentFrame = 0;
@@ -138,7 +142,7 @@ void wxWebFrame::SetPageSource(const wxString& source, const wxString& baseUrl)
if (m_impl->frame && m_impl->frame->loader()) {
WebCore::FrameLoader* loader = m_impl->frame->loader();
loader->begin(WebCore::KURL(static_cast<const char*>(baseUrl.mb_str(wxConvUTF8))));
- loader->write(source);
+ loader->write(static_cast<const WebCore::String>(source));
loader->end();
}
}
@@ -172,13 +176,21 @@ wxString wxWebFrame::RunScript(const wxString& javascript)
{
wxString returnValue = wxEmptyString;
if (m_impl->frame) {
- JSC::JSValue* result = m_impl->frame->loader()->executeScript(javascript, true);
+ JSC::JSValuePtr result = m_impl->frame->loader()->executeScript(javascript, true).jsValue();
if (result)
- returnValue = wxString(result->toString(m_impl->frame->script()->globalObject()->globalExec()).UTF8String().c_str(), wxConvUTF8);
+ returnValue = wxString(result.toString(m_impl->frame->script()->globalObject()->globalExec()).UTF8String().c_str(), wxConvUTF8);
}
return returnValue;
}
+bool wxWebFrame::FindString(const wxString& string, bool forward, bool caseSensitive, bool wrapSelection, bool startInSelection)
+{
+ if (m_impl->frame)
+ return m_impl->frame->findString(string, forward, caseSensitive, wrapSelection, startInSelection);
+
+ return false;
+}
+
void wxWebFrame::LoadURL(const wxString& url)
{
if (m_impl->frame && m_impl->frame->loader()) {
@@ -232,6 +244,35 @@ bool wxWebFrame::CanGoForward()
return false;
}
+
+void wxWebFrame::Undo()
+{
+ if (m_impl->frame && m_impl->frame->editor() && CanUndo())
+ return m_impl->frame->editor()->undo();
+}
+
+void wxWebFrame::Redo()
+{
+ if (m_impl->frame && m_impl->frame->editor() && CanRedo())
+ return m_impl->frame->editor()->redo();
+}
+
+bool wxWebFrame::CanUndo()
+{
+ if (m_impl->frame && m_impl->frame->editor())
+ return m_impl->frame->editor()->canUndo();
+
+ return false;
+}
+
+bool wxWebFrame::CanRedo()
+{
+ if (m_impl->frame && m_impl->frame->editor())
+ return m_impl->frame->editor()->canRedo();
+
+ return false;
+}
+
bool wxWebFrame::CanIncreaseTextSize() const
{
if (m_impl->frame) {
@@ -315,3 +356,21 @@ void wxWebFrame::Paste()
m_impl->frame->editor()->paste();
}
+
+wxWebViewDOMElementInfo wxWebFrame::HitTest(const wxPoint& pos) const
+{
+ wxWebViewDOMElementInfo domInfo;
+
+ if (m_impl->frame->view()) {
+ WebCore::HitTestResult result = m_impl->frame->eventHandler()->hitTestResultAtPoint(m_impl->frame->view()->windowToContents(pos), false);
+ if (result.innerNode()) {
+ domInfo.SetLink(result.absoluteLinkURL().string());
+ domInfo.SetText(result.textContent());
+ domInfo.SetImageSrc(result.absoluteImageURL().string());
+ domInfo.SetSelected(result.isSelected());
+ }
+ }
+
+ return domInfo;
+}
+
diff --git a/WebKit/wx/WebFrame.h b/WebKit/wx/WebFrame.h
index a6961eb..5c697d6 100644
--- a/WebKit/wx/WebFrame.h
+++ b/WebKit/wx/WebFrame.h
@@ -33,13 +33,14 @@
#include "wx/wx.h"
#endif
-class WebViewPrivate;
+class WebFramePrivate;
class WebViewFrameData;
class wxWebView;
namespace WebCore {
class ChromeClientWx;
class FrameLoaderClientWx;
+ class EditorClientWx;
class Frame;
}
@@ -57,12 +58,44 @@ namespace WebCore {
#define WXDLLIMPEXP_WEBKIT
#endif // SWIG
+class WXDLLIMPEXP_WEBKIT wxWebViewDOMElementInfo
+{
+public:
+ wxWebViewDOMElementInfo();
+
+ ~wxWebViewDOMElementInfo() { }
+
+ wxString GetTagName() const { return m_tagName; }
+ void SetTagName(const wxString& name) { m_tagName = name; }
+
+ bool IsSelected() const { return m_isSelected; }
+ void SetSelected(bool sel) { m_isSelected = sel; }
+
+ wxString GetText() const { return m_text; }
+ void SetText(const wxString& text) { m_text = text; }
+
+ wxString GetImageSrc() const { return m_imageSrc; }
+ void SetImageSrc(const wxString& src) { m_imageSrc = src; }
+
+ wxString GetLink() const { return m_link; }
+ void SetLink(const wxString& link) { m_link = link; }
+
+private:
+ void* m_domElement;
+ bool m_isSelected;
+ wxString m_tagName;
+ wxString m_text;
+ wxString m_imageSrc;
+ wxString m_link;
+};
+
class WXDLLIMPEXP_WEBKIT wxWebFrame
{
// ChromeClientWx needs to get the Page* stored by the wxWebView
// for the createWindow function.
friend class WebCore::ChromeClientWx;
friend class WebCore::FrameLoaderClientWx;
+ friend class WebCore::EditorClientWx;
friend class wxWebView;
wxWebFrame(wxWebView* container, wxWebFrame* parent = NULL, WebViewFrameData* data = NULL);
@@ -86,6 +119,12 @@ class WXDLLIMPEXP_WEBKIT wxWebFrame
void Copy();
void Paste();
+ bool CanUndo();
+ bool CanRedo();
+
+ void Undo();
+ void Redo();
+
wxString GetPageSource();
void SetPageSource(const wxString& source, const wxString& baseUrl = wxEmptyString);
@@ -95,6 +134,10 @@ class WXDLLIMPEXP_WEBKIT wxWebFrame
wxString RunScript(const wxString& javascript);
+ bool FindString(const wxString& string, bool forward = true,
+ bool caseSensitive = false, bool wrapSelection = true,
+ bool startInSelection = true);
+
bool CanIncreaseTextSize() const;
void IncreaseTextSize();
bool CanDecreaseTextSize() const;
@@ -106,13 +149,15 @@ class WXDLLIMPEXP_WEBKIT wxWebFrame
void SetPageTitle(const wxString& title) { m_title = title; }
WebCore::Frame* GetFrame();
+
+ wxWebViewDOMElementInfo HitTest(const wxPoint& post) const;
private:
float m_textMagnifier;
bool m_isEditable;
bool m_isInitialized;
bool m_beingDestroyed;
- WebViewPrivate* m_impl;
+ WebFramePrivate* m_impl;
wxString m_title;
};
diff --git a/WebKit/mac/Plugins/WebPlugInStreamLoaderDelegate.h b/WebKit/wx/WebFramePrivate.h
index c21fe4c..7af70a8 100644
--- a/WebKit/mac/Plugins/WebPlugInStreamLoaderDelegate.h
+++ b/WebKit/wx/WebFramePrivate.h
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2006 Apple Computer, Inc. All rights reserved.
+ * Copyright (C) 2008 Kevin Ollivier. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
@@ -25,24 +25,28 @@
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
-
-@class NSURLResponse;
-@class NSError;
-@class NSData;
-
-@protocol WebPlugInStreamLoaderDelegate
-
-- (void)startStreamWithResponse:(NSURLResponse *)r;
-
-// destroyStreamWithError tells the plug-in that the load is completed (error == nil) or ended in error.
-- (void)destroyStreamWithError:(NSError *)error;
-
-// cancelLoadAndDestoryStreamWithError calls cancelLoadWithError: then destroyStreamWithError:.
-- (void)cancelLoadAndDestroyStreamWithError:(NSError *)error;
-
-- (void)receivedData:(NSData *)data;
-- (void)finishedLoading;
-
-- (BOOL)wantsAllStreams;
-
-@end
+
+#ifndef WXWEBFRAMEPRIVATE_H
+#define WXWEBFRAMEPRIVATE_H
+
+#include "config.h"
+#include "EditCommand.h"
+#include "EditCommandWx.h"
+#include "Frame.h"
+#include "wtf/RefPtr.h"
+#include "wtf/Vector.h"
+
+class WebFramePrivate {
+
+public:
+ WebFramePrivate() :
+ frame(0)
+ {}
+
+ WTF::Vector<EditCommandWx> undoStack;
+ WTF::Vector<EditCommandWx> redoStack;
+
+ WTF::RefPtr<WebCore::Frame> frame;
+};
+
+#endif
diff --git a/WebKit/wx/WebKitSupport/ChromeClientWx.cpp b/WebKit/wx/WebKitSupport/ChromeClientWx.cpp
index 3d119a5..29fef0e 100644
--- a/WebKit/wx/WebKitSupport/ChromeClientWx.cpp
+++ b/WebKit/wx/WebKitSupport/ChromeClientWx.cpp
@@ -122,7 +122,7 @@ Page* ChromeClientWx::createWindow(Frame*, const FrameLoadRequest& request, cons
WebViewPrivate* impl = newFrame->webview->m_impl;
if (impl)
- myPage = impl->frame->page();
+ myPage = impl->page;
}
return myPage;
@@ -314,6 +314,11 @@ PlatformWidget ChromeClientWx::platformWindow() const
return 0;
}
+void ChromeClientWx::contentsSizeChanged(Frame*, const IntSize&) const
+{
+ notImplemented();
+}
+
void ChromeClientWx::scrollBackingStore(int dx, int dy,
const IntRect& scrollViewRect,
const IntRect& clipRect)
diff --git a/WebKit/wx/WebKitSupport/ChromeClientWx.h b/WebKit/wx/WebKitSupport/ChromeClientWx.h
index d90788f..74e0023 100644
--- a/WebKit/wx/WebKitSupport/ChromeClientWx.h
+++ b/WebKit/wx/WebKitSupport/ChromeClientWx.h
@@ -102,6 +102,7 @@ public:
virtual IntPoint screenToWindow(const IntPoint&) const;
virtual IntRect windowToScreen(const IntRect&) const;
virtual PlatformWidget platformWindow() const;
+ virtual void contentsSizeChanged(Frame*, const IntSize&) const;
virtual void mouseDidMoveOverElement(const HitTestResult&, unsigned modifierFlags);
@@ -113,6 +114,8 @@ public:
virtual void runOpenPanel(Frame*, PassRefPtr<FileChooser>);
+ virtual void formStateDidChange(const Node*) { }
+
private:
wxWebView* m_webView;
};
diff --git a/WebKit/wx/WebKitSupport/ContextMenuClientWx.cpp b/WebKit/wx/WebKitSupport/ContextMenuClientWx.cpp
index 8f88f1a..e3d8e5a 100644
--- a/WebKit/wx/WebKitSupport/ContextMenuClientWx.cpp
+++ b/WebKit/wx/WebKitSupport/ContextMenuClientWx.cpp
@@ -28,6 +28,7 @@
#include "config.h"
#include "ContextMenuClientWx.h"
#include "NotImplemented.h"
+#include "ContextMenu.h"
#include <stdio.h>
namespace WebCore {
@@ -38,13 +39,12 @@ ContextMenuClientWx::~ContextMenuClientWx()
void ContextMenuClientWx::contextMenuDestroyed()
{
- notImplemented();
+ delete this;
}
-PlatformMenuDescription ContextMenuClientWx::getCustomMenuFromDefaultItems(ContextMenu*)
+PlatformMenuDescription ContextMenuClientWx::getCustomMenuFromDefaultItems(ContextMenu* menu)
{
- notImplemented();
- return 0;
+ return menu->releasePlatformDescription();
}
void ContextMenuClientWx::contextMenuItemSelected(ContextMenuItem*,
diff --git a/WebKit/wx/WebKitSupport/EditCommandWx.h b/WebKit/wx/WebKitSupport/EditCommandWx.h
new file mode 100644
index 0000000..e5deedd
--- /dev/null
+++ b/WebKit/wx/WebKitSupport/EditCommandWx.h
@@ -0,0 +1,54 @@
+/*
+ * Copyright (C) 2008 Kevin Ollivier. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ * 3. Neither the name of Apple Computer, Inc. ("Apple") nor the names of
+ * its contributors may be used to endorse or promote products derived
+ * from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY APPLE AND ITS CONTRIBUTORS "AS IS" AND ANY
+ * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+ * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+ * DISCLAIMED. IN NO EVENT SHALL APPLE OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+ * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+ * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+ * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+ * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#ifndef WXEDITCOMMAND_H
+#define WXEDITCOMMAND_H
+
+#include <wtf/PassRefPtr.h>
+#include <wtf/RefPtr.h>
+
+namespace WebCore {
+ class EditCommand;
+}
+
+class EditCommandWx
+{
+public:
+ EditCommandWx(WTF::PassRefPtr<WebCore::EditCommand> command)
+ {
+ m_editCommand = command;
+ }
+
+ ~EditCommandWx() {}
+ WTF::PassRefPtr<WebCore::EditCommand> editCommand() { return m_editCommand; }
+
+private:
+ WTF::RefPtr<WebCore::EditCommand> m_editCommand;
+};
+
+#endif
diff --git a/WebKit/wx/WebKitSupport/EditorClientWx.cpp b/WebKit/wx/WebKitSupport/EditorClientWx.cpp
index ade0f41..6c443ed 100644
--- a/WebKit/wx/WebKitSupport/EditorClientWx.cpp
+++ b/WebKit/wx/WebKitSupport/EditorClientWx.cpp
@@ -39,7 +39,11 @@
#include "PlatformKeyboardEvent.h"
#include "PlatformString.h"
#include "SelectionController.h"
+
+#include "WebFrame.h"
+#include "WebFramePrivate.h"
#include "WebView.h"
+#include "WebViewPrivate.h"
#include <stdio.h>
@@ -78,6 +82,12 @@ bool EditorClientWx::smartInsertDeleteEnabled()
return false;
}
+bool EditorClientWx::isSelectTrailingWhitespaceEnabled()
+{
+ notImplemented();
+ return false;
+}
+
bool EditorClientWx::isContinuousSpellCheckingEnabled()
{
notImplemented();
@@ -195,14 +205,28 @@ void EditorClientWx::didSetSelectionTypesForPasteboard()
notImplemented();
}
-void EditorClientWx::registerCommandForUndo(PassRefPtr<EditCommand>)
+void EditorClientWx::registerCommandForUndo(PassRefPtr<EditCommand> command)
{
- notImplemented();
+ Frame* frame = m_page->focusController()->focusedOrMainFrame();
+
+ if (frame) {
+ wxWebView* webKitWin = dynamic_cast<wxWebView*>(frame->view()->platformWidget());
+ if (webKitWin) {
+ webKitWin->GetMainFrame()->m_impl->undoStack.append(EditCommandWx(command));
+ }
+ }
}
-void EditorClientWx::registerCommandForRedo(PassRefPtr<EditCommand>)
+void EditorClientWx::registerCommandForRedo(PassRefPtr<EditCommand> command)
{
- notImplemented();
+ Frame* frame = m_page->focusController()->focusedOrMainFrame();
+
+ if (frame) {
+ wxWebView* webKitWin = dynamic_cast<wxWebView*>(frame->view()->platformWidget());
+ if (webKitWin) {
+ webKitWin->GetMainFrame()->m_impl->redoStack.insert(0, EditCommandWx(command));
+ }
+ }
}
void EditorClientWx::clearUndoRedoOperations()
@@ -212,24 +236,54 @@ void EditorClientWx::clearUndoRedoOperations()
bool EditorClientWx::canUndo() const
{
- notImplemented();
+ Frame* frame = m_page->focusController()->focusedOrMainFrame();
+
+ if (frame) {
+ wxWebView* webKitWin = dynamic_cast<wxWebView*>(frame->view()->platformWidget());
+ if (webKitWin && webKitWin->GetMainFrame()) {
+ return webKitWin->GetMainFrame()->m_impl->undoStack.size() != 0;
+ }
+ }
return false;
}
bool EditorClientWx::canRedo() const
{
- notImplemented();
+ Frame* frame = m_page->focusController()->focusedOrMainFrame();
+
+ if (frame) {
+ wxWebView* webKitWin = dynamic_cast<wxWebView*>(frame->view()->platformWidget());
+ if (webKitWin && webKitWin->GetMainFrame()) {
+ return webKitWin->GetMainFrame()->m_impl->redoStack.size() != 0;
+ }
+ }
return false;
}
void EditorClientWx::undo()
{
- notImplemented();
+ Frame* frame = m_page->focusController()->focusedOrMainFrame();
+
+ if (frame) {
+ wxWebView* webKitWin = dynamic_cast<wxWebView*>(frame->view()->platformWidget());
+ if (webKitWin && webKitWin->GetMainFrame()) {
+ webKitWin->GetMainFrame()->m_impl->undoStack.last().editCommand()->unapply();
+ webKitWin->GetMainFrame()->m_impl->undoStack.removeLast();
+ }
+ }
}
void EditorClientWx::redo()
{
- notImplemented();
+ Frame* frame = m_page->focusController()->focusedOrMainFrame();
+
+ if (frame) {
+ wxWebView* webKitWin = dynamic_cast<wxWebView*>(frame->view()->platformWidget());
+ if (webKitWin && webKitWin->GetMainFrame()) {
+ webKitWin->GetMainFrame()->m_impl->redoStack.first().editCommand()->reapply();
+ webKitWin->GetMainFrame()->m_impl->redoStack.remove(0);
+ }
+ }
}
void EditorClientWx::handleInputMethodKeydown(KeyboardEvent* event)
diff --git a/WebKit/wx/WebKitSupport/EditorClientWx.h b/WebKit/wx/WebKitSupport/EditorClientWx.h
index 51b820c..0f98167 100644
--- a/WebKit/wx/WebKitSupport/EditorClientWx.h
+++ b/WebKit/wx/WebKitSupport/EditorClientWx.h
@@ -31,9 +31,15 @@
#include "EditorClient.h"
#include "Page.h"
+#include "WebView.h"
+#include "WebFrame.h"
+
namespace WebCore {
class EditorClientWx : public EditorClient {
+friend class ::wxWebView;
+friend class ::wxWebFrame;
+
public:
virtual ~EditorClientWx();
void setPage(Page*);
@@ -42,6 +48,7 @@ public:
virtual bool shouldDeleteRange(Range*);
virtual bool shouldShowDeleteInterface(HTMLElement*);
virtual bool smartInsertDeleteEnabled();
+ virtual bool isSelectTrailingWhitespaceEnabled();
virtual bool isContinuousSpellCheckingEnabled();
virtual void toggleContinuousSpellChecking();
virtual bool isGrammarCheckingEnabled();
diff --git a/WebKit/wx/WebKitSupport/FrameLoaderClientWx.cpp b/WebKit/wx/WebKitSupport/FrameLoaderClientWx.cpp
index 685da65..a34576d 100644
--- a/WebKit/wx/WebKitSupport/FrameLoaderClientWx.cpp
+++ b/WebKit/wx/WebKitSupport/FrameLoaderClientWx.cpp
@@ -227,13 +227,6 @@ void FrameLoaderClientWx::detachedFromParent3()
notImplemented();
}
-
-void FrameLoaderClientWx::loadedFromCachedPage()
-{
- notImplemented();
-}
-
-
void FrameLoaderClientWx::dispatchDidHandleOnloadEvents()
{
if (m_webView) {
@@ -330,6 +323,10 @@ void FrameLoaderClientWx::dispatchDidFirstLayout()
notImplemented();
}
+void FrameLoaderClientWx::dispatchDidFirstVisuallyNonEmptyLayout()
+{
+ notImplemented();
+}
void FrameLoaderClientWx::dispatchShow()
{
@@ -529,7 +526,7 @@ void FrameLoaderClientWx::partClearedInBegin()
notImplemented();
}
-void FrameLoaderClientWx::updateGlobalHistory(const WebCore::KURL&)
+void FrameLoaderClientWx::updateGlobalHistory()
{
notImplemented();
}
@@ -626,6 +623,12 @@ void FrameLoaderClientWx::dispatchWillSendRequest(DocumentLoader*, unsigned long
notImplemented();
}
+bool FrameLoaderClientWx::shouldUseCredentialStorage(DocumentLoader*, unsigned long)
+{
+ notImplemented();
+ return false;
+}
+
void FrameLoaderClientWx::dispatchDidReceiveAuthenticationChallenge(DocumentLoader*, unsigned long, const AuthenticationChallenge&)
{
notImplemented();
@@ -834,12 +837,12 @@ void FrameLoaderClientWx::registerForIconNotification(bool listen)
notImplemented();
}
-void FrameLoaderClientWx::savePlatformDataToCachedPage(CachedPage*)
+void FrameLoaderClientWx::savePlatformDataToCachedFrame(CachedFrame*)
{
notImplemented();
}
-void FrameLoaderClientWx::transitionToCommittedFromCachedPage(CachedPage*)
+void FrameLoaderClientWx::transitionToCommittedFromCachedFrame(CachedFrame*)
{
notImplemented();
}
diff --git a/WebKit/wx/WebKitSupport/FrameLoaderClientWx.h b/WebKit/wx/WebKitSupport/FrameLoaderClientWx.h
index 3b525b1..9ad4ddc 100644
--- a/WebKit/wx/WebKitSupport/FrameLoaderClientWx.h
+++ b/WebKit/wx/WebKitSupport/FrameLoaderClientWx.h
@@ -90,8 +90,6 @@ namespace WebCore {
virtual void detachedFromParent2();
virtual void detachedFromParent3();
- virtual void loadedFromCachedPage();
-
virtual void frameLoaderDestroyed();
virtual bool canHandleRequest(const ResourceRequest&) const;
@@ -108,6 +106,7 @@ namespace WebCore {
virtual void dispatchDidFinishDocumentLoad();
virtual void dispatchDidFinishLoad();
virtual void dispatchDidFirstLayout();
+ virtual void dispatchDidFirstVisuallyNonEmptyLayout();
virtual void dispatchShow();
virtual void cancelPolicyCheck();
@@ -145,11 +144,11 @@ namespace WebCore {
virtual String userAgent(const KURL&);
- virtual void savePlatformDataToCachedPage(WebCore::CachedPage*);
- virtual void transitionToCommittedFromCachedPage(WebCore::CachedPage*);
+ virtual void savePlatformDataToCachedFrame(WebCore::CachedFrame*);
+ virtual void transitionToCommittedFromCachedFrame(WebCore::CachedFrame*);
virtual void transitionToCommittedForNewPage();
- virtual void updateGlobalHistory(const KURL&);
+ virtual void updateGlobalHistory();
virtual bool shouldGoToHistoryItem(HistoryItem*) const;
virtual void saveScrollPositionAndViewStateToItem(HistoryItem*);
virtual bool canCachePage() const;
@@ -169,6 +168,7 @@ namespace WebCore {
virtual void assignIdentifierToInitialRequest(unsigned long identifier, DocumentLoader*, const ResourceRequest&);
virtual void dispatchWillSendRequest(DocumentLoader*, unsigned long, ResourceRequest&, const ResourceResponse&);
+ virtual bool shouldUseCredentialStorage(DocumentLoader*, unsigned long identifier);
virtual void dispatchDidReceiveAuthenticationChallenge(DocumentLoader*, unsigned long identifier, const AuthenticationChallenge&);
virtual void dispatchDidCancelAuthenticationChallenge(DocumentLoader*, unsigned long identifier, const AuthenticationChallenge&);
virtual void dispatchDidReceiveResponse(DocumentLoader*, unsigned long, const ResourceResponse&);
diff --git a/WebKit/wx/WebView.cpp b/WebKit/wx/WebView.cpp
index fb2164f..6ed8aef 100644
--- a/WebKit/wx/WebView.cpp
+++ b/WebKit/wx/WebView.cpp
@@ -37,6 +37,9 @@
#include "Logging.h"
#include "markup.h"
#include "Page.h"
+#include "ContextMenu.h"
+#include "ContextMenuItem.h"
+#include "ContextMenuController.h"
#include "PlatformKeyboardEvent.h"
#include "PlatformMouseEvent.h"
#include "PlatformString.h"
@@ -57,7 +60,7 @@
#include "ScriptController.h"
#include "JSDOMBinding.h"
#include <runtime/JSValue.h>
-#include <kjs/ustring.h>
+#include <runtime/UString.h>
#include "wx/wxprec.h"
#ifndef WX_PRECOMP
@@ -70,6 +73,7 @@
#include <wx/defs.h>
#include <wx/dcbuffer.h>
+#include <wx/dcgraph.h>
#if defined(_MSC_VER)
int rint(double val)
@@ -172,6 +176,8 @@ BEGIN_EVENT_TABLE(wxWebView, wxWindow)
EVT_PAINT(wxWebView::OnPaint)
EVT_SIZE(wxWebView::OnSize)
EVT_MOUSE_EVENTS(wxWebView::OnMouseEvents)
+ EVT_CONTEXT_MENU(wxWebView::OnContextMenuEvents)
+ EVT_MENU(wxID_ANY, wxWebView::OnMenuSelectEvents)
EVT_KEY_DOWN(wxWebView::OnKeyEvents)
EVT_KEY_UP(wxWebView::OnKeyEvents)
EVT_CHAR(wxWebView::OnKeyEvents)
@@ -312,6 +318,30 @@ wxString wxWebView::GetExternalRepresentation()
return wxEmptyString;
}
+void wxWebView::SetTransparent(bool transparent)
+{
+ WebCore::Frame* frame = 0;
+ if (m_mainFrame)
+ frame = m_mainFrame->GetFrame();
+
+ if (!frame || !frame->view())
+ return;
+
+ frame->view()->setTransparent(transparent);
+}
+
+bool wxWebView::IsTransparent() const
+{
+ WebCore::Frame* frame = 0;
+ if (m_mainFrame)
+ frame = m_mainFrame->GetFrame();
+
+ if (!frame || !frame->view())
+ return false;
+
+ return frame->view()->isTransparent();
+}
+
wxString wxWebView::RunScript(const wxString& javascript)
{
if (m_mainFrame)
@@ -439,6 +469,14 @@ void wxWebView::OnPaint(wxPaintEvent& event)
}
}
+bool wxWebView::FindString(const wxString& string, bool forward, bool caseSensitive, bool wrapSelection, bool startInSelection)
+{
+ if (m_mainFrame)
+ return m_mainFrame->FindString(string, forward, caseSensitive, wrapSelection, startInSelection);
+
+ return false;
+}
+
void wxWebView::OnSize(wxSizeEvent& event)
{
if (m_isInitialized && m_mainFrame) {
@@ -474,17 +512,60 @@ void wxWebView::OnMouseEvents(wxMouseEvent& event)
WebCore::PlatformMouseEvent wkEvent(event, globalPoint);
- if (type == wxEVT_LEFT_DOWN || type == wxEVT_MIDDLE_DOWN || type == wxEVT_RIGHT_DOWN)
+ if (type == wxEVT_LEFT_DOWN || type == wxEVT_MIDDLE_DOWN || type == wxEVT_RIGHT_DOWN ||
+ type == wxEVT_LEFT_DCLICK || type == wxEVT_MIDDLE_DCLICK || type == wxEVT_RIGHT_DCLICK)
frame->eventHandler()->handleMousePressEvent(wkEvent);
- else if (type == wxEVT_LEFT_UP || type == wxEVT_MIDDLE_UP || type == wxEVT_RIGHT_UP ||
- type == wxEVT_LEFT_DCLICK || type == wxEVT_MIDDLE_DCLICK || type == wxEVT_RIGHT_DCLICK)
+ else if (type == wxEVT_LEFT_UP || type == wxEVT_MIDDLE_UP || type == wxEVT_RIGHT_UP)
frame->eventHandler()->handleMouseReleaseEvent(wkEvent);
else if (type == wxEVT_MOTION)
frame->eventHandler()->mouseMoved(wkEvent);
}
+void wxWebView::OnContextMenuEvents(wxContextMenuEvent& event)
+{
+ m_impl->page->contextMenuController()->clearContextMenu();
+ wxPoint localEventPoint = ScreenToClient(event.GetPosition());
+
+ if (!m_mainFrame)
+ return;
+
+ WebCore::Frame* focusedFrame = m_mainFrame->GetFrame();
+ if (!focusedFrame->view())
+ return;
+
+ //Create WebCore mouse event from the wxContextMenuEvent
+ wxMouseEvent mouseEvent(wxEVT_RIGHT_DOWN);
+ mouseEvent.m_x = localEventPoint.x;
+ mouseEvent.m_y = localEventPoint.y;
+ WebCore::PlatformMouseEvent wkEvent(mouseEvent, event.GetPosition());
+
+ bool handledEvent = focusedFrame->eventHandler()->sendContextMenuEvent(wkEvent);
+ if (!handledEvent)
+ return;
+
+ WebCore::ContextMenu* coreMenu = m_impl->page->contextMenuController()->contextMenu();
+ if (!coreMenu)
+ return;
+
+ WebCore::PlatformMenuDescription menuWx = coreMenu->platformDescription();
+ if (!menuWx)
+ return;
+
+ PopupMenu(menuWx, localEventPoint);
+}
+
+void wxWebView::OnMenuSelectEvents(wxCommandEvent& event)
+{
+ WebCore::ContextMenuItem* item = WebCore::ContextMenu::itemWithId (event.GetId());
+ if (!item)
+ return;
+
+ m_impl->page->contextMenuController()->contextMenuItemSelected(item);
+ delete item;
+}
+
bool wxWebView::CanCopy()
{
if (m_mainFrame)
@@ -538,13 +619,24 @@ void wxWebView::OnKeyEvents(wxKeyEvent& event)
// WebCore doesn't handle these events itself, so we need to do
// it and not send the event down or else CTRL+C will erase the text
// and replace it with c.
- if (event.CmdDown() && event.GetKeyCode() == static_cast<int>('C'))
- Copy();
- else if (event.CmdDown() && event.GetKeyCode() == static_cast<int>('X'))
- Cut();
- else if (event.CmdDown() && event.GetKeyCode() == static_cast<int>('V'))
- Paste();
- else {
+ if (event.CmdDown() && event.GetEventType() == wxEVT_KEY_UP) {
+ if (event.GetKeyCode() == static_cast<int>('C'))
+ Copy();
+ else if (event.GetKeyCode() == static_cast<int>('X'))
+ Cut();
+ else if (event.GetKeyCode() == static_cast<int>('V'))
+ Paste();
+ else if (event.GetKeyCode() == static_cast<int>('Z')) {
+ if (event.ShiftDown()) {
+ if (m_mainFrame->CanRedo())
+ m_mainFrame->Redo();
+ }
+ else {
+ if (m_mainFrame->CanUndo())
+ m_mainFrame->Undo();
+ }
+ }
+ } else {
WebCore::PlatformKeyboardEvent wkEvent(event);
if (wkEvent.type() == WebCore::PlatformKeyboardEvent::Char && wkEvent.altKey())
frame->eventHandler()->handleAccessKey(wkEvent);
@@ -592,3 +684,12 @@ void wxWebView::OnActivate(wxActivateEvent& event)
event.Skip();
}
+
+wxWebViewDOMElementInfo wxWebView::HitTest(const wxPoint& pos) const
+{
+ if (m_mainFrame)
+ return m_mainFrame->HitTest(pos);
+
+ return wxWebViewDOMElementInfo();
+}
+
diff --git a/WebKit/wx/WebView.h b/WebKit/wx/WebView.h
index b8fce63..387d193 100644
--- a/WebKit/wx/WebView.h
+++ b/WebKit/wx/WebView.h
@@ -33,6 +33,8 @@
#include "wx/wx.h"
#endif
+#include "WebFrame.h"
+
class WebViewPrivate;
class WebViewFrameData;
class wxWebFrame;
@@ -118,7 +120,14 @@ public:
wxString GetAsMarkup();
wxString GetExternalRepresentation();
+ void SetTransparent(bool transparent);
+ bool IsTransparent() const;
+
wxString RunScript(const wxString& javascript);
+
+ bool FindString(const wxString& string, bool forward = true,
+ bool caseSensitive = false, bool wrapSelection = true,
+ bool startInSelection = true);
bool CanIncreaseTextSize() const;
void IncreaseTextSize();
@@ -132,12 +141,16 @@ public:
wxWebFrame* GetMainFrame() { return m_mainFrame; }
+ wxWebViewDOMElementInfo HitTest(const wxPoint& post) const;
+
protected:
// event handlers (these functions should _not_ be virtual)
void OnPaint(wxPaintEvent& event);
void OnSize(wxSizeEvent& event);
void OnMouseEvents(wxMouseEvent& event);
+ void OnContextMenuEvents(wxContextMenuEvent& event);
+ void OnMenuSelectEvents(wxCommandEvent& event);
void OnKeyEvents(wxKeyEvent& event);
void OnSetFocus(wxFocusEvent& event);
void OnKillFocus(wxFocusEvent& event);
@@ -185,37 +198,6 @@ enum {
wxWEBVIEW_NAV_OTHER = 32
};
-class WXDLLIMPEXP_WEBKIT wxWebViewDOMElementInfo
-{
-public:
- wxWebViewDOMElementInfo();
-
- ~wxWebViewDOMElementInfo() { }
-
- wxString GetTagName() const { return m_tagName; }
- void SetTagName(const wxString& name) { m_tagName = name; }
-
- bool IsSelected() const { return m_isSelected; }
- void SetSelected(bool sel) { m_isSelected = sel; }
-
- wxString GetText() const { return m_text; }
- void SetText(const wxString& text) { m_text = text; }
-
- wxString GetImageSrc() const { return m_imageSrc; }
- void SetImageSrc(const wxString& src) { m_imageSrc = src; }
-
- wxString GetLink() const { return m_link; }
- void SetLink(const wxString& link) { m_link = link; }
-
-private:
- void* m_domElement;
- bool m_isSelected;
- wxString m_tagName;
- wxString m_text;
- wxString m_imageSrc;
- wxString m_link;
-};
-
class WXDLLIMPEXP_WEBKIT wxWebViewBeforeLoadEvent : public wxCommandEvent
{
#ifndef SWIG
diff --git a/WebKit/wx/WebViewPrivate.h b/WebKit/wx/WebViewPrivate.h
index 2eef499..9ad8a3e 100644
--- a/WebKit/wx/WebViewPrivate.h
+++ b/WebKit/wx/WebViewPrivate.h
@@ -29,10 +29,9 @@
#ifndef WXWEBVIEWPRIVATE_H
#define WXWEBVIEWPRIVATE_H
-
#include "config.h"
-#include "Frame.h"
-#include "FrameView.h"
+#include "HTMLFrameOwnerElement.h"
+#include "Page.h"
#include "wtf/RefPtr.h"
#include "KURL.h"
@@ -40,11 +39,9 @@ class WebViewPrivate
{
public:
WebViewPrivate() :
- frame(0),
page(0)
{}
- WTF::RefPtr<WebCore::Frame> frame;
WebCore::Page* page;
};
diff --git a/WebKit/wx/presets/wxwebkit.bkl b/WebKit/wx/presets/wxwebkit.bkl
index 80ffd2f..df21c67 100644
--- a/WebKit/wx/presets/wxwebkit.bkl
+++ b/WebKit/wx/presets/wxwebkit.bkl
@@ -116,8 +116,11 @@ and WebCore. Include this file to use these settings.
<include>$(WK_ROOT)/WebCore/loader</include>
<include>$(WK_ROOT)/WebCore/loader/icon</include>
<include>$(WK_ROOT)/WebCore/page</include>
+ <include>$(WK_ROOT)/WebCore/page/animation</include>
<include>$(WK_ROOT)/WebCore/platform</include>
+ <include>$(WK_ROOT)/WebCore/platform/animation</include>
<include>$(WK_ROOT)/WebCore/platform/graphics</include>
+ <include>$(WK_ROOT)/WebCore/platform/graphics/transforms</include>
<include>$(WK_ROOT)/WebCore/platform/image-decoders</include>
<include>$(WK_ROOT)/WebCore/platform/image-decoders/gif</include>
<include>$(WK_ROOT)/WebCore/platform/image-decoders/jpeg</include>
@@ -133,11 +136,14 @@ and WebCore. Include this file to use these settings.
<include>$(WK_ROOT)/WebCore/xml</include>
<include>$(WK_ROOT)/JavaScriptCore</include>
- <include>$(WK_ROOT)/JavaScriptCore/kjs</include>
+ <include>$(WK_ROOT)/JavaScriptCore/bytecode</include>
+ <include>$(WK_ROOT)/JavaScriptCore/bytecompiler</include>
+ <include>$(WK_ROOT)/JavaScriptCore/jit</include>
+ <include>$(WK_ROOT)/JavaScriptCore/parser</include>
<include>$(WK_ROOT)/JavaScriptCore/pcre</include>
<include>$(WK_ROOT)/JavaScriptCore/profiler</include>
<include>$(WK_ROOT)/JavaScriptCore/runtime</include>
- <include>$(WK_ROOT)/JavaScriptCore/VM</include>
+ <include>$(WK_ROOT)/JavaScriptCore/interpreter</include>
<include>$(WK_ROOT)/JavaScriptCore/wtf</include>
</template>