Allow setting default zoom factor.
authorCheng Zhao <zcbenz@gmail.com>
Mon, 16 Jun 2014 10:52:04 +0000 (18:52 +0800)
committerCheng Zhao <zcbenz@gmail.com>
Mon, 16 Jun 2014 10:52:04 +0000 (18:52 +0800)
atom/browser/native_window.cc
atom/browser/native_window.h
atom/common/options_switches.cc
atom/common/options_switches.h
atom/renderer/atom_render_view_observer.cc
atom/renderer/atom_render_view_observer.h

index 7b3e2e3..68bec93 100644 (file)
@@ -22,6 +22,7 @@
 #include "base/json/json_writer.h"
 #include "base/prefs/pref_service.h"
 #include "base/message_loop/message_loop.h"
+#include "base/strings/string_number_conversions.h"
 #include "base/strings/stringprintf.h"
 #include "base/strings/utf_string_conversions.h"
 #include "base/values.h"
@@ -58,6 +59,7 @@ NativeWindow::NativeWindow(content::WebContents* web_contents,
       is_closed_(false),
       node_integration_("except-iframe"),
       has_dialog_attached_(false),
+      zoom_factor_(1.0),
       weak_factory_(this),
       inspectable_web_contents_(
           brightray::InspectableWebContents::Create(web_contents)) {
@@ -82,6 +84,9 @@ NativeWindow::NativeWindow(content::WebContents* web_contents,
   if (options->GetDictionary(switches::kWebPreferences, &web_preferences))
     web_preferences_.reset(web_preferences->DeepCopy());
 
+  // Read the zoom factor before any navigation.
+  options->GetDouble(switches::kZoomFactor, &zoom_factor_);
+
   web_contents->SetDelegate(this);
   inspectable_web_contents()->SetDelegate(this);
 
@@ -358,6 +363,11 @@ void NativeWindow::AppendExtraCommandLineSwitches(CommandLine* command_line,
   // Append --node-integration to renderer process.
   command_line->AppendSwitchASCII(switches::kNodeIntegration,
                                   node_integration_);
+
+  // Append --zoom-factor.
+  if (zoom_factor_ != 1.0)
+    command_line->AppendSwitchASCII(switches::kZoomFactor,
+                                    base::DoubleToString(zoom_factor_));
 }
 
 void NativeWindow::OverrideWebkitPrefs(const GURL& url, WebPreferences* prefs) {
index cb539a4..7fd79a5 100644 (file)
@@ -294,9 +294,12 @@ 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.
+  // Web preferences.
   scoped_ptr<base::DictionaryValue> web_preferences_;
 
+  // Page's default zoom factor.
+  double zoom_factor_;
+
   base::WeakPtrFactory<NativeWindow> weak_factory_;
 
   base::WeakPtr<NativeWindow> devtools_window_;
index 2a99831..ba3634e 100644 (file)
@@ -45,6 +45,9 @@ const char kUseContentSize[] = "use-content-size";
 // The WebPreferences.
 const char kWebPreferences[] = "web-preferences";
 
+// The factor of which page should be zoomed.
+const char kZoomFactor[] = "zoom-factor";
+
 }  // namespace switches
 
 }  // namespace atom
index f08c333..8d06177 100644 (file)
@@ -31,6 +31,7 @@ extern const char kNodeIntegration[];
 extern const char kAcceptFirstMouse[];
 extern const char kUseContentSize[];
 extern const char kWebPreferences[];
+extern const char kZoomFactor[];
 
 }  // namespace switches
 
index 1815bfd..ed57df9 100644 (file)
@@ -7,8 +7,11 @@
 #include <vector>
 
 #include "atom/common/api/api_messages.h"
+#include "atom/common/options_switches.h"
 #include "atom/renderer/api/atom_renderer_bindings.h"
 #include "atom/renderer/atom_renderer_client.h"
+#include "base/command_line.h"
+#include "base/strings/string_number_conversions.h"
 #include "content/public/renderer/render_view.h"
 #include "ipc/ipc_message_macros.h"
 #include "third_party/WebKit/public/web/WebDraggableRegion.h"
@@ -32,6 +35,18 @@ AtomRenderViewObserver::AtomRenderViewObserver(
 AtomRenderViewObserver::~AtomRenderViewObserver() {
 }
 
+void AtomRenderViewObserver::DidCreateDocumentElement(WebKit::WebFrame* frame) {
+  std::string zoom_factor_str = CommandLine::ForCurrentProcess()->
+      GetSwitchValueASCII(switches::kZoomFactor);;
+  if (zoom_factor_str.empty())
+    return;
+  double zoom_factor;
+  if (!base::StringToDouble(zoom_factor_str, &zoom_factor))
+    return;
+  double zoom_level = WebKit::WebView::zoomFactorToZoomLevel(zoom_factor);
+  frame->view()->setZoomLevel(zoom_level);
+}
+
 void AtomRenderViewObserver::DraggableRegionsChanged(WebKit::WebFrame* frame) {
   WebKit::WebVector<WebKit::WebDraggableRegion> webregions =
       frame->document().draggableRegions();
index 3b5863d..4de9fd3 100644 (file)
@@ -25,6 +25,7 @@ class AtomRenderViewObserver : public content::RenderViewObserver {
 
  private:
   // content::RenderViewObserver implementation.
+  virtual void DidCreateDocumentElement(WebKit::WebFrame* frame) OVERRIDE;
   virtual void DraggableRegionsChanged(WebKit::WebFrame* frame) OVERRIDE;
   virtual bool OnMessageReceived(const IPC::Message& message) OVERRIDE;