summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorzork@chromium.org <zork@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2014-04-11 07:47:07 +0000
committerzork@chromium.org <zork@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2014-04-11 07:47:07 +0000
commitdbebd54f13fa149507a929d94a2bf5bc07317c77 (patch)
tree357c8ab32d31486037422a4f9719979bdf69a7b4
parent02d57a61080179535f028d63483ccdf10de5e003 (diff)
downloadchromium_src-dbebd54f13fa149507a929d94a2bf5bc07317c77.zip
chromium_src-dbebd54f13fa149507a929d94a2bf5bc07317c77.tar.gz
chromium_src-dbebd54f13fa149507a929d94a2bf5bc07317c77.tar.bz2
Support new plugin type in BrowserPlugin that navigates to a set URL.
BUG=351835 Review URL: https://codereview.chromium.org/226473006 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@263181 0039d316-1c4b-4281-b951-d872f2087c98
-rw-r--r--chrome/app/generated_resources.grd3
-rw-r--r--chrome/browser/ui/webui/plugins_ui.cc2
-rw-r--r--chrome/renderer/chrome_content_renderer_client.cc3
-rw-r--r--content/public/common/webplugininfo.h3
-rw-r--r--content/renderer/browser_plugin/browser_plugin.cc29
-rw-r--r--content/renderer/browser_plugin/browser_plugin.h7
-rw-r--r--content/renderer/browser_plugin/browser_plugin_manager.h4
-rw-r--r--content/renderer/browser_plugin/browser_plugin_manager_impl.cc5
-rw-r--r--content/renderer/browser_plugin/browser_plugin_manager_impl.h3
-rw-r--r--content/renderer/browser_plugin/mock_browser_plugin.cc5
-rw-r--r--content/renderer/browser_plugin/mock_browser_plugin.h3
-rw-r--r--content/renderer/browser_plugin/mock_browser_plugin_manager.cc6
-rw-r--r--content/renderer/browser_plugin/mock_browser_plugin_manager.h4
-rw-r--r--content/renderer/render_frame_impl.cc8
14 files changed, 69 insertions, 16 deletions
diff --git a/chrome/app/generated_resources.grd b/chrome/app/generated_resources.grd
index 1e87a41..d867cd158 100644
--- a/chrome/app/generated_resources.grd
+++ b/chrome/app/generated_resources.grd
@@ -5591,6 +5591,9 @@ Keep your key file in a safe place. You will need it to create new versions of y
<message name="IDS_PLUGINS_PPAPI_UNSANDBOXED" desc="Text that indicates the plugin is an unsandboxed out-of-process PPAPI plugin.">
PPAPI (unsandboxed)
</message>
+ <message name="IDS_PLUGINS_BROWSER_PLUGIN" desc="Text that indicates the plugin is a browser plugin.">
+ BROWSER PLUGIN
+ </message>
</if>
<!-- about:flags -->
diff --git a/chrome/browser/ui/webui/plugins_ui.cc b/chrome/browser/ui/webui/plugins_ui.cc
index dd38da0..3dac5cb 100644
--- a/chrome/browser/ui/webui/plugins_ui.cc
+++ b/chrome/browser/ui/webui/plugins_ui.cc
@@ -119,6 +119,8 @@ base::string16 PluginTypeToString(int type) {
return l10n_util::GetStringUTF16(IDS_PLUGINS_PPAPI_OUT_OF_PROCESS);
case WebPluginInfo::PLUGIN_TYPE_PEPPER_UNSANDBOXED:
return l10n_util::GetStringUTF16(IDS_PLUGINS_PPAPI_UNSANDBOXED);
+ case WebPluginInfo::PLUGIN_TYPE_BROWSER_PLUGIN:
+ return l10n_util::GetStringUTF16(IDS_PLUGINS_BROWSER_PLUGIN);
}
NOTREACHED();
return base::string16();
diff --git a/chrome/renderer/chrome_content_renderer_client.cc b/chrome/renderer/chrome_content_renderer_client.cc
index 77d6c34..22b207c6 100644
--- a/chrome/renderer/chrome_content_renderer_client.cc
+++ b/chrome/renderer/chrome_content_renderer_client.cc
@@ -494,6 +494,9 @@ bool ChromeContentRendererClient::OverrideCreatePlugin(
render_frame->Send(new ChromeViewHostMsg_GetPluginInfo(
render_frame->GetRoutingID(), GURL(params.url),
frame->top()->document().url(), orig_mime_type, &output));
+
+ if (output.plugin.type == content::WebPluginInfo::PLUGIN_TYPE_BROWSER_PLUGIN)
+ return false;
#else
output.status.value = ChromeViewHostMsg_GetPluginInfo_Status::kNotFound;
#endif
diff --git a/content/public/common/webplugininfo.h b/content/public/common/webplugininfo.h
index 75b4033..2912cef 100644
--- a/content/public/common/webplugininfo.h
+++ b/content/public/common/webplugininfo.h
@@ -47,7 +47,8 @@ struct CONTENT_EXPORT WebPluginInfo {
PLUGIN_TYPE_NPAPI,
PLUGIN_TYPE_PEPPER_IN_PROCESS,
PLUGIN_TYPE_PEPPER_OUT_OF_PROCESS,
- PLUGIN_TYPE_PEPPER_UNSANDBOXED
+ PLUGIN_TYPE_PEPPER_UNSANDBOXED,
+ PLUGIN_TYPE_BROWSER_PLUGIN
};
WebPluginInfo();
diff --git a/content/renderer/browser_plugin/browser_plugin.cc b/content/renderer/browser_plugin/browser_plugin.cc
index 3f9d3af..faf2e00 100644
--- a/content/renderer/browser_plugin/browser_plugin.cc
+++ b/content/renderer/browser_plugin/browser_plugin.cc
@@ -55,6 +55,8 @@ namespace content {
namespace {
+const char* kCustomPersistPartition = "persist:custom_plugin";
+
static std::string GetInternalEventName(const char* event_name) {
return base::StringPrintf("-internal-%s", event_name);
}
@@ -67,7 +69,8 @@ static base::LazyInstance<PluginContainerMap> g_plugin_container_map =
} // namespace
BrowserPlugin::BrowserPlugin(RenderViewImpl* render_view,
- blink::WebFrame* frame)
+ blink::WebFrame* frame,
+ bool auto_navigate)
: guest_instance_id_(browser_plugin::kInstanceIDNone),
attached_(false),
render_view_(render_view->AsWeakPtr()),
@@ -84,6 +87,7 @@ BrowserPlugin::BrowserPlugin(RenderViewImpl* render_view,
content_window_routing_id_(MSG_ROUTING_NONE),
plugin_focused_(false),
visible_(true),
+ auto_navigate_(auto_navigate),
before_first_navigation_(true),
mouse_locked_(false),
browser_plugin_manager_(render_view->GetBrowserPluginManager()),
@@ -380,6 +384,12 @@ void BrowserPlugin::OnInstanceIDAllocated(int guest_instance_id) {
guest_instance_id_ = guest_instance_id;
browser_plugin_manager()->AddBrowserPlugin(guest_instance_id, this);
+ if (auto_navigate_) {
+ scoped_ptr<base::DictionaryValue> params(new base::DictionaryValue());
+ Attach(params.Pass());
+ return;
+ }
+
std::map<std::string, base::Value*> props;
props[browser_plugin::kWindowID] =
new base::FundamentalValue(guest_instance_id);
@@ -750,7 +760,11 @@ bool BrowserPlugin::ParsePartitionAttribute(std::string* error_message) {
return false;
}
- std::string input = GetPartitionAttribute();
+ std::string input;
+ if (auto_navigate_)
+ input = kCustomPersistPartition;
+ else
+ input = GetPartitionAttribute();
// Since the "persist:" prefix is in ASCII, StartsWith will work fine on
// UTF-8 encoded |partition_id|. If the prefix is a match, we can safely
@@ -890,7 +904,8 @@ bool BrowserPlugin::initialize(WebPluginContainer* container) {
if (!container)
return false;
- if (!GetContentClient()->renderer()->AllowBrowserPlugin(container))
+ if (!GetContentClient()->renderer()->AllowBrowserPlugin(container) &&
+ !auto_navigate_)
return false;
// Tell |container| to allow this plugin to use script objects.
@@ -1277,9 +1292,17 @@ void BrowserPlugin::didReceiveResponse(
}
void BrowserPlugin::didReceiveData(const char* data, int data_length) {
+ if (auto_navigate_) {
+ std::string value(data, data_length);
+ html_string_ += value;
+ }
}
void BrowserPlugin::didFinishLoading() {
+ if (auto_navigate_) {
+ UpdateDOMAttribute(content::browser_plugin::kAttributeSrc, html_string_);
+ ParseAttributes();
+ }
}
void BrowserPlugin::didFailLoading(const blink::WebURLError& error) {
diff --git a/content/renderer/browser_plugin/browser_plugin.h b/content/renderer/browser_plugin/browser_plugin.h
index 8079210..1325ac4 100644
--- a/content/renderer/browser_plugin/browser_plugin.h
+++ b/content/renderer/browser_plugin/browser_plugin.h
@@ -214,7 +214,9 @@ class CONTENT_EXPORT BrowserPlugin :
// does an initial navigation or is attached to a newly created guest, it
// acquires a guest_instance_id as well. The guest instance ID uniquely
// identifies a guest WebContents that's hosted by this BrowserPlugin.
- BrowserPlugin(RenderViewImpl* render_view, blink::WebFrame* frame);
+ BrowserPlugin(RenderViewImpl* render_view,
+ blink::WebFrame* frame,
+ bool auto_navigate);
virtual ~BrowserPlugin();
@@ -340,6 +342,9 @@ class CONTENT_EXPORT BrowserPlugin :
// embedder RenderView's visibility.
bool visible_;
+ bool auto_navigate_;
+ std::string html_string_;
+
WebCursor cursor_;
gfx::Size last_view_size_;
diff --git a/content/renderer/browser_plugin/browser_plugin_manager.h b/content/renderer/browser_plugin/browser_plugin_manager.h
index 8a57c3d..1f71ea6 100644
--- a/content/renderer/browser_plugin/browser_plugin_manager.h
+++ b/content/renderer/browser_plugin/browser_plugin_manager.h
@@ -45,7 +45,9 @@ class CONTENT_EXPORT BrowserPluginManager
// BrowserPluginManager via AddBrowserPlugin. When it is destroyed, it is
// responsible for removing its association via RemoveBrowserPlugin.
virtual BrowserPlugin* CreateBrowserPlugin(
- RenderViewImpl* render_view, blink::WebFrame* frame) = 0;
+ RenderViewImpl* render_view,
+ blink::WebFrame* frame,
+ bool auto_navigate) = 0;
// Asynchronously requests a new browser-process-allocated instance ID.
// After the browser process allocates an ID, it calls back into the
diff --git a/content/renderer/browser_plugin/browser_plugin_manager_impl.cc b/content/renderer/browser_plugin/browser_plugin_manager_impl.cc
index d084148..4f0bed0 100644
--- a/content/renderer/browser_plugin/browser_plugin_manager_impl.cc
+++ b/content/renderer/browser_plugin/browser_plugin_manager_impl.cc
@@ -24,8 +24,9 @@ BrowserPluginManagerImpl::~BrowserPluginManagerImpl() {
BrowserPlugin* BrowserPluginManagerImpl::CreateBrowserPlugin(
RenderViewImpl* render_view,
- blink::WebFrame* frame) {
- return new BrowserPlugin(render_view, frame);
+ blink::WebFrame* frame,
+ bool auto_navigate) {
+ return new BrowserPlugin(render_view, frame, auto_navigate);
}
void BrowserPluginManagerImpl::AllocateInstanceID(
diff --git a/content/renderer/browser_plugin/browser_plugin_manager_impl.h b/content/renderer/browser_plugin/browser_plugin_manager_impl.h
index bc47cc8..2ed4135 100644
--- a/content/renderer/browser_plugin/browser_plugin_manager_impl.h
+++ b/content/renderer/browser_plugin/browser_plugin_manager_impl.h
@@ -23,7 +23,8 @@ class BrowserPluginManagerImpl : public BrowserPluginManager {
// BrowserPluginManager implementation.
virtual BrowserPlugin* CreateBrowserPlugin(
RenderViewImpl* render_view,
- blink::WebFrame* frame) OVERRIDE;
+ blink::WebFrame* frame,
+ bool auto_navigate) OVERRIDE;
virtual void AllocateInstanceID(
const base::WeakPtr<BrowserPlugin>& browser_plugin) OVERRIDE;
diff --git a/content/renderer/browser_plugin/mock_browser_plugin.cc b/content/renderer/browser_plugin/mock_browser_plugin.cc
index a19d0aa..1d7df15 100644
--- a/content/renderer/browser_plugin/mock_browser_plugin.cc
+++ b/content/renderer/browser_plugin/mock_browser_plugin.cc
@@ -8,8 +8,9 @@
namespace content {
MockBrowserPlugin::MockBrowserPlugin(RenderViewImpl* render_view,
- blink::WebFrame* frame)
- : BrowserPlugin(render_view, frame) {
+ blink::WebFrame* frame,
+ bool auto_navigate)
+ : BrowserPlugin(render_view, frame, auto_navigate) {
}
MockBrowserPlugin::~MockBrowserPlugin() {}
diff --git a/content/renderer/browser_plugin/mock_browser_plugin.h b/content/renderer/browser_plugin/mock_browser_plugin.h
index ee0f554..c0d70a4 100644
--- a/content/renderer/browser_plugin/mock_browser_plugin.h
+++ b/content/renderer/browser_plugin/mock_browser_plugin.h
@@ -12,7 +12,8 @@ namespace content {
class MockBrowserPlugin : public BrowserPlugin {
public:
MockBrowserPlugin(RenderViewImpl* render_view,
- blink::WebFrame* frame);
+ blink::WebFrame* frame,
+ bool auto_navigate);
virtual ~MockBrowserPlugin();
diff --git a/content/renderer/browser_plugin/mock_browser_plugin_manager.cc b/content/renderer/browser_plugin/mock_browser_plugin_manager.cc
index 4a60686..197930e 100644
--- a/content/renderer/browser_plugin/mock_browser_plugin_manager.cc
+++ b/content/renderer/browser_plugin/mock_browser_plugin_manager.cc
@@ -21,8 +21,10 @@ MockBrowserPluginManager::~MockBrowserPluginManager() {
}
BrowserPlugin* MockBrowserPluginManager::CreateBrowserPlugin(
- RenderViewImpl* render_view, blink::WebFrame* frame) {
- return new MockBrowserPlugin(render_view, frame);
+ RenderViewImpl* render_view,
+ blink::WebFrame* frame,
+ bool auto_navigate) {
+ return new MockBrowserPlugin(render_view, frame, auto_navigate);
}
void MockBrowserPluginManager::AllocateInstanceID(
diff --git a/content/renderer/browser_plugin/mock_browser_plugin_manager.h b/content/renderer/browser_plugin/mock_browser_plugin_manager.h
index 83d55a5..1ec85e3 100644
--- a/content/renderer/browser_plugin/mock_browser_plugin_manager.h
+++ b/content/renderer/browser_plugin/mock_browser_plugin_manager.h
@@ -19,7 +19,9 @@ class MockBrowserPluginManager : public BrowserPluginManager {
// BrowserPluginManager implementation.
virtual BrowserPlugin* CreateBrowserPlugin(
- RenderViewImpl* render_view, blink::WebFrame* frame) OVERRIDE;
+ RenderViewImpl* render_view,
+ blink::WebFrame* frame,
+ bool auto_navigate) OVERRIDE;
virtual void AllocateInstanceID(
const base::WeakPtr<BrowserPlugin>& browser_plugin) OVERRIDE;
diff --git a/content/renderer/render_frame_impl.cc b/content/renderer/render_frame_impl.cc
index b95f4a8..b011a7b 100644
--- a/content/renderer/render_frame_impl.cc
+++ b/content/renderer/render_frame_impl.cc
@@ -1212,7 +1212,7 @@ blink::WebPlugin* RenderFrameImpl::createPlugin(
if (base::UTF16ToASCII(params.mimeType) == kBrowserPluginMimeType) {
return render_view_->GetBrowserPluginManager()->CreateBrowserPlugin(
- render_view_.get(), frame);
+ render_view_.get(), frame, false);
}
#if defined(ENABLE_PLUGINS)
@@ -1225,6 +1225,12 @@ blink::WebPlugin* RenderFrameImpl::createPlugin(
if (!found)
return NULL;
+ if (info.type == content::WebPluginInfo::PLUGIN_TYPE_BROWSER_PLUGIN) {
+ return render_view_->GetBrowserPluginManager()->CreateBrowserPlugin(
+ render_view_.get(), frame, true);
+ }
+
+
WebPluginParams params_to_use = params;
params_to_use.mimeType = WebString::fromUTF8(mime_type);
return CreatePlugin(frame, info, params_to_use);