From 3aba23b4712f4ccadba5676c7a6058dd18171f7b Mon Sep 17 00:00:00 2001 From: deepak1556 Date: Fri, 3 Feb 2017 15:46:23 +0530 Subject: [PATCH] view_id=>stream_id and add some code comments. --- .../atom_resource_dispatcher_host_delegate.cc | 13 +++++++++---- atom/browser/atom_web_ui_controller_factory.cc | 8 ++++---- atom/browser/stream_manager.cc | 20 ++++++++++---------- atom/browser/stream_manager.h | 10 ++++++---- atom/browser/ui/webui/pdf_viewer_ui.cc | 6 ++++-- atom/browser/ui/webui/pdf_viewer_ui.h | 3 ++- atom/common/atom_constants.cc | 2 +- atom/common/atom_constants.h | 2 +- 8 files changed, 37 insertions(+), 27 deletions(-) diff --git a/atom/browser/atom_resource_dispatcher_host_delegate.cc b/atom/browser/atom_resource_dispatcher_host_delegate.cc index aa65203..758bff0 100644 --- a/atom/browser/atom_resource_dispatcher_host_delegate.cc +++ b/atom/browser/atom_resource_dispatcher_host_delegate.cc @@ -76,13 +76,18 @@ void OnPdfStreamCreated( auto browser_context = static_cast(web_contents->GetBrowserContext()); auto stream_manager = browser_context->stream_manager(); - std::string view_id = base::GenerateGUID(); + std::string stream_id = base::GenerateGUID(); GURL original_url = stream->original_url; - stream_manager->AddStream(std::move(stream), view_id, render_process_id, + stream_manager->AddStream(std::move(stream), stream_id, render_process_id, render_frame_id); + // The URL passes the stream ID to PDF webui that uses it to extract the + // stream from the StreamManager and also passes the URL that the PDF + // originates from, which is used whenever no stream is available from the + // content layer (this will happen when the webui page is reloaded). + // chrome://pdf-viewer/index.html?streamId=abcd&src=https://somepage/123.pdf content::NavigationController::LoadURLParams params(GURL(base::StringPrintf( - "%sindex.html?%s=%s&%s=%s", kPdfViewerUIOrigin, kPdfViewerUIId, - view_id.c_str(), kPdfPluginSrc, original_url.spec().c_str()))); + "%sindex.html?%s=%s&%s=%s", kPdfViewerUIOrigin, kPdfViewerUIStreamId, + stream_id.c_str(), kPdfPluginSrc, original_url.spec().c_str()))); web_contents->GetController().LoadURLWithParams(params); } diff --git a/atom/browser/atom_web_ui_controller_factory.cc b/atom/browser/atom_web_ui_controller_factory.cc index 0172a3c..4bd1c30 100644 --- a/atom/browser/atom_web_ui_controller_factory.cc +++ b/atom/browser/atom_web_ui_controller_factory.cc @@ -51,16 +51,16 @@ AtomWebUIControllerFactory::CreateWebUIControllerForURL(content::WebUI* web_ui, if (url.host() == kPdfViewerUIHost) { base::StringPairs toplevel_params; base::SplitStringIntoKeyValuePairs(url.query(), '=', '&', &toplevel_params); - std::string view_id, src; + std::string stream_id, src; for (const auto& param : toplevel_params) { - if (param.first == kPdfViewerUIId) { - view_id = param.second; + if (param.first == kPdfViewerUIStreamId) { + stream_id = param.second; } else if (param.first == kPdfPluginSrc) { src = param.second; } } auto browser_context = web_ui->GetWebContents()->GetBrowserContext(); - return new PdfViewerUI(browser_context, web_ui, view_id, src); + return new PdfViewerUI(browser_context, web_ui, stream_id, src); } return nullptr; } diff --git a/atom/browser/stream_manager.cc b/atom/browser/stream_manager.cc index 7f19d31..4ca1d22 100644 --- a/atom/browser/stream_manager.cc +++ b/atom/browser/stream_manager.cc @@ -17,32 +17,32 @@ StreamManager::StreamManager() {} StreamManager::~StreamManager() {} void StreamManager::AddStream(std::unique_ptr stream, - const std::string& view_id, + const std::string& stream_id, int render_process_id, int render_frame_id) { - streams_.insert(std::make_pair(view_id, std::move(stream))); - observers_[view_id] = base::MakeUnique( - this, view_id, render_process_id, render_frame_id); + streams_.insert(std::make_pair(stream_id, std::move(stream))); + observers_[stream_id] = base::MakeUnique( + this, stream_id, render_process_id, render_frame_id); } std::unique_ptr StreamManager::ReleaseStream( - const std::string& view_id) { - auto stream = streams_.find(view_id); + const std::string& stream_id) { + auto stream = streams_.find(stream_id); if (stream == streams_.end()) return nullptr; std::unique_ptr result = base::WrapUnique(stream->second.release()); streams_.erase(stream); - observers_.erase(view_id); + observers_.erase(stream_id); return result; } StreamManager::EmbedderObserver::EmbedderObserver(StreamManager* stream_manager, - const std::string& view_id, + const std::string& stream_id, int render_process_id, int render_frame_id) - : stream_manager_(stream_manager), view_id_(view_id) { + : stream_manager_(stream_manager), stream_id_(stream_id) { content::WebContents* web_contents = content::WebContents::FromRenderFrameHost( content::RenderFrameHost::FromID(render_process_id, render_frame_id)); @@ -60,7 +60,7 @@ void StreamManager::EmbedderObserver::WebContentsDestroyed() { void StreamManager::EmbedderObserver::AbortStream() { Observe(nullptr); - stream_manager_->ReleaseStream(view_id_); + stream_manager_->ReleaseStream(stream_id_); } } // namespace atom diff --git a/atom/browser/stream_manager.h b/atom/browser/stream_manager.h index 90b35fe..7a1471d 100644 --- a/atom/browser/stream_manager.h +++ b/atom/browser/stream_manager.h @@ -22,12 +22,12 @@ class StreamManager { ~StreamManager(); void AddStream(std::unique_ptr stream, - const std::string& view_id, + const std::string& stream_id, int render_process_id, int render_frame_id); std::unique_ptr ReleaseStream( - const std::string& view_id); + const std::string& stream_id); private: // WebContents observer that deletes an unclaimed stream @@ -35,7 +35,7 @@ class StreamManager { class EmbedderObserver : public content::WebContentsObserver { public: EmbedderObserver(StreamManager* stream_manager, - const std::string& view_id, + const std::string& stream_id, int render_process_id, int render_frame_id); @@ -47,13 +47,15 @@ class StreamManager { void AbortStream(); StreamManager* stream_manager_; - std::string view_id_; + std::string stream_id_; DISALLOW_COPY_AND_ASSIGN(EmbedderObserver); }; + // StreamID => Stream. std::map> streams_; + // StreamID => WebContents Observer. std::map> observers_; DISALLOW_COPY_AND_ASSIGN(StreamManager); diff --git a/atom/browser/ui/webui/pdf_viewer_ui.cc b/atom/browser/ui/webui/pdf_viewer_ui.cc index 029a8e6..c36b620 100644 --- a/atom/browser/ui/webui/pdf_viewer_ui.cc +++ b/atom/browser/ui/webui/pdf_viewer_ui.cc @@ -23,6 +23,8 @@ namespace atom { namespace { +// Extracts the path value from the URL without the leading '/', +// which follows the mapping of names in pdf_viewer_resources_map. std::string PathWithoutParams(const std::string& path) { return GURL(kPdfViewerUIOrigin + path).path().substr(1); } @@ -86,14 +88,14 @@ class BundledDataSource : public content::URLDataSource { PdfViewerUI::PdfViewerUI(content::BrowserContext* browser_context, content::WebUI* web_ui, - const std::string& view_id, + const std::string& stream_id, const std::string& src) : content::WebUIController(web_ui), content::WebContentsObserver(web_ui->GetWebContents()), src_(src) { auto context = static_cast(browser_context); auto stream_manager = context->stream_manager(); - stream_ = stream_manager->ReleaseStream(view_id); + stream_ = stream_manager->ReleaseStream(stream_id); web_ui->AddMessageHandler(new PdfViewerHandler(stream_.get(), src)); content::URLDataSource::Add(browser_context, new BundledDataSource); } diff --git a/atom/browser/ui/webui/pdf_viewer_ui.h b/atom/browser/ui/webui/pdf_viewer_ui.h index 02a1f01..53d3098 100644 --- a/atom/browser/ui/webui/pdf_viewer_ui.h +++ b/atom/browser/ui/webui/pdf_viewer_ui.h @@ -24,7 +24,7 @@ class PdfViewerUI : public content::WebUIController, public: PdfViewerUI(content::BrowserContext* browser_context, content::WebUI* web_ui, - const std::string& view_id, + const std::string& stream_id, const std::string& src); ~PdfViewerUI() override; @@ -35,6 +35,7 @@ class PdfViewerUI : public content::WebUIController, private: void OnSaveURLAs(const GURL& url, const content::Referrer& referrer); + // Source URL from where the PDF originates. std::string src_; std::unique_ptr stream_; diff --git a/atom/common/atom_constants.cc b/atom/common/atom_constants.cc index 42f0d00..ff3754f 100644 --- a/atom/common/atom_constants.cc +++ b/atom/common/atom_constants.cc @@ -30,6 +30,6 @@ const char kPdfPluginSrc[] = "src"; const char kPdfViewerUIOrigin[] = "chrome://pdf-viewer/"; const char kPdfViewerUIHost[] = "pdf-viewer"; -const char kPdfViewerUIId[] = "viewId"; +const char kPdfViewerUIStreamId[] = "streamId"; } // namespace atom diff --git a/atom/common/atom_constants.h b/atom/common/atom_constants.h index ddd27d8..8e04fed 100644 --- a/atom/common/atom_constants.h +++ b/atom/common/atom_constants.h @@ -28,7 +28,7 @@ extern const char kPdfPluginSrc[]; // Constants for PDF viewer webui. extern const char kPdfViewerUIOrigin[]; extern const char kPdfViewerUIHost[]; -extern const char kPdfViewerUIId[]; +extern const char kPdfViewerUIStreamId[]; } // namespace atom -- 2.7.4