| Index: webkit/glue/webframeloaderclient_impl.cc
|
| ===================================================================
|
| --- webkit/glue/webframeloaderclient_impl.cc (revision 25087)
|
| +++ webkit/glue/webframeloaderclient_impl.cc (working copy)
|
| @@ -31,10 +31,9 @@
|
| #include "base/string_util.h"
|
| #include "net/base/mime_util.h"
|
| #include "net/base/net_errors.h"
|
| -#if defined(OS_WIN)
|
| -#include "webkit/activex_shim/activex_shared.h"
|
| -#endif
|
| #include "webkit/api/public/WebForm.h"
|
| +#include "webkit/api/public/WebPlugin.h"
|
| +#include "webkit/api/public/WebPluginParams.h"
|
| #include "webkit/api/public/WebURL.h"
|
| #include "webkit/api/public/WebURLError.h"
|
| #include "webkit/api/public/WebVector.h"
|
| @@ -49,8 +48,6 @@
|
| #include "webkit/glue/webframe_impl.h"
|
| #include "webkit/glue/webframeloaderclient_impl.h"
|
| #include "webkit/glue/webkit_glue.h"
|
| -#include "webkit/glue/webplugin_delegate.h"
|
| -#include "webkit/glue/webplugin_impl.h"
|
| #include "webkit/glue/webview_delegate.h"
|
| #include "webkit/glue/webview_impl.h"
|
|
|
| @@ -63,8 +60,10 @@
|
| using WebKit::WebDataSourceImpl;
|
| using WebKit::WebNavigationType;
|
| using WebKit::WebNavigationPolicy;
|
| +using WebKit::WebPlugin;
|
| using WebKit::WebPluginContainerImpl;
|
| using WebKit::WebPluginLoadObserver;
|
| +using WebKit::WebPluginParams;
|
| using WebKit::WebString;
|
| using WebKit::WebURL;
|
| using WebKit::WebURLError;
|
| @@ -82,6 +81,14 @@
|
| ERR_POLICY_CHANGE = -10000,
|
| };
|
|
|
| +static void CopyStringVector(
|
| + const Vector<String>& input, WebVector<WebString>* output) {
|
| + WebVector<WebString> result(input.size());
|
| + for (size_t i = 0; i < input.size(); ++i)
|
| + result[i] = webkit_glue::StringToWebString(input[i]);
|
| + output->swap(result);
|
| +}
|
| +
|
| WebFrameLoaderClient::WebFrameLoaderClient(WebFrameImpl* frame)
|
| : webframe_(frame),
|
| has_representation_(false),
|
| @@ -1212,78 +1219,14 @@
|
| return webframe_->CreateChildFrame(frame_request, owner_element);
|
| }
|
|
|
| -// Utility function to convert a vector to an array of char*'s.
|
| -// Caller is responsible to free memory with DeleteToArray().
|
| -static char** ToArray(const Vector<WebCore::String> &vector) {
|
| - char **rv = new char *[vector.size()+1];
|
| - unsigned int index = 0;
|
| - for (index = 0; index < vector.size(); ++index) {
|
| - WebCore::CString src = vector[index].utf8();
|
| - rv[index] = new char[src.length() + 1];
|
| - base::strlcpy(rv[index], src.data(), src.length() + 1);
|
| - rv[index][src.length()] = '\0';
|
| - }
|
| - rv[index] = 0;
|
| - return rv;
|
| -}
|
| -
|
| -static void DeleteToArray(char** arr) {
|
| - char **ptr = arr;
|
| - while (*ptr != 0) {
|
| - delete [] *ptr;
|
| - ++ptr;
|
| - }
|
| - delete [] arr;
|
| -}
|
| -
|
| -PassRefPtr<Widget> WebFrameLoaderClient::createPlugin(const IntSize& size, // TODO(erikkay): how do we use this?
|
| - HTMLPlugInElement* element,
|
| - const KURL&url,
|
| - const Vector<String>& param_names,
|
| - const Vector<String>& param_values,
|
| - const String& mime_type,
|
| - bool load_manually) {
|
| - WebViewImpl* webview = webframe_->GetWebViewImpl();
|
| - WebViewDelegate* d = webview->delegate();
|
| - if (!d)
|
| - return NULL;
|
| -
|
| - GURL gurl = webkit_glue::KURLToGURL(url);
|
| - std::string my_mime_type =
|
| - webkit_glue::CStringToStdString(mime_type.latin1());
|
| - StringToLowerASCII(&my_mime_type);
|
| -
|
| - // Get the classid and version from attributes of the object.
|
| - std::string combined_clsid;
|
| -#if defined(OS_WIN)
|
| - std::string clsid, version;
|
| - if (activex_shim::IsMimeTypeActiveX(my_mime_type)) {
|
| - GURL url = webframe_->url();
|
| - for (unsigned int i = 0; i < param_names.size(); i++) {
|
| - String lowercase_param_name = param_names[i].lower();
|
| - if (lowercase_param_name == "classid") {
|
| - activex_shim::GetClsidFromClassidAttribute(
|
| - webkit_glue::CStringToStdString(param_values[i].latin1()), &clsid);
|
| - } else if (lowercase_param_name == "codebase") {
|
| - version = activex_shim::GetVersionFromCodebaseAttribute(
|
| - webkit_glue::CStringToStdString(param_values[i].latin1()));
|
| - }
|
| - }
|
| -
|
| - // Attempt to map this clsid to a known NPAPI mime type if possible, failing
|
| - // which we attempt to load the activex shim for the clsid.
|
| - if (!activex_shim::GetMimeTypeForClsid(clsid, &my_mime_type)) {
|
| - // We need to pass the combined clsid + version to PluginsList, so that it
|
| - // would detect if the requested version is installed. If not, it needs
|
| - // to use the default plugin to update the control.
|
| - if (!version.empty())
|
| - combined_clsid = clsid + "#" + version;
|
| - else
|
| - combined_clsid = clsid;
|
| - }
|
| - }
|
| -#endif
|
| -
|
| +PassRefPtr<Widget> WebFrameLoaderClient::createPlugin(
|
| + const IntSize& size, // TODO(erikkay): how do we use this?
|
| + HTMLPlugInElement* element,
|
| + const KURL& url,
|
| + const Vector<String>& param_names,
|
| + const Vector<String>& param_values,
|
| + const String& mime_type,
|
| + bool load_manually) {
|
| #if defined(OS_POSIX)
|
| // WebCore asks us to make a plugin even if we don't have a
|
| // registered handler, with a comment saying it's so we can display
|
| @@ -1298,29 +1241,29 @@
|
| return NULL;
|
| #endif
|
|
|
| - std::string actual_mime_type;
|
| - WebPluginDelegate* plugin_delegate =
|
| - d->CreatePluginDelegate(webframe_->GetWebViewImpl(), gurl, my_mime_type,
|
| - combined_clsid, &actual_mime_type);
|
| - if (!plugin_delegate)
|
| + WebViewImpl* webview = webframe_->GetWebViewImpl();
|
| + if (!webview->delegate())
|
| return NULL;
|
|
|
| - if (!actual_mime_type.empty())
|
| - my_mime_type = actual_mime_type;
|
| + WebPluginParams params;
|
| + params.url = webkit_glue::KURLToWebURL(url);
|
| + params.mimeType = webkit_glue::StringToWebString(mime_type);
|
| + CopyStringVector(param_names, ¶ms.attributeNames);
|
| + CopyStringVector(param_values, ¶ms.attributeValues);
|
| + params.loadManually = load_manually;
|
|
|
| - DCHECK(param_names.size() == param_values.size());
|
| + WebPlugin* webplugin = webview->delegate()->CreatePlugin(webframe_, params);
|
| + if (!webplugin)
|
| + return NULL;
|
|
|
| - char **argn = ToArray(param_names);
|
| - char **argv = ToArray(param_values);
|
| - int argc = static_cast<int>(param_names.size());
|
| - RefPtr<Widget> result = WebPluginImpl::Create(gurl, argn, argv, argc, element,
|
| - webframe_, plugin_delegate,
|
| - load_manually, my_mime_type);
|
| + // The container takes ownership of the WebPlugin.
|
| + RefPtr<WebPluginContainerImpl> container =
|
| + WebPluginContainerImpl::create(element, webplugin);
|
|
|
| - DeleteToArray(argn);
|
| - DeleteToArray(argv);
|
| + if (!webplugin->initialize(container.get()))
|
| + return NULL;
|
|
|
| - return result;
|
| + return container;
|
| }
|
|
|
| // This method gets called when a plugin is put in place of html content
|
|
|