view_id=>stream_id and add some code comments.
authordeepak1556 <hop2deep@gmail.com>
Fri, 3 Feb 2017 10:16:23 +0000 (15:46 +0530)
committerdeepak1556 <hop2deep@gmail.com>
Mon, 13 Mar 2017 18:56:27 +0000 (00:26 +0530)
atom/browser/atom_resource_dispatcher_host_delegate.cc
atom/browser/atom_web_ui_controller_factory.cc
atom/browser/stream_manager.cc
atom/browser/stream_manager.h
atom/browser/ui/webui/pdf_viewer_ui.cc
atom/browser/ui/webui/pdf_viewer_ui.h
atom/common/atom_constants.cc
atom/common/atom_constants.h

index aa65203..758bff0 100644 (file)
@@ -76,13 +76,18 @@ void OnPdfStreamCreated(
   auto browser_context =
       static_cast<AtomBrowserContext*>(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);
 }
 
index 0172a3c..4bd1c30 100644 (file)
@@ -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;
 }
index 7f19d31..4ca1d22 100644 (file)
@@ -17,32 +17,32 @@ StreamManager::StreamManager() {}
 StreamManager::~StreamManager() {}
 
 void StreamManager::AddStream(std::unique_ptr<content::StreamInfo> 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<EmbedderObserver>(
-      this, view_id, render_process_id, render_frame_id);
+  streams_.insert(std::make_pair(stream_id, std::move(stream)));
+  observers_[stream_id] = base::MakeUnique<EmbedderObserver>(
+      this, stream_id, render_process_id, render_frame_id);
 }
 
 std::unique_ptr<content::StreamInfo> 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<content::StreamInfo> 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
index 90b35fe..7a1471d 100644 (file)
@@ -22,12 +22,12 @@ class StreamManager {
   ~StreamManager();
 
   void AddStream(std::unique_ptr<content::StreamInfo> stream,
-                 const std::string& view_id,
+                 const std::string& stream_id,
                  int render_process_id,
                  int render_frame_id);
 
   std::unique_ptr<content::StreamInfo> 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<std::string, std::unique_ptr<content::StreamInfo>> streams_;
 
+  // StreamID => WebContents Observer.
   std::map<std::string, std::unique_ptr<EmbedderObserver>> observers_;
 
   DISALLOW_COPY_AND_ASSIGN(StreamManager);
index 029a8e6..c36b620 100644 (file)
@@ -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<AtomBrowserContext*>(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);
 }
index 02a1f01..53d3098 100644 (file)
@@ -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<content::StreamInfo> stream_;
 
index 42f0d00..ff3754f 100644 (file)
@@ -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
index ddd27d8..8e04fed 100644 (file)
@@ -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