Make <webview> work with plugins turned off

This commit is contained in:
Cheng Zhao 2014-10-26 14:05:54 +08:00
parent db071f8d8e
commit 10a8f3c884
9 changed files with 44 additions and 23 deletions

View file

@ -75,7 +75,7 @@ void AtomBrowserClient::OverrideWebkitPrefs(
prefs->javascript_enabled = true; prefs->javascript_enabled = true;
prefs->web_security_enabled = true; prefs->web_security_enabled = true;
prefs->javascript_can_open_windows_automatically = true; prefs->javascript_can_open_windows_automatically = true;
prefs->plugins_enabled = false; prefs->plugins_enabled = true;
prefs->dom_paste_enabled = true; prefs->dom_paste_enabled = true;
prefs->java_enabled = false; prefs->java_enabled = false;
prefs->allow_scripts_to_close_windows = true; prefs->allow_scripts_to_close_windows = true;

View file

@ -18,9 +18,6 @@ app.on('ready', function() {
resizable: false, resizable: false,
'auto-hide-menu-bar': true, 'auto-hide-menu-bar': true,
'use-content-size': true, 'use-content-size': true,
'web-preferences': {
'plugins': true,
},
}); });
mainWindow.loadUrl('file://' + __dirname + '/index.html'); mainWindow.loadUrl('file://' + __dirname + '/index.html');
mainWindow.focus(); mainWindow.focus();

View file

@ -362,6 +362,10 @@ void NativeWindow::AppendExtraCommandLineSwitches(
command_line->AppendSwitch(::switches::kDisableDirectWrite); command_line->AppendSwitch(::switches::kDisableDirectWrite);
#endif #endif
// Check if plugins are enabled.
if (web_preferences_.Get("plugins", &b) && b)
command_line->AppendSwitch(switches::kEnablePlugins);
// This set of options are not availabe in WebPreferences, so we have to pass // This set of options are not availabe in WebPreferences, so we have to pass
// them via command line and enable them in renderer procss. // them via command line and enable them in renderer procss.
for (size_t i = 0; i < arraysize(kWebRuntimeFeatures); ++i) { for (size_t i = 0; i < arraysize(kWebRuntimeFeatures); ++i) {
@ -392,8 +396,6 @@ void NativeWindow::OverrideWebkitPrefs(const GURL& url,
prefs->experimental_webgl_enabled = b; prefs->experimental_webgl_enabled = b;
if (web_preferences_.Get("webaudio", &b)) if (web_preferences_.Get("webaudio", &b))
prefs->webaudio_enabled = b; prefs->webaudio_enabled = b;
if (web_preferences_.Get("plugins", &b))
prefs->plugins_enabled = b;
if (web_preferences_.Get("extra-plugin-dirs", &list)) if (web_preferences_.Get("extra-plugin-dirs", &list))
for (size_t i = 0; i < list.size(); ++i) for (size_t i = 0; i < list.size(); ++i)
content::PluginService::GetInstance()->AddExtraPluginDir(list[i]); content::PluginService::GetInstance()->AddExtraPluginDir(list[i]);

View file

@ -60,6 +60,9 @@ const char kDarkTheme[] = "dark-theme";
// Enable DirectWrite on Windows. // Enable DirectWrite on Windows.
const char kDirectWrite[] = "direct-write"; const char kDirectWrite[] = "direct-write";
// Enable plugins.
const char kEnablePlugins[] = "enable-plugins";
// Web runtime features. // Web runtime features.
const char kExperimentalFeatures[] = "experimental-features"; const char kExperimentalFeatures[] = "experimental-features";
const char kExperimentalCanvasFeatures[] = "experimental-canvas-features"; const char kExperimentalCanvasFeatures[] = "experimental-canvas-features";

View file

@ -36,6 +36,7 @@ extern const char kAutoHideMenuBar[];
extern const char kEnableLargerThanScreen[]; extern const char kEnableLargerThanScreen[];
extern const char kDarkTheme[]; extern const char kDarkTheme[];
extern const char kDirectWrite[]; extern const char kDirectWrite[];
extern const char kEnablePlugins[];
extern const char kExperimentalFeatures[]; extern const char kExperimentalFeatures[];
extern const char kExperimentalCanvasFeatures[]; extern const char kExperimentalCanvasFeatures[];

View file

@ -13,6 +13,7 @@
#include "atom/renderer/atom_render_view_observer.h" #include "atom/renderer/atom_render_view_observer.h"
#include "chrome/renderer/printing/print_web_view_helper.h" #include "chrome/renderer/printing/print_web_view_helper.h"
#include "chrome/renderer/tts_dispatcher.h" #include "chrome/renderer/tts_dispatcher.h"
#include "content/public/common/content_constants.h"
#include "content/public/renderer/render_frame.h" #include "content/public/renderer/render_frame.h"
#include "content/public/renderer/render_frame_observer.h" #include "content/public/renderer/render_frame_observer.h"
#include "content/public/renderer/render_thread.h" #include "content/public/renderer/render_thread.h"
@ -20,6 +21,7 @@
#include "native_mate/converter.h" #include "native_mate/converter.h"
#include "third_party/WebKit/public/web/WebCustomElement.h" #include "third_party/WebKit/public/web/WebCustomElement.h"
#include "third_party/WebKit/public/web/WebFrame.h" #include "third_party/WebKit/public/web/WebFrame.h"
#include "third_party/WebKit/public/web/WebPluginParams.h"
#include "third_party/WebKit/public/web/WebKit.h" #include "third_party/WebKit/public/web/WebKit.h"
#include "third_party/WebKit/public/web/WebRuntimeFeatures.h" #include "third_party/WebKit/public/web/WebRuntimeFeatures.h"
@ -112,6 +114,20 @@ blink::WebSpeechSynthesizer* AtomRendererClient::OverrideSpeechSynthesizer(
return new TtsDispatcher(client); return new TtsDispatcher(client);
} }
bool AtomRendererClient::OverrideCreatePlugin(
content::RenderFrame* render_frame,
blink::WebLocalFrame* frame,
const blink::WebPluginParams& params,
blink::WebPlugin** plugin) {
base::CommandLine* command_line = base::CommandLine::ForCurrentProcess();
if (params.mimeType.utf8() == content::kBrowserPluginMimeType ||
command_line->HasSwitch(switches::kEnablePlugins))
return false;
*plugin = nullptr;
return true;
}
void AtomRendererClient::DidCreateScriptContext(blink::WebFrame* frame, void AtomRendererClient::DidCreateScriptContext(blink::WebFrame* frame,
v8::Handle<v8::Context> context, v8::Handle<v8::Context> context,
int extension_group, int extension_group,

View file

@ -45,21 +45,25 @@ class AtomRendererClient : public content::ContentRendererClient,
virtual void WebKitInitialized() OVERRIDE; virtual void WebKitInitialized() OVERRIDE;
// content::ContentRendererClient: // content::ContentRendererClient:
virtual void RenderThreadStarted() OVERRIDE; void RenderThreadStarted() override;
virtual void RenderFrameCreated(content::RenderFrame* render_frame) OVERRIDE; void RenderFrameCreated(content::RenderFrame* render_frame) override;
virtual void RenderViewCreated(content::RenderView*) OVERRIDE; void RenderViewCreated(content::RenderView*) override;
virtual blink::WebSpeechSynthesizer* OverrideSpeechSynthesizer( blink::WebSpeechSynthesizer* OverrideSpeechSynthesizer(
blink::WebSpeechSynthesizerClient* client); blink::WebSpeechSynthesizerClient* client) override;
virtual void DidCreateScriptContext(blink::WebFrame* frame, bool OverrideCreatePlugin(content::RenderFrame* render_frame,
v8::Handle<v8::Context> context, blink::WebLocalFrame* frame,
int extension_group, const blink::WebPluginParams& params,
int world_id) OVERRIDE; blink::WebPlugin** plugin) override;
virtual bool ShouldFork(blink::WebFrame* frame, void DidCreateScriptContext(blink::WebFrame* frame,
const GURL& url, v8::Handle<v8::Context> context,
const std::string& http_method, int extension_group,
bool is_initial_navigation, int world_id) override;
bool is_server_redirect, bool ShouldFork(blink::WebFrame* frame,
bool* send_referrer) OVERRIDE; const GURL& url,
const std::string& http_method,
bool is_initial_navigation,
bool is_server_redirect,
bool* send_referrer) override;
void EnableWebRuntimeFeatures(); void EnableWebRuntimeFeatures();

View file

@ -387,7 +387,6 @@ describe 'asar package', ->
w = new BrowserWindow(show: false, width: 400, height: 400) w = new BrowserWindow(show: false, width: 400, height: 400)
p = path.resolve fixtures, 'asar', 'web.asar', 'index.html' p = path.resolve fixtures, 'asar', 'web.asar', 'index.html'
u = url.format protocol: 'asar', slashed: false, pathname: p u = url.format protocol: 'asar', slashed: false, pathname: p
console.log u
w.loadUrl u w.loadUrl u
ipc.on 'dirname', (event, dirname) -> ipc.on 'dirname', (event, dirname) ->
assert.equal dirname, path.dirname(p) assert.equal dirname, path.dirname(p)

View file

@ -141,7 +141,6 @@ app.on('ready', function() {
width: 800, width: 800,
height: 600, height: 600,
'web-preferences': { 'web-preferences': {
plugins: true, // Required by <webview>.
javascript: true // Test whether web-preferences crashes. javascript: true // Test whether web-preferences crashes.
}, },
}); });