From fd8c450ef395c4e2f5be919d0ecd35d0597fadc4 Mon Sep 17 00:00:00 2001 From: deepak1556 Date: Sat, 21 Jan 2017 20:27:29 +0530 Subject: [PATCH] move pdfviewer ui data source to separate file --- .../browser/atom_web_ui_controller_factory.cc | 98 +------------------ atom/browser/atom_web_ui_controller_factory.h | 1 - atom/browser/ui/webui/pdf_viewer_ui.cc | 94 ++++++++++++++++++ atom/browser/ui/webui/pdf_viewer_ui.h | 36 +++++++ filenames.gypi | 2 + 5 files changed, 135 insertions(+), 96 deletions(-) create mode 100644 atom/browser/ui/webui/pdf_viewer_ui.cc create mode 100644 atom/browser/ui/webui/pdf_viewer_ui.h diff --git a/atom/browser/atom_web_ui_controller_factory.cc b/atom/browser/atom_web_ui_controller_factory.cc index 7ffbdde7b8a..705b203e25f 100644 --- a/atom/browser/atom_web_ui_controller_factory.cc +++ b/atom/browser/atom_web_ui_controller_factory.cc @@ -4,107 +4,15 @@ #include "atom/browser/atom_web_ui_controller_factory.h" -#include #include -#include "atom/browser/ui/webui/pdf_viewer_handler.h" -#include "base/memory/ptr_util.h" +#include "atom/browser/ui/webui/pdf_viewer_ui.h" #include "base/strings/string_split.h" #include "base/strings/string_util.h" -#include "content/public/browser/render_view_host.h" -#include "content/public/browser/url_data_source.h" #include "content/public/browser/web_contents.h" -#include "content/public/browser/web_ui.h" -#include "content/public/browser/web_ui_controller.h" -#include "content/public/common/bindings_policy.h" -#include "grit/pdf_viewer_resources_map.h" -#include "net/base/mime_util.h" -#include "ui/base/resource/resource_bundle.h" namespace atom { -namespace { - -const char kChromeUIPdfViewerHost[] = "pdf-viewer"; - -std::string PathWithoutParams(const std::string& path) { - return GURL(std::string("chrome://pdf-viewer/") + path).path().substr(1); -} - -class BundledDataSource : public content::URLDataSource { - public: - BundledDataSource() { - for (size_t i = 0; i < kPdfViewerResourcesSize; ++i) { - base::FilePath resource_path = - base::FilePath().AppendASCII(kPdfViewerResources[i].name); - resource_path = resource_path.NormalizePathSeparators(); - - DCHECK(path_to_resource_id_.find(resource_path) == - path_to_resource_id_.end()); - path_to_resource_id_[resource_path] = kPdfViewerResources[i].value; - } - } - - // content::URLDataSource implementation. - std::string GetSource() const override { return kChromeUIPdfViewerHost; } - - void StartDataRequest(const std::string& path, - int render_process_id, - int render_frame_id, - const GotDataCallback& callback) override { - std::string filename = PathWithoutParams(path); - std::map::const_iterator entry = - path_to_resource_id_.find(base::FilePath(filename)); - if (entry != path_to_resource_id_.end()) { - int resource_id = entry->second; - const ui::ResourceBundle& rb = ui::ResourceBundle::GetSharedInstance(); - callback.Run(rb.LoadDataResourceBytes(resource_id)); - } - } - - std::string GetMimeType(const std::string& path) const override { - std::string filename = PathWithoutParams(path); - std::string mime_type; - net::GetMimeTypeFromFile(base::FilePath(filename), &mime_type); - return mime_type; - } - - bool ShouldAddContentSecurityPolicy() const override { return false; } - - bool ShouldDenyXFrameOptions() const override { return false; } - - bool ShouldServeMimeTypeAsContentTypeHeader() const override { return true; } - - private: - ~BundledDataSource() override {} - - // A map from a resource path to the resource ID. - std::map path_to_resource_id_; - - DISALLOW_COPY_AND_ASSIGN(BundledDataSource); -}; - -class PdfViewerUI : public content::WebUIController { - public: - PdfViewerUI(content::BrowserContext* browser_context, - content::WebUI* web_ui, - const std::string& view_id) - : content::WebUIController(web_ui) { - web_ui->AddMessageHandler(new PdfViewerHandler(view_id)); - content::URLDataSource::Add(browser_context, new BundledDataSource); - } - - // content::WebUIController implementation. - void RenderViewCreated(content::RenderViewHost* rvh) override { - rvh->AllowBindings(content::BINDINGS_POLICY_WEB_UI); - } - - private: - DISALLOW_COPY_AND_ASSIGN(PdfViewerUI); -}; - -} // namespace - // static AtomWebUIControllerFactory* AtomWebUIControllerFactory::GetInstance() { return base::Singleton::get(); @@ -117,7 +25,7 @@ AtomWebUIControllerFactory::~AtomWebUIControllerFactory() {} content::WebUI::TypeID AtomWebUIControllerFactory::GetWebUIType( content::BrowserContext* browser_context, const GURL& url) const { - if (url.host() == kChromeUIPdfViewerHost) { + if (url.host() == PdfViewerUI::kHost) { return const_cast(this); } @@ -139,7 +47,7 @@ bool AtomWebUIControllerFactory::UseWebUIBindingsForURL( content::WebUIController* AtomWebUIControllerFactory::CreateWebUIControllerForURL(content::WebUI* web_ui, const GURL& url) const { - if (url.host() == kChromeUIPdfViewerHost) { + if (url.host() == PdfViewerUI::kHost) { base::StringPairs toplevel_params; base::SplitStringIntoKeyValuePairs(url.query(), '=', '&', &toplevel_params); std::string view_id; diff --git a/atom/browser/atom_web_ui_controller_factory.h b/atom/browser/atom_web_ui_controller_factory.h index d2713608e84..41819daf8cc 100644 --- a/atom/browser/atom_web_ui_controller_factory.h +++ b/atom/browser/atom_web_ui_controller_factory.h @@ -7,7 +7,6 @@ #include "base/macros.h" #include "base/memory/singleton.h" -#include "content/public/browser/web_ui.h" #include "content/public/browser/web_ui_controller_factory.h" namespace atom { diff --git a/atom/browser/ui/webui/pdf_viewer_ui.cc b/atom/browser/ui/webui/pdf_viewer_ui.cc new file mode 100644 index 00000000000..86705cc9203 --- /dev/null +++ b/atom/browser/ui/webui/pdf_viewer_ui.cc @@ -0,0 +1,94 @@ +// Copyright (c) 2017 GitHub, Inc. +// Use of this source code is governed by the MIT license that can be +// found in the LICENSE file. + +#include "atom/browser/ui/webui/pdf_viewer_ui.h" + +#include + +#include "atom/browser/ui/webui/pdf_viewer_handler.h" +#include "content/public/browser/render_view_host.h" +#include "content/public/browser/url_data_source.h" +#include "content/public/common/bindings_policy.h" +#include "grit/pdf_viewer_resources_map.h" +#include "net/base/mime_util.h" +#include "ui/base/resource/resource_bundle.h" + +namespace atom { + +namespace { + +std::string PathWithoutParams(const std::string& path) { + return GURL(std::string("chrome://pdf-viewer/") + path).path().substr(1); +} + +class BundledDataSource : public content::URLDataSource { + public: + BundledDataSource() { + for (size_t i = 0; i < kPdfViewerResourcesSize; ++i) { + base::FilePath resource_path = + base::FilePath().AppendASCII(kPdfViewerResources[i].name); + resource_path = resource_path.NormalizePathSeparators(); + + DCHECK(path_to_resource_id_.find(resource_path) == + path_to_resource_id_.end()); + path_to_resource_id_[resource_path] = kPdfViewerResources[i].value; + } + } + + // content::URLDataSource implementation. + std::string GetSource() const override { return PdfViewerUI::kHost; } + + void StartDataRequest(const std::string& path, + int render_process_id, + int render_frame_id, + const GotDataCallback& callback) override { + std::string filename = PathWithoutParams(path); + std::map::const_iterator entry = + path_to_resource_id_.find(base::FilePath(filename)); + if (entry != path_to_resource_id_.end()) { + int resource_id = entry->second; + const ui::ResourceBundle& rb = ui::ResourceBundle::GetSharedInstance(); + callback.Run(rb.LoadDataResourceBytes(resource_id)); + } + } + + std::string GetMimeType(const std::string& path) const override { + std::string filename = PathWithoutParams(path); + std::string mime_type; + net::GetMimeTypeFromFile(base::FilePath(filename), &mime_type); + return mime_type; + } + + bool ShouldAddContentSecurityPolicy() const override { return false; } + + bool ShouldDenyXFrameOptions() const override { return false; } + + bool ShouldServeMimeTypeAsContentTypeHeader() const override { return true; } + + private: + ~BundledDataSource() override {} + + // A map from a resource path to the resource ID. + std::map path_to_resource_id_; + + DISALLOW_COPY_AND_ASSIGN(BundledDataSource); +}; + +} // namespace + +const char PdfViewerUI::kHost[] = "pdf-viewer"; + +PdfViewerUI::PdfViewerUI(content::BrowserContext* browser_context, + content::WebUI* web_ui, + const std::string& view_id) + : content::WebUIController(web_ui) { + web_ui->AddMessageHandler(new PdfViewerHandler(view_id)); + content::URLDataSource::Add(browser_context, new BundledDataSource); +} + +void PdfViewerUI::RenderViewCreated(content::RenderViewHost* rvh) { + rvh->AllowBindings(content::BINDINGS_POLICY_WEB_UI); +} + +} // namespace atom diff --git a/atom/browser/ui/webui/pdf_viewer_ui.h b/atom/browser/ui/webui/pdf_viewer_ui.h new file mode 100644 index 00000000000..61f88c5fdf0 --- /dev/null +++ b/atom/browser/ui/webui/pdf_viewer_ui.h @@ -0,0 +1,36 @@ +// Copyright (c) 2017 GitHub, Inc. +// Use of this source code is governed by the MIT license that can be +// found in the LICENSE file. + +#ifndef ATOM_BROWSER_UI_WEBUI_PDF_VIEWER_UI_H_ +#define ATOM_BROWSER_UI_WEBUI_PDF_VIEWER_UI_H_ + +#include + +#include "base/macros.h" +#include "content/public/browser/web_ui_controller.h" + +namespace content { +class BrowserContext; +} + +namespace atom { + +class PdfViewerUI : public content::WebUIController { + public: + static const char kHost[]; + + PdfViewerUI(content::BrowserContext* browser_context, + content::WebUI* web_ui, + const std::string& view_id); + + // content::WebUIController implementation. + void RenderViewCreated(content::RenderViewHost* rvh) override; + + private: + DISALLOW_COPY_AND_ASSIGN(PdfViewerUI); +}; + +} // namespace atom + +#endif // ATOM_BROWSER_UI_WEBUI_PDF_VIEWER_UI_H_ diff --git a/filenames.gypi b/filenames.gypi index 6b233bd8d96..dc6c4995b30 100644 --- a/filenames.gypi +++ b/filenames.gypi @@ -330,6 +330,8 @@ 'atom/browser/ui/views/win_frame_view.h', 'atom/browser/ui/webui/pdf_viewer_handler.cc', 'atom/browser/ui/webui/pdf_viewer_handler.h', + 'atom/browser/ui/webui/pdf_viewer_ui.cc', + 'atom/browser/ui/webui/pdf_viewer_ui.h', 'atom/browser/ui/win/atom_desktop_native_widget_aura.cc', 'atom/browser/ui/win/atom_desktop_native_widget_aura.h', 'atom/browser/ui/win/atom_desktop_window_tree_host_win.cc',