diff options
Diffstat (limited to 'webkit')
-rw-r--r-- | webkit/build/WebCore/WebCore.vcproj | 44 | ||||
-rw-r--r-- | webkit/build/port/port.vcproj | 8 | ||||
-rw-r--r-- | webkit/port/DerivedSources.make | 11 | ||||
-rw-r--r-- | webkit/port/bindings/scripts/CodeGeneratorV8.pm | 6 | ||||
-rw-r--r-- | webkit/port/bindings/v8/v8_collection.h | 94 | ||||
-rw-r--r-- | webkit/port/bindings/v8/v8_custom.cpp | 13 | ||||
-rw-r--r-- | webkit/port/bindings/v8/v8_custom.h | 6 | ||||
-rw-r--r-- | webkit/port/bindings/v8/v8_proxy.cpp | 44 | ||||
-rw-r--r-- | webkit/port/bridge/chromium/PluginsChromium.cpp | 3 | ||||
-rw-r--r-- | webkit/port/page/Navigator.cpp | 79 | ||||
-rw-r--r-- | webkit/port/page/Navigator.h | 274 | ||||
-rw-r--r-- | webkit/port/page/Navigator.idl | 63 | ||||
-rw-r--r-- | webkit/port/plugins/chromium/PluginDataChromium.cpp | 25 |
13 files changed, 134 insertions, 536 deletions
diff --git a/webkit/build/WebCore/WebCore.vcproj b/webkit/build/WebCore/WebCore.vcproj index fb61b6b..7a41044 100644 --- a/webkit/build/WebCore/WebCore.vcproj +++ b/webkit/build/WebCore/WebCore.vcproj @@ -369,6 +369,14 @@ RelativePath="..\..\..\third_party\WebKit\WebCore\page\MouseEventWithHitTestResults.h" > </File> + <File + RelativePath="..\..\..\third_party\WebKit\WebCore\page\Navigator.cpp" + > + </File> + <File + RelativePath="..\..\..\third_party\WebKit\WebCore\page\Navigator.h" + > + </File> <File RelativePath="..\..\..\third_party\WebKit\WebCore\page\Page.cpp" > @@ -386,10 +394,6 @@ > </File> <File - RelativePath="..\..\..\third_party\WebKit\WebCore\page\Plugin.h" - > - </File> - <File RelativePath="..\..\..\third_party\WebKit\WebCore\page\Screen.cpp" > </File> @@ -5986,10 +5990,42 @@ Name="plugins" > <File + RelativePath="..\..\..\third_party\WebKit\WebCore\plugins\MimeType.cpp" + > + </File> + <File + RelativePath="..\..\..\third_party\WebKit\WebCore\plugins\MimeType.h" + > + </File> + <File + RelativePath="..\..\..\third_party\WebKit\WebCore\plugins\MimeTypeArray.cpp" + > + </File> + <File + RelativePath="..\..\..\third_party\WebKit\WebCore\plugins\MimeTypeArray.h" + > + </File> + <File RelativePath="..\..\..\third_party\WebKit\WebCore\plugins\npfunctions.h" > </File> <File + RelativePath="..\..\..\third_party\WebKit\WebCore\plugins\Plugin.cpp" + > + </File> + <File + RelativePath="..\..\..\third_party\WebKit\WebCore\plugins\Plugin.h" + > + </File> + <File + RelativePath="..\..\..\third_party\WebKit\WebCore\plugins\PluginArray.cpp" + > + </File> + <File + RelativePath="..\..\..\third_party\WebKit\WebCore\plugins\PluginArray.h" + > + </File> + <File RelativePath="..\..\..\third_party\WebKit\WebCore\plugins\PluginData.cpp" > </File> diff --git a/webkit/build/port/port.vcproj b/webkit/build/port/port.vcproj index a4e0856..6be5a6a 100644 --- a/webkit/build/port/port.vcproj +++ b/webkit/build/port/port.vcproj @@ -168,14 +168,6 @@ > </File> <File - RelativePath="..\..\port\page\Navigator.cpp" - > - </File> - <File - RelativePath="..\..\port\page\Navigator.h" - > - </File> - <File RelativePath="..\..\port\dom\ScheduledAction.h" > </File> diff --git a/webkit/port/DerivedSources.make b/webkit/port/DerivedSources.make index ea2e50f..f0a0dad 100644 --- a/webkit/port/DerivedSources.make +++ b/webkit/port/DerivedSources.make @@ -43,6 +43,7 @@ VPATH = \ $(WebCore)/dom \ $(WebCore)/html \ $(WebCore)/page \ + $(WebCore)/plugins \ $(WebCore)/storage \ $(WebCore)/xml \ $(WebCore)/svg \ @@ -921,6 +922,10 @@ all : \ V8InspectorController.h \ V8Location.h \ V8Navigator.h \ + V8MimeType.h \ + V8MimeTypeArray.h \ + V8Plugin.h \ + V8PluginArray.h \ V8RGBColor.h \ V8SVGAnimatedPoints.h \ V8SVGURIReference.h \ @@ -1129,7 +1134,7 @@ OBJC_BINDINGS_SCRIPTS = \ # DOM%.h : %.idl $(OBJC_BINDINGS_SCRIPTS) $(PUBLICDOMINTERFACES) - perl -I $(WebCore)/bindings/scripts $(WebCore)/bindings/scripts/generate-bindings.pl --defines "$(FEATURE_DEFINES) LANGUAGE_OBJECTIVE_C" --generator ObjC --include dom --include html --include css --include page --include xml --include svg --include bindings/js --outputdir . $< + perl -I $(WebCore)/bindings/scripts $(WebCore)/bindings/scripts/generate-bindings.pl --defines "$(FEATURE_DEFINES) LANGUAGE_OBJECTIVE_C" --generator ObjC --include dom --include html --include css --include page --include xml --include svg --include bindings/js --include plugins --outputdir . $< # new-style JavaScript bindings @@ -1142,7 +1147,7 @@ JS_BINDINGS_SCRIPTS = \ # JS%.h : %.idl $(JS_BINDINGS_SCRIPTS) - perl -I $(WebCore)/bindings/scripts $(WebCore)/bindings/scripts/generate-bindings.pl --defines "$(FEATURE_DEFINES) LANGUAGE_JAVASCRIPT" --generator JS --include dom --include html --include css --include page --include xml --include svg --include bindings/js --outputdir . $< + perl -I $(WebCore)/bindings/scripts $(WebCore)/bindings/scripts/generate-bindings.pl --defines "$(FEATURE_DEFINES) LANGUAGE_JAVASCRIPT" --generator JS --include dom --include html --include css --include page --include xml --include svg --include bindings/js --include plugins --outputdir . $< # new-style V8 bindings @@ -1160,5 +1165,5 @@ V8%.h : %.idl $(V8_SCRIPTS) rm -f $@; \ for i in 1 2 3 4 5 6 7 8 9 10; do \ if test -e $@; then break; fi; \ - perl -w -I $(PORTROOT)/bindings/scripts -I $(WebCore)/bindings/scripts $(PORTROOT)/bindings/scripts/generate-bindings.pl --defines "$(FEATURE_DEFINES) LANGUAGE_JAVASCRIPT V8_BINDING" --generator V8 --include ../../../webkit/pending --include ../../../webkit/port/dom --include ../../../webkit/port/html --include ../../../webkit/port/page --include ../../../webkit/port/xml --include svg --include dom --include html --include css --include page --include xml --outputdir . $< ; \ + perl -w -I $(PORTROOT)/bindings/scripts -I $(WebCore)/bindings/scripts $(PORTROOT)/bindings/scripts/generate-bindings.pl --defines "$(FEATURE_DEFINES) LANGUAGE_JAVASCRIPT V8_BINDING" --generator V8 --include ../../../webkit/pending --include ../../../webkit/port/dom --include ../../../webkit/port/html --include ../../../webkit/port/page --include ../../../webkit/port/xml --include svg --include dom --include html --include css --include page --include xml --include plugins --outputdir . $< ; \ done diff --git a/webkit/port/bindings/scripts/CodeGeneratorV8.pm b/webkit/port/bindings/scripts/CodeGeneratorV8.pm index 81391b9..2121862 100644 --- a/webkit/port/bindings/scripts/CodeGeneratorV8.pm +++ b/webkit/port/bindings/scripts/CodeGeneratorV8.pm @@ -225,10 +225,6 @@ sub GetImplementationFileName my $iface = shift; return "HTMLCollection.h" if $iface eq "UndetectableHTMLCollection"; return "HTMLInputElement.h" if $iface eq "HTMLSelectionInputElement"; - return "Navigator.h" if $iface eq "MimeType"; - return "Navigator.h" if $iface eq "MimeTypeArray"; - return "Navigator.h" if $iface eq "Plugin"; - return "Navigator.h" if $iface eq "PluginArray"; return "Event.h" if $iface eq "DOMTimeStamp"; return "NamedAttrMap.h" if $iface eq "NamedNodeMap"; return "NameNodeList.h" if $iface eq "NodeList"; @@ -1433,11 +1429,13 @@ sub IsRefPtrType return 1 if $type eq "HTMLElement"; return 1 if $type eq "HTMLOptionsCollection"; return 1 if $type eq "ImageData"; + return 1 if $type eq "MimeType"; return 1 if $type eq "Node"; return 1 if $type eq "NodeList"; return 1 if $type eq "NodeFilter"; return 1 if $type eq "NodeIterator"; return 1 if $type eq "NSResolver"; + return 1 if $type eq "Plugin"; return 1 if $type eq "ProcessingInstruction"; return 1 if $type eq "Range"; return 1 if $type eq "Text"; diff --git a/webkit/port/bindings/v8/v8_collection.h b/webkit/port/bindings/v8/v8_collection.h index c468a0e..775de86 100644 --- a/webkit/port/bindings/v8/v8_collection.h +++ b/webkit/port/bindings/v8/v8_collection.h @@ -12,7 +12,7 @@ namespace WebCore { // Returns named property of a collection. -template <class C> +template <class C, class D> static v8::Handle<v8::Value> GetNamedPropertyOfCollection( v8::Local<v8::String> name, v8::Local<v8::Object> object, @@ -23,7 +23,19 @@ static v8::Handle<v8::Value> GetNamedPropertyOfCollection( ASSERT(t != V8ClassIndex::NODE); C* collection = V8Proxy::ToNativeObject<C>(t, object); String prop_name = ToWebCoreString(name); - void* result = collection->namedItem(prop_name); + return GetV8Object<D>(collection->namedItem(prop_name), data); +} + +template <class D> +static v8::Handle<v8::Value> GetV8Object( + PassRefPtr<D> result, + v8::Local<v8::Value> data) { + return GetV8Object(result.get(), data); +} + +static v8::Handle<v8::Value> GetV8Object( + void * result, + v8::Local<v8::Value> data) { if (!result) return v8::Handle<v8::Value>(); V8ClassIndex::V8WrapperType type = V8ClassIndex::ToWrapperType(data); if (type == V8ClassIndex::NODE) @@ -33,10 +45,10 @@ static v8::Handle<v8::Value> GetNamedPropertyOfCollection( } // A template of named property accessor of collections. -template <class C> +template <class C, class D> static v8::Handle<v8::Value> CollectionNamedPropertyGetter( v8::Local<v8::String> name, const v8::AccessorInfo& info) { - return GetNamedPropertyOfCollection<C>(name, info.Holder(), info.Data()); + return GetNamedPropertyOfCollection<C, D>(name, info.Holder(), info.Data()); } @@ -50,34 +62,12 @@ static v8::Handle<v8::Value> NodeCollectionNamedPropertyGetter( C* collection = V8Proxy::DOMWrapperToNode<C>(info.Holder()); String prop_name = ToWebCoreString(name); void* result = collection->namedItem(prop_name); - if (!result) return v8::Handle<v8::Value>(); - V8ClassIndex::V8WrapperType type = V8ClassIndex::ToWrapperType(info.Data()); - if (type == V8ClassIndex::NODE) - return V8Proxy::NodeToV8Object(static_cast<Node*>(result)); - else - return V8Proxy::ToV8Object(type, result); -} - - -// A template returns whether a collection has a named property. -// This function does not cause JS heap allocation. -template <class C> -static bool HasNamedPropertyOfCollection(v8::Local<v8::String> name, - v8::Local<v8::Object> object, - v8::Local<v8::Value> data) { - // TODO: assert object is a collection type - ASSERT(V8Proxy::MaybeDOMWrapper(object)); - - V8ClassIndex::V8WrapperType t = V8Proxy::GetDOMWrapperType(object); - C* collection = V8Proxy::ToNativeObject<C>(t, object); - String prop_name = ToWebCoreString(name); - void* result = collection->namedItem(prop_name); - return result != NULL; + return GetV8Object(result, info.Data()); } // Returns the property at the index of a collection. -template <class C> +template <class C, class D> static v8::Handle<v8::Value> GetIndexedPropertyOfCollection( uint32_t index, v8::Local<v8::Object> object, v8::Local<v8::Value> data) { // TODO, assert that object must be a collection type @@ -85,21 +75,15 @@ static v8::Handle<v8::Value> GetIndexedPropertyOfCollection( V8ClassIndex::V8WrapperType t = V8Proxy::GetDOMWrapperType(object); ASSERT(t != V8ClassIndex::NODE); C* collection = V8Proxy::ToNativeObject<C>(t, object); - void* result = collection->item(index); - if (!result) return v8::Handle<v8::Value>(); - V8ClassIndex::V8WrapperType type = V8ClassIndex::ToWrapperType(data); - if (type == V8ClassIndex::NODE) - return V8Proxy::NodeToV8Object(static_cast<Node*>(result)); - else - return V8Proxy::ToV8Object(type, result); + return GetV8Object<D>(collection->item(index), data); } // A template of index interceptor of collections. -template <class C> +template <class C, class D> static v8::Handle<v8::Value> CollectionIndexedPropertyGetter( uint32_t index, const v8::AccessorInfo& info) { - return GetIndexedPropertyOfCollection<C>(index, info.Holder(), info.Data()); + return GetIndexedPropertyOfCollection<C, D>(index, info.Holder(), info.Data()); } @@ -111,12 +95,7 @@ static v8::Handle<v8::Value> NodeCollectionIndexedPropertyGetter( ASSERT(V8Proxy::GetDOMWrapperType(info.Holder()) == V8ClassIndex::NODE); C* collection = V8Proxy::DOMWrapperToNode<C>(info.Holder()); void* result = collection->item(index); - if (!result) return v8::Handle<v8::Value>(); - V8ClassIndex::V8WrapperType type = V8ClassIndex::ToWrapperType(info.Data()); - if (type == V8ClassIndex::NODE) - return V8Proxy::NodeToV8Object(static_cast<Node*>(result)); - else - return V8Proxy::ToV8Object(type, result); + return GetV8Object(result, info.Data()); } @@ -158,21 +137,6 @@ static v8::Handle<v8::Array> CollectionIndexedPropertyEnumerator( } -// Returns whether a collection has a property at a given index. -// This function does not cause JS heap allocation. -template <class C> -static bool HasIndexedPropertyOfCollection(uint32_t index, - v8::Local<v8::Object> object, - v8::Local<v8::Value> data) { - // TODO, assert that object must be a collection type - ASSERT(V8Proxy::MaybeDOMWrapper(object)); - V8ClassIndex::V8WrapperType t = V8Proxy::GetDOMWrapperType(object); - C* collection = V8Proxy::ToNativeObject<C>(t, object); - void* result = collection->item(index); - return result != NULL; -} - - // A template for indexed getters on collections of strings that should return // null if the resulting string is a null string. template <class C> @@ -188,11 +152,11 @@ static v8::Handle<v8::Value> CollectionStringOrNullIndexedPropertyGetter( // Add indexed getter to the function template for a collection. -template <class T> +template <class T, class D> static void SetCollectionIndexedGetter(v8::Handle<v8::FunctionTemplate> desc, V8ClassIndex::V8WrapperType type) { desc->InstanceTemplate()->SetIndexedPropertyHandler( - CollectionIndexedPropertyGetter<T>, + CollectionIndexedPropertyGetter<T, D>, 0, 0, 0, @@ -202,11 +166,11 @@ static void SetCollectionIndexedGetter(v8::Handle<v8::FunctionTemplate> desc, // Add named getter to the function template for a collection. -template <class T> +template <class T, class D> static void SetCollectionNamedGetter(v8::Handle<v8::FunctionTemplate> desc, V8ClassIndex::V8WrapperType type) { desc->InstanceTemplate()->SetNamedPropertyHandler( - CollectionNamedPropertyGetter<T>, + CollectionNamedPropertyGetter<T, D>, 0, 0, 0, @@ -216,21 +180,21 @@ static void SetCollectionNamedGetter(v8::Handle<v8::FunctionTemplate> desc, // Add named and indexed getters to the function template for a collection. -template <class T> +template <class T, class D> static void SetCollectionIndexedAndNamedGetters( v8::Handle<v8::FunctionTemplate> desc, V8ClassIndex::V8WrapperType type) { // If we interceptor before object, accessing 'length' can trigger // a webkit assertion error. // (see fast/dom/HTMLDocument/document-special-properties.html desc->InstanceTemplate()->SetNamedPropertyHandler( - CollectionNamedPropertyGetter<T>, + CollectionNamedPropertyGetter<T, D>, 0, 0, 0, 0, v8::External::New(reinterpret_cast<void*>(type))); desc->InstanceTemplate()->SetIndexedPropertyHandler( - CollectionIndexedPropertyGetter<T>, + CollectionIndexedPropertyGetter<T, D>, 0, 0, 0, diff --git a/webkit/port/bindings/v8/v8_custom.cpp b/webkit/port/bindings/v8/v8_custom.cpp index 1d36ccc..0904839 100644 --- a/webkit/port/bindings/v8/v8_custom.cpp +++ b/webkit/port/bindings/v8/v8_custom.cpp @@ -114,6 +114,8 @@ #include "SVGPathSeg.h" #endif +#include "Navigator.h" + #undef LOG #include "webkit/glue/webplugin_impl.h" @@ -3145,6 +3147,17 @@ CALLBACK_FUNC_DECL(EventTargetNodeRemoveEventListener) { } +// Navigator ------------------------------------------------------------------ +ACCESSOR_GETTER(NavigatorAppVersion) { + INC_STATS(L"DOM.Navigator.appVersion"); + v8::Handle<v8::Object> holder = info.Holder(); + Navigator* imp = V8Proxy::ToNativeObject<Navigator>(V8ClassIndex::NAVIGATOR, + holder); + String v = ToString(imp->appVersion()); + return v8StringOrUndefined(v); +} + + // TreeWalker ------------------------------------------------------------------ CALLBACK_FUNC_DECL(TreeWalkerParentNode) { diff --git a/webkit/port/bindings/v8/v8_custom.h b/webkit/port/bindings/v8/v8_custom.h index 101a1a5..302b80a 100644 --- a/webkit/port/bindings/v8/v8_custom.h +++ b/webkit/port/bindings/v8/v8_custom.h @@ -279,6 +279,12 @@ DECLARE_CALLBACK(ElementSetAttributeNodeNS) DECLARE_CALLBACK(EventTargetNodeAddEventListener) DECLARE_CALLBACK(EventTargetNodeRemoveEventListener) +// Custom implementation is Navigator properties. +// We actually only need this because WebKit has +// navigator.appVersion as custom. Our version just +// passes through. +DECLARE_PROPERTY_ACCESSOR(NavigatorAppVersion) + // Custom implementation of XMLHttpRequest properties DECLARE_PROPERTY_ACCESSOR(XMLHttpRequestOnabort) DECLARE_PROPERTY_ACCESSOR(XMLHttpRequestOnerror) diff --git a/webkit/port/bindings/v8/v8_proxy.cpp b/webkit/port/bindings/v8/v8_proxy.cpp index bc8f183..81df91f 100644 --- a/webkit/port/bindings/v8/v8_proxy.cpp +++ b/webkit/port/bindings/v8/v8_proxy.cpp @@ -73,20 +73,24 @@ #include "EventTarget.h" #include "Event.h" #include "HTMLInputElement.h" -#include "XMLHttpRequest.h" -#include "StyleSheet.h" -#include "StyleSheetList.h" #include "CSSRule.h" #include "CSSRuleList.h" #include "CSSValueList.h" #include "CSSVariablesDeclaration.h" #include "FrameLoader.h" #include "FrameTree.h" +#include "MimeTypeArray.h" +#include "NodeFilter.h" +#include "Plugin.h" +#include "PluginArray.h" #include "RangeException.h" #include "ScriptController.h" -#include "NodeFilter.h" #include "SecurityOrigin.h" +#include "Settings.h" +#include "StyleSheet.h" +#include "StyleSheetList.h" #include "WebKitCSSTransformValue.h" +#include "XMLHttpRequest.h" #include "XMLHttpRequestException.h" #include "XPathException.h" @@ -1123,10 +1127,13 @@ v8::Persistent<v8::FunctionTemplate> V8Proxy::GetTemplate( SetCollectionStringOrNullIndexedGetter<CSSStyleDeclaration>(desc); break; case V8ClassIndex::CSSRULELIST: - SetCollectionIndexedGetter<CSSRuleList>(desc, V8ClassIndex::CSSRULE); + SetCollectionIndexedGetter<CSSRuleList, CSSRule>(desc, + V8ClassIndex::CSSRULE); break; case V8ClassIndex::CSSVALUELIST: - SetCollectionIndexedGetter<CSSValueList>(desc, V8ClassIndex::CSSVALUE); + SetCollectionIndexedGetter<CSSValueList, CSSValue>( + desc, + V8ClassIndex::CSSVALUE); break; case V8ClassIndex::CSSVARIABLESDECLARATION: SetCollectionStringOrNullIndexedGetter<CSSVariablesDeclaration>(desc); @@ -1138,10 +1145,13 @@ v8::Persistent<v8::FunctionTemplate> V8Proxy::GetTemplate( USE_NAMED_PROPERTY_GETTER(HTMLCollection)); desc->InstanceTemplate()->SetCallAsFunctionHandler( USE_CALLBACK(HTMLCollectionCallAsFunction)); - SetCollectionIndexedGetter<HTMLCollection>(desc, V8ClassIndex::NODE); + SetCollectionIndexedGetter<HTMLCollection, Node>(desc, + V8ClassIndex::NODE); break; case V8ClassIndex::HTMLOPTIONSCOLLECTION: - SetCollectionNamedGetter<HTMLOptionsCollection>(desc, V8ClassIndex::NODE); + SetCollectionNamedGetter<HTMLOptionsCollection, Node>( + desc, + V8ClassIndex::NODE); desc->InstanceTemplate()->SetIndexedPropertyHandler( USE_INDEXED_PROPERTY_GETTER(HTMLOptionsCollection), USE_INDEXED_PROPERTY_SETTER(HTMLOptionsCollection)); @@ -1251,7 +1261,7 @@ v8::Persistent<v8::FunctionTemplate> V8Proxy::GetTemplate( SetCollectionStringOrNullIndexedGetter<MediaList>(desc); break; case V8ClassIndex::MIMETYPEARRAY: - SetCollectionIndexedAndNamedGetters<MimeTypeArray>( + SetCollectionIndexedAndNamedGetters<MimeTypeArray, MimeType>( desc, V8ClassIndex::MIMETYPE); break; @@ -1267,22 +1277,26 @@ v8::Persistent<v8::FunctionTemplate> V8Proxy::GetTemplate( v8::External::New(reinterpret_cast<void*>(V8ClassIndex::NODE))); break; case V8ClassIndex::NODELIST: - SetCollectionIndexedGetter<NodeList>(desc, V8ClassIndex::NODE); + SetCollectionIndexedGetter<NodeList, Node>(desc, V8ClassIndex::NODE); desc->InstanceTemplate()->SetNamedPropertyHandler( USE_NAMED_PROPERTY_GETTER(NodeList)); break; case V8ClassIndex::PLUGIN: - SetCollectionIndexedAndNamedGetters<Plugin>(desc, V8ClassIndex::MIMETYPE); + SetCollectionIndexedAndNamedGetters<Plugin, MimeType>( + desc, + V8ClassIndex::MIMETYPE); break; case V8ClassIndex::PLUGINARRAY: - SetCollectionIndexedAndNamedGetters<PluginArray>(desc, - V8ClassIndex::PLUGIN); + SetCollectionIndexedAndNamedGetters<PluginArray, Plugin>( + desc, + V8ClassIndex::PLUGIN); break; case V8ClassIndex::STYLESHEETLIST: desc->InstanceTemplate()->SetNamedPropertyHandler( USE_NAMED_PROPERTY_GETTER(StyleSheetList)); - SetCollectionIndexedGetter<StyleSheetList>(desc, - V8ClassIndex::STYLESHEET); + SetCollectionIndexedGetter<StyleSheetList, StyleSheet>( + desc, + V8ClassIndex::STYLESHEET); break; case V8ClassIndex::DOMWINDOW: { v8::Local<v8::Signature> default_signature = v8::Signature::New(desc); diff --git a/webkit/port/bridge/chromium/PluginsChromium.cpp b/webkit/port/bridge/chromium/PluginsChromium.cpp index ef7572a..eb6188d 100644 --- a/webkit/port/bridge/chromium/PluginsChromium.cpp +++ b/webkit/port/bridge/chromium/PluginsChromium.cpp @@ -35,6 +35,7 @@ #include "config.h" +#include "PluginData.h" #pragma warning(push, 0) #include "PluginInfoStore.h" #pragma warning(pop) @@ -68,6 +69,8 @@ void LoadPlugins(bool refresh) // deleting contents of the PluginInfo. PluginInfo* PluginInfoStore::createPluginInfoForPluginAtIndex(unsigned int index) { + LoadPlugins(false); + WebCore::PluginInfo* rv = new WebCore::PluginInfo(); const WebPluginInfo& plugin = g_plugins[index]; rv->name = webkit_glue::StdWStringToString(plugin.name); diff --git a/webkit/port/page/Navigator.cpp b/webkit/port/page/Navigator.cpp deleted file mode 100644 index 4be2995..0000000 --- a/webkit/port/page/Navigator.cpp +++ /dev/null @@ -1,79 +0,0 @@ -// Copyright (c) 2008, Google 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: -// -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * 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. -// * Neither the name of Google Inc. 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 THE COPYRIGHT HOLDERS AND 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 THE COPYRIGHT -// OWNER 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 "Navigator.h" -#include "PluginInfoStore.h" - -namespace WebCore { - -void PluginArray::refresh(bool reload) { - m_navigator->Refresh(reload); -} - -Navigator::Navigator(Frame* frame) : m_frame(frame) { -} - -Navigator::~Navigator() { -} - -void Navigator::Initialize(bool refresh) { - if (!m_mimetypes) - m_mimetypes = new MimeTypeArray(); - if (!m_plugins) - m_plugins = new PluginArray(this); - - if (refresh) - WebCore::refreshPlugins(refresh); - - PluginInfoStore c; - for (unsigned i = 0; i < c.pluginCount(); ++i) { - PluginInfo* info = c.createPluginInfoForPluginAtIndex(i); - if (info) { - Plugin* plugin = new Plugin(info); - m_plugins->Add(plugin); - - for (unsigned j = 0; j < info->mimes.size(); ++j) - m_mimetypes->Add(new MimeType(info->mimes[j], plugin)); - } - } -} - -void Navigator::Refresh(bool reload) { - if (!m_frame) return; - - if (m_mimetypes) - m_mimetypes->Clear(); - if (m_plugins) - m_plugins->Clear(); - - Initialize(reload); -} - -} // namespace WebCore diff --git a/webkit/port/page/Navigator.h b/webkit/port/page/Navigator.h deleted file mode 100644 index b757cec..0000000 --- a/webkit/port/page/Navigator.h +++ /dev/null @@ -1,274 +0,0 @@ -// Copyright (c) 2006-2008 The Chromium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -#ifndef Navigator_h -#define Navigator_h - -#include "Language.h" -#include "CookieJar.h" -#include "Frame.h" -#include "FrameLoader.h" -#include "Document.h" -#include "NetworkStateNotifier.h" -#include "Settings.h" -#include "PluginInfoStore.h" -#include <wtf/RefCounted.h> - -// Navigator strings copied from KJS, must be updated whenever -// Apple updated theirs. -#ifndef WEBCORE_NAVIGATOR_PLATFORM -#if PLATFORM(MAC) && PLATFORM(PPC) -#define WEBCORE_NAVIGATOR_PLATFORM "MacPPC" -#elif PLATFORM(MAC) && PLATFORM(X86) -#define WEBCORE_NAVIGATOR_PLATFORM "MacIntel" -#elif PLATFORM(WIN_OS) -#define WEBCORE_NAVIGATOR_PLATFORM "Win32" -#else -#define WEBCORE_NAVIGATOR_PLATFORM "" -#endif -#endif // ifndef WEBCORE_NAVIGATOR_PLATFORM - -#ifndef WEBCORE_NAVIGATOR_PRODUCT -#define WEBCORE_NAVIGATOR_PRODUCT "Gecko" -#endif // ifndef WEBCORE_NAVIGATOR_PRODUCT - -#ifndef WEBCORE_NAVIGATOR_PRODUCT_SUB -#define WEBCORE_NAVIGATOR_PRODUCT_SUB "20030107" -#endif // ifndef WEBCORE_NAVIGATOR_PRODUCT_SUB - -#ifndef WEBCORE_NAVIGATOR_VENDOR -#define WEBCORE_NAVIGATOR_VENDOR "Apple Computer, Inc." -#endif // ifndef WEBCORE_NAVIGATOR_VENDOR - -#ifndef WEBCORE_NAVIGATOR_VENDOR_SUB -#define WEBCORE_NAVIGATOR_VENDOR_SUB "" -#endif // ifndef WEBCORE_NAVIGATOR_VENDOR_SUB - -namespace WebCore { - -class Plugin; -class Navigator; - -// The following two classes (MimeType and Plugin) are wrappers around -// MimeClassInfo and PluginInfo structs defined by WebKit. These are created -// by PluginInfoStore::createPluginInfoForPluginAtIndex and are responsible -// for cleaning up *info objects on deletion. The cleanup for MimeClassInfo -// as well as PluginInfo is done by Plugin wrapper because each Plugin has its -// own list of supported mime_types that should not be needed once the plugin -// is gone. -class MimeType : public RefCounted<MimeType> { - public: - explicit MimeType(MimeClassInfo* info, Plugin* plugin) - : m_info(info), m_plugin(plugin) { } - - String description() const { return m_info->desc; } - Plugin* enabledPlugin() const { return m_plugin; } - String suffixes() const { return m_info->suffixes; } - String type() const { return m_info->type; } - private: - MimeClassInfo* m_info; - Plugin* m_plugin; -}; - -class Plugin : public RefCounted<Plugin> { - public: - explicit Plugin(PluginInfo* info) : m_info(info) { - } - ~Plugin() { - if (m_info) { - for (size_t i = 0; i < m_info->mimes.size(); i++) { - if (m_info->mimes[i]) { - delete m_info->mimes[i]; - m_info->mimes[i] = NULL; - } - } - delete m_info; - m_info = NULL; - } - } - String description() const { return m_info->desc; } - String filename() const { return m_info->file; } - String name() const { return m_info->name; } - int length() const { return m_info->mimes.size(); } - - MimeType* item(int index) { - if (index >= 0 && index < length()) - return new MimeType(m_info->mimes[index], this); - return NULL; - } - - MimeType* namedItem(const String& name) { - for (int i = 0; i < length(); ++i) { - MimeClassInfo* m = m_info->mimes[i]; - if (m->type == name) - return new MimeType(m, this); - } - return NULL; - } - private: - PluginInfo* m_info; -}; - - -template<class T> -class ArrayOf { - public: - ~ArrayOf() { - // release contents - Clear(); - } - - int length() const { - return m_contents.size(); - } - - T* item(int index) { - if (index >= 0 && index < length()) - return m_contents[index]; - return NULL; - } - - protected: - Vector<T*> m_contents; - - private: - void Add(T* el) { - el->ref(); - m_contents.append(el); - } - - void Clear() { - while (m_contents.size() > 0) { - m_contents[0]->deref(); - m_contents.remove(0); - } - } - - friend class Navigator; -}; - -class MimeTypeArray : public ArrayOf<MimeType>, - public RefCounted<MimeTypeArray> { - public: - MimeType* namedItem(const String& name) { - for (int i = 0; i < length(); ++i) { - if (m_contents[i]->type() == name) - return m_contents[i]; - } - return NULL; - } -}; - -class PluginArray : public ArrayOf<Plugin>, public RefCounted<PluginArray> { - public: - explicit PluginArray(Navigator* nav) : m_navigator(nav) { } - Plugin* namedItem(const String& name) { - for (int i = 0; i < length(); ++i) { - if (m_contents[i]->name() == name) - return m_contents[i]; - } - return NULL; - } - - void refresh(bool reloadDocuments); - private: - Navigator* m_navigator; -}; - -class Navigator : public RefCounted<Navigator> { - public: - static PassRefPtr<Navigator> create(Frame* frame) - { - return adoptRef(new Navigator(frame)); - } - ~Navigator(); - String appCodeName() const { return "Mozilla"; } - String appName() const { return "Netscape"; } - - String appVersion() const { - if (!m_frame) - return String(); - - KURL url; - if (m_frame->document()) { - url = m_frame->document()->url(); - } - const String user_agent = m_frame->loader()->userAgent(url); - return user_agent.substring(user_agent.find('/') + 1); - } - String language() { return defaultLanguage(); } - - MimeTypeArray* mimeTypes() { - if (!m_frame) - return NULL; - - if (!m_mimetypes) - Initialize(false); - return m_mimetypes.get(); - } - String platform() const { return WEBCORE_NAVIGATOR_PLATFORM; } - String vendor() const { return WEBCORE_NAVIGATOR_VENDOR; } - String vendorSub() const { return WEBCORE_NAVIGATOR_VENDOR_SUB; } - String product() const { return WEBCORE_NAVIGATOR_PRODUCT; } - String productSub() const { return WEBCORE_NAVIGATOR_PRODUCT_SUB; } - - PluginArray* plugins() { - if (!m_frame) - return NULL; - - if (!m_plugins) - Initialize(false); - return m_plugins.get(); - } - - String userAgent() const { - if (!m_frame) - return String(); - - KURL url; - if (m_frame->document()) { - url = m_frame->document()->url(); - } - return m_frame->loader()->userAgent(url); - } - - bool cookieEnabled() { - if (!m_frame) - return false; - - return cookiesEnabled(m_frame->document()); - } - - bool javaEnabled() { - if (!m_frame) - return false; - - return m_frame->settings()->isJavaEnabled(); - } - - bool onLine() const { - return networkStateNotifier().onLine(); - } - - Frame* frame() { return m_frame; } - - void disconnectFrame() { m_frame = NULL; } - - private: - Navigator(Frame* frame); - - Frame* m_frame; - RefPtr<MimeTypeArray> m_mimetypes; - RefPtr<PluginArray> m_plugins; - - void Initialize(bool refresh); - - friend class PluginArray; // need to call Refresh - void Refresh(bool reload); -}; - -} // namespace WebCore - -#endif - diff --git a/webkit/port/page/Navigator.idl b/webkit/port/page/Navigator.idl deleted file mode 100644 index 6ed8243..0000000 --- a/webkit/port/page/Navigator.idl +++ /dev/null @@ -1,63 +0,0 @@ -// Copyright (c) 2008 The Chromium Authors. All rights reserved. Use of this -// source code is governed by a BSD-style license that can be found in the -// LICENSE file. - -module core { -#if defined(V8_BINDING) -// V8 specific -interface Navigator { - readonly attribute DOMString appCodeName; - readonly attribute DOMString appName; - readonly attribute DOMString appVersion; - readonly attribute DOMString language; - readonly attribute MimeTypeArray mimeTypes; - readonly attribute DOMString platform; -// readonly attribute DOMString oscpu; - readonly attribute DOMString vendor; - readonly attribute DOMString vendorSub; - readonly attribute DOMString product; - readonly attribute DOMString productSub; - readonly attribute PluginArray plugins; -// readonly attribute DOMString securityPolicy; - readonly attribute DOMString userAgent; - readonly attribute boolean cookieEnabled; - readonly attribute boolean onLine; -// readonly attribute DOMString buildID; - - boolean javaEnabled(); -// boolean taintEnabled(); -}; - -interface MimeType { - readonly attribute DOMString description; - readonly attribute Plugin enabledPlugin; - readonly attribute DOMString suffixes; - readonly attribute DOMString type; -}; - -interface Plugin { - readonly attribute DOMString description; - readonly attribute DOMString filename; - readonly attribute DOMString name; - - readonly attribute unsigned long length; - MimeType item(in unsigned long index); - MimeType namedItem(in DOMString name); -}; - -interface MimeTypeArray { - readonly attribute unsigned long length; - MimeType item(in unsigned long index); - MimeType namedItem(in DOMString name); -}; - -interface PluginArray { - readonly attribute unsigned long length; - Plugin item(in unsigned long index); - Plugin namedItem(in DOMString name); - void refresh(in boolean reloadDocuments); -}; - -#endif // V8_BINDING - -} // module diff --git a/webkit/port/plugins/chromium/PluginDataChromium.cpp b/webkit/port/plugins/chromium/PluginDataChromium.cpp index c289464..7670e22 100644 --- a/webkit/port/plugins/chromium/PluginDataChromium.cpp +++ b/webkit/port/plugins/chromium/PluginDataChromium.cpp @@ -5,6 +5,8 @@ #include "config.h" #include "PluginData.h" +#include "PluginInfoStore.h" + #undef LOG #include "webkit/glue/glue_util.h" #include "webkit/glue/webkit_glue.h" @@ -20,28 +22,9 @@ void PluginData::initPlugins() return; refreshData = false; + PluginInfoStore c; for (size_t i = 0; i < plugins.size(); ++i) { - const WebPluginInfo& sourceInfo = plugins[i]; - - PluginInfo* info = new PluginInfo; - info->name = webkit_glue::StdWStringToString(sourceInfo.name); - info->file = webkit_glue::StdWStringToString(sourceInfo.file); - info->desc = webkit_glue::StdWStringToString(sourceInfo.desc); - - for (size_t j = 0; j < sourceInfo.mime_types.size(); ++j) { - const WebPluginMimeType& mimeType = sourceInfo.mime_types[j]; - - MimeClassInfo* mime = new MimeClassInfo; - mime->type = webkit_glue::StdStringToString(mimeType.mime_type); - mime->desc = webkit_glue::StdWStringToString(mimeType.description); - - for (size_t k = 0; k < mimeType.file_extensions.size(); ++k) { - if (k > 0) - mime->suffixes += ","; - mime->suffixes += webkit_glue::StdStringToString(mimeType.file_extensions[k]); - } - info->mimes.append(mime); - } + PluginInfo* info = c.createPluginInfoForPluginAtIndex(i); m_plugins.append(info); } } |