propagate zoom changes to pdf plugin
authordeepak1556 <hop2deep@gmail.com>
Wed, 1 Mar 2017 17:11:51 +0000 (22:41 +0530)
committerdeepak1556 <hop2deep@gmail.com>
Mon, 13 Mar 2017 18:56:27 +0000 (00:26 +0530)
atom/browser/ui/webui/pdf_viewer_handler.cc
atom/browser/ui/webui/pdf_viewer_handler.h
atom/browser/ui/webui/pdf_viewer_ui.cc

index 6b23b93..c369e2d 100644 (file)
@@ -83,6 +83,9 @@ void PdfViewerHandler::RegisterMessages() {
       "getInitialZoom",
       base::Bind(&PdfViewerHandler::GetInitialZoom, base::Unretained(this)));
   web_ui()->RegisterMessageCallback(
+      "setZoom",
+      base::Bind(&PdfViewerHandler::SetZoom, base::Unretained(this)));
+  web_ui()->RegisterMessageCallback(
       "getStrings",
       base::Bind(&PdfViewerHandler::GetStrings, base::Unretained(this)));
   web_ui()->RegisterMessageCallback(
@@ -148,6 +151,20 @@ void PdfViewerHandler::GetInitialZoom(const base::ListValue* args) {
       base::FundamentalValue(content::ZoomLevelToZoomFactor(zoom_level)));
 }
 
+void PdfViewerHandler::SetZoom(const base::ListValue* args) {
+  if (!IsJavascriptAllowed())
+    return;
+  CHECK_EQ(2U, args->GetSize());
+  const base::Value* callback_id;
+  CHECK(args->Get(0, &callback_id));
+  double zoom_level = 0.0;
+  CHECK(args->GetDouble(1, &zoom_level));
+
+  content::HostZoomMap::SetZoomLevel(web_ui()->GetWebContents(),
+                                     zoom_level);
+  ResolveJavascriptCallback(*callback_id, base::FundamentalValue(zoom_level));
+}
+
 void PdfViewerHandler::GetStrings(const base::ListValue* args) {
   if (!IsJavascriptAllowed())
     return;
@@ -187,10 +204,7 @@ void PdfViewerHandler::Reload(const base::ListValue* args) {
 
 void PdfViewerHandler::OnZoomLevelChanged(
     const content::HostZoomMap::ZoomLevelChange& change) {
-  // TODO(deepak1556): This will work only if zoom level is changed through host
-  // zoom map.
-  if (change.scheme == content::kChromeUIScheme &&
-      change.host == kPdfViewerUIHost) {
+  if (change.host == kPdfViewerUIHost) {
     CallJavascriptFunction(
         "cr.webUIListenerCallback", base::StringValue("onZoomLevelChanged"),
         base::FundamentalValue(
index 74fd3ce..70274e3 100644 (file)
@@ -38,6 +38,7 @@ class PdfViewerHandler : public content::WebUIMessageHandler {
   void Initialize(const base::ListValue* args);
   void GetDefaultZoom(const base::ListValue* args);
   void GetInitialZoom(const base::ListValue* args);
+  void SetZoom(const base::ListValue* args);
   void GetStrings(const base::ListValue* args);
   void Reload(const base::ListValue* args);
   void OnZoomLevelChanged(const content::HostZoomMap::ZoomLevelChange& change);
index 0a8d95a..f233f91 100644 (file)
@@ -185,7 +185,6 @@ class PdfViewerUI::ResourceRequester
   }
 
  private:
-  friend class base::RefCountedThreadSafe<ResourceRequester>;
   friend struct BrowserThread::DeleteOnThread<BrowserThread::IO>;
   friend class base::DeleteHelper<ResourceRequester>;
   ~ResourceRequester() override {}
@@ -223,7 +222,8 @@ bool PdfViewerUI::OnMessageReceived(
 void PdfViewerUI::OnPdfStreamCreated(
     std::unique_ptr<content::StreamInfo> stream) {
   stream_ = std::move(stream);
-  pdf_handler_->SetPdfResourceStream(stream_.get());
+  if (pdf_handler_)
+    pdf_handler_->SetPdfResourceStream(stream_.get());
   resource_requester_ = nullptr;
 }