From 10a8f3c88450578aae3eff830108a6391171784a Mon Sep 17 00:00:00 2001 From: Cheng Zhao Date: Sun, 26 Oct 2014 14:05:54 +0800 Subject: [PATCH] Make work with plugins turned off --- atom/browser/atom_browser_client.cc | 2 +- atom/browser/default_app/default_app.js | 3 --- atom/browser/native_window.cc | 6 +++-- atom/common/options_switches.cc | 3 +++ atom/common/options_switches.h | 1 + atom/renderer/atom_renderer_client.cc | 16 ++++++++++++ atom/renderer/atom_renderer_client.h | 34 ++++++++++++++----------- spec/asar-spec.coffee | 1 - spec/static/main.js | 1 - 9 files changed, 44 insertions(+), 23 deletions(-) diff --git a/atom/browser/atom_browser_client.cc b/atom/browser/atom_browser_client.cc index 7045a09924a7..656ad6d0ec6a 100644 --- a/atom/browser/atom_browser_client.cc +++ b/atom/browser/atom_browser_client.cc @@ -75,7 +75,7 @@ void AtomBrowserClient::OverrideWebkitPrefs( prefs->javascript_enabled = true; prefs->web_security_enabled = true; prefs->javascript_can_open_windows_automatically = true; - prefs->plugins_enabled = false; + prefs->plugins_enabled = true; prefs->dom_paste_enabled = true; prefs->java_enabled = false; prefs->allow_scripts_to_close_windows = true; diff --git a/atom/browser/default_app/default_app.js b/atom/browser/default_app/default_app.js index 269821d2a3d9..ee5e5733e1de 100644 --- a/atom/browser/default_app/default_app.js +++ b/atom/browser/default_app/default_app.js @@ -18,9 +18,6 @@ app.on('ready', function() { resizable: false, 'auto-hide-menu-bar': true, 'use-content-size': true, - 'web-preferences': { - 'plugins': true, - }, }); mainWindow.loadUrl('file://' + __dirname + '/index.html'); mainWindow.focus(); diff --git a/atom/browser/native_window.cc b/atom/browser/native_window.cc index 0921340f140d..71eb65112d1a 100644 --- a/atom/browser/native_window.cc +++ b/atom/browser/native_window.cc @@ -362,6 +362,10 @@ void NativeWindow::AppendExtraCommandLineSwitches( command_line->AppendSwitch(::switches::kDisableDirectWrite); #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 // them via command line and enable them in renderer procss. for (size_t i = 0; i < arraysize(kWebRuntimeFeatures); ++i) { @@ -392,8 +396,6 @@ void NativeWindow::OverrideWebkitPrefs(const GURL& url, prefs->experimental_webgl_enabled = b; if (web_preferences_.Get("webaudio", &b)) prefs->webaudio_enabled = b; - if (web_preferences_.Get("plugins", &b)) - prefs->plugins_enabled = b; if (web_preferences_.Get("extra-plugin-dirs", &list)) for (size_t i = 0; i < list.size(); ++i) content::PluginService::GetInstance()->AddExtraPluginDir(list[i]); diff --git a/atom/common/options_switches.cc b/atom/common/options_switches.cc index 3d37a7d87ea8..974b40b38243 100644 --- a/atom/common/options_switches.cc +++ b/atom/common/options_switches.cc @@ -60,6 +60,9 @@ const char kDarkTheme[] = "dark-theme"; // Enable DirectWrite on Windows. const char kDirectWrite[] = "direct-write"; +// Enable plugins. +const char kEnablePlugins[] = "enable-plugins"; + // Web runtime features. const char kExperimentalFeatures[] = "experimental-features"; const char kExperimentalCanvasFeatures[] = "experimental-canvas-features"; diff --git a/atom/common/options_switches.h b/atom/common/options_switches.h index a9befacbae9d..94c236959cde 100644 --- a/atom/common/options_switches.h +++ b/atom/common/options_switches.h @@ -36,6 +36,7 @@ extern const char kAutoHideMenuBar[]; extern const char kEnableLargerThanScreen[]; extern const char kDarkTheme[]; extern const char kDirectWrite[]; +extern const char kEnablePlugins[]; extern const char kExperimentalFeatures[]; extern const char kExperimentalCanvasFeatures[]; diff --git a/atom/renderer/atom_renderer_client.cc b/atom/renderer/atom_renderer_client.cc index 7d901502580b..59316c22190a 100644 --- a/atom/renderer/atom_renderer_client.cc +++ b/atom/renderer/atom_renderer_client.cc @@ -13,6 +13,7 @@ #include "atom/renderer/atom_render_view_observer.h" #include "chrome/renderer/printing/print_web_view_helper.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_observer.h" #include "content/public/renderer/render_thread.h" @@ -20,6 +21,7 @@ #include "native_mate/converter.h" #include "third_party/WebKit/public/web/WebCustomElement.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/WebRuntimeFeatures.h" @@ -112,6 +114,20 @@ blink::WebSpeechSynthesizer* AtomRendererClient::OverrideSpeechSynthesizer( 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, v8::Handle context, int extension_group, diff --git a/atom/renderer/atom_renderer_client.h b/atom/renderer/atom_renderer_client.h index 79b70c16c9b7..7761dcbcd027 100644 --- a/atom/renderer/atom_renderer_client.h +++ b/atom/renderer/atom_renderer_client.h @@ -45,21 +45,25 @@ class AtomRendererClient : public content::ContentRendererClient, virtual void WebKitInitialized() OVERRIDE; // content::ContentRendererClient: - virtual void RenderThreadStarted() OVERRIDE; - virtual void RenderFrameCreated(content::RenderFrame* render_frame) OVERRIDE; - virtual void RenderViewCreated(content::RenderView*) OVERRIDE; - virtual blink::WebSpeechSynthesizer* OverrideSpeechSynthesizer( - blink::WebSpeechSynthesizerClient* client); - virtual void DidCreateScriptContext(blink::WebFrame* frame, - v8::Handle context, - int extension_group, - int world_id) OVERRIDE; - virtual bool ShouldFork(blink::WebFrame* frame, - const GURL& url, - const std::string& http_method, - bool is_initial_navigation, - bool is_server_redirect, - bool* send_referrer) OVERRIDE; + void RenderThreadStarted() override; + void RenderFrameCreated(content::RenderFrame* render_frame) override; + void RenderViewCreated(content::RenderView*) override; + blink::WebSpeechSynthesizer* OverrideSpeechSynthesizer( + blink::WebSpeechSynthesizerClient* client) override; + bool OverrideCreatePlugin(content::RenderFrame* render_frame, + blink::WebLocalFrame* frame, + const blink::WebPluginParams& params, + blink::WebPlugin** plugin) override; + void DidCreateScriptContext(blink::WebFrame* frame, + v8::Handle context, + int extension_group, + int world_id) override; + bool ShouldFork(blink::WebFrame* frame, + const GURL& url, + const std::string& http_method, + bool is_initial_navigation, + bool is_server_redirect, + bool* send_referrer) override; void EnableWebRuntimeFeatures(); diff --git a/spec/asar-spec.coffee b/spec/asar-spec.coffee index 2cfab885682d..12cbff7989ae 100644 --- a/spec/asar-spec.coffee +++ b/spec/asar-spec.coffee @@ -387,7 +387,6 @@ describe 'asar package', -> w = new BrowserWindow(show: false, width: 400, height: 400) p = path.resolve fixtures, 'asar', 'web.asar', 'index.html' u = url.format protocol: 'asar', slashed: false, pathname: p - console.log u w.loadUrl u ipc.on 'dirname', (event, dirname) -> assert.equal dirname, path.dirname(p) diff --git a/spec/static/main.js b/spec/static/main.js index 15f68856a7d9..01ee3dba8e44 100644 --- a/spec/static/main.js +++ b/spec/static/main.js @@ -141,7 +141,6 @@ app.on('ready', function() { width: 800, height: 600, 'web-preferences': { - plugins: true, // Required by . javascript: true // Test whether web-preferences crashes. }, });