Home | History | Annotate | Download | only in pdf
      1 // Copyright 2013 The Chromium Authors. All rights reserved.
      2 // Use of this source code is governed by a BSD-style license that can be
      3 // found in the LICENSE file.
      4 
      5 (function() {
      6   'use strict';
      7 
      8   /**
      9    * A map of view ID (which identifies a particular PDF viewer instance) to
     10    * stream object.
     11    * @type {Object.<string, Object>}
     12    */
     13   var streams = {};
     14 
     15   /**
     16    * A map of view ID (which identifies a particular PDF viewer instance) to
     17    * initialization function for that view.
     18    * @type {Object.<string, Function>}
     19    */
     20   var pluginInitFunctions = {};
     21 
     22   /**
     23    * If we have received a stream object and an initialization function for a
     24    * particular PDF viewer instance we know that the extension has loaded in
     25    * and we can pass it the stream. We can then delete the corresponding map
     26    * entries.
     27    * @param {string} viewId The ID of the view to initialize with a stream.
     28    */
     29   function flush(viewId) {
     30     if (viewId in streams && viewId in pluginInitFunctions) {
     31       pluginInitFunctions[viewId](streams[viewId]);
     32       delete streams[viewId];
     33       delete pluginInitFunctions[viewId];
     34     }
     35   }
     36 
     37   /**
     38    * This is called when loading a document with the PDF mime type and passes a
     39    * stream that points to the PDF file. This may be run before or after we
     40    * receive a message from the PDF viewer with its initialization function.
     41    */
     42   chrome.streamsPrivate.onExecuteMimeTypeHandler.addListener(
     43     function(streamDetails) {
     44       // Store the stream until we are contacted by the PDF viewer that owns the
     45       // stream.
     46       streams[streamDetails.viewId] = streamDetails;
     47       flush(streamDetails.viewId);
     48     }
     49   );
     50 
     51   /**
     52    * This is called when we receive a message from the PDF viewer indicating
     53    * it has loaded and is ready to receive a stream of the data.
     54    */
     55   chrome.runtime.onMessage.addListener(
     56     function(request, sender, responseFunction) {
     57       // Store the initialization function until we receive the stream which
     58       // corresponds to the PDF viewer.
     59       pluginInitFunctions[request.viewId] = responseFunction;
     60       flush(request.viewId);
     61     }
     62   );
     63 }());
     64