Add 'web-preferences' options in BrowserWindow.
authorCheng Zhao <zcbenz@gmail.com>
Thu, 22 May 2014 14:54:09 +0000 (22:54 +0800)
committerCheng Zhao <zcbenz@gmail.com>
Thu, 22 May 2014 14:54:09 +0000 (22:54 +0800)
atom/browser/native_window.cc
atom/browser/native_window.h
atom/common/options_switches.cc
atom/common/options_switches.h

index 5587780..2c8635b 100644 (file)
@@ -76,6 +76,11 @@ NativeWindow::NativeWindow(content::WebContents* web_contents,
   // Read iframe security before any navigation.
   options->GetString(switches::kNodeIntegration, &node_integration_);
 
+  // Read the web preferences.
+  base::DictionaryValue* web_preferences;
+  if (options->GetDictionary(switches::kWebPreferences, &web_preferences))
+    web_preferences_.reset(web_preferences->DeepCopy());
+
   web_contents->SetDelegate(this);
   inspectable_web_contents()->SetDelegate(this);
 
@@ -348,6 +353,28 @@ void NativeWindow::OverrideWebkitPrefs(const GURL& url, WebPreferences* prefs) {
   // FIXME Disable accelerated composition in frameless window.
   if (!has_frame_)
     prefs->accelerated_compositing_enabled = false;
+
+  bool b;
+  if (!web_preferences_)
+    return;
+  else if (web_preferences_->GetBoolean("javascript", &b))
+    prefs->javascript_enabled = b;
+  else if (web_preferences_->GetBoolean("web-security", &b))
+    prefs->web_security_enabled = b;
+  else if (web_preferences_->GetBoolean("images", &b))
+    prefs->images_enabled = b;
+  else if (web_preferences_->GetBoolean("plugins", &b))
+    prefs->plugins_enabled = b;
+  else if (web_preferences_->GetBoolean("java", &b))
+    prefs->java_enabled = b;
+  else if (web_preferences_->GetBoolean("text-areas-are-resizable", &b))
+    prefs->text_areas_are_resizable = b;
+  else if (web_preferences_->GetBoolean("webgl", &b))
+    prefs->experimental_webgl_enabled = b;
+  else if (web_preferences_->GetBoolean("webaudio", &b))
+    prefs->webaudio_enabled = b;
+  else if (web_preferences_->GetBoolean("accelerated-compositing", &b))
+    prefs->accelerated_compositing_enabled = b;
 }
 
 void NativeWindow::NotifyWindowClosed() {
index 7c2b608..e9bce81 100644 (file)
@@ -290,6 +290,9 @@ class NativeWindow : public brightray::DefaultWebContentsDelegate,
   // it should be cancelled when we can prove that the window is responsive.
   base::CancelableClosure window_unresposive_closure_;
 
+  // web preferences.
+  scoped_ptr<base::DictionaryValue> web_preferences_;
+
   base::WeakPtrFactory<NativeWindow> weak_factory_;
 
   base::WeakPtr<NativeWindow> devtools_window_;
index 270fc1f..05fc8b0 100644 (file)
@@ -39,6 +39,9 @@ const char kAcceptFirstMouse[] = "accept-first-mouse";
 // Whether window size should include window frame.
 const char kUseContentSize[] = "use-content-size";
 
+// The WebPreferences.
+const char kWebPreferences[] = "web-preferences";
+
 }  // namespace switches
 
 }  // namespace atom
index 8fa1056..31463e6 100644 (file)
@@ -29,6 +29,7 @@ extern const char kAlwaysOnTop[];
 extern const char kNodeIntegration[];
 extern const char kAcceptFirstMouse[];
 extern const char kUseContentSize[];
+extern const char kWebPreferences[];
 
 }  // namespace switches