1a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)// Copyright 2013 The Chromium Authors. All rights reserved. 2a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 3a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)// found in the LICENSE file. 4a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) 5a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)(function() { 6a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 'use strict'; 7a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 8a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) /** 91320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci * A map of view ID (which identifies a particular PDF viewer instance) to 101320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci * stream object. 111320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci * @type {Object.<string, Object>} 12a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) */ 131320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci var streams = {}; 14a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 151320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci /** 161320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci * A map of view ID (which identifies a particular PDF viewer instance) to 171320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci * initialization function for that view. 181320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci * @type {Object.<string, Function>} 191320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci */ 201320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci var pluginInitFunctions = {}; 211320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 221320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci /** 231320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci * If we have received a stream object and an initialization function for a 241320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci * particular PDF viewer instance we know that the extension has loaded in 251320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci * and we can pass it the stream. We can then delete the corresponding map 261320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci * entries. 271320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci * @param {string} viewId The ID of the view to initialize with a stream. 281320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci */ 291320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci function flush(viewId) { 301320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci if (viewId in streams && viewId in pluginInitFunctions) { 311320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci pluginInitFunctions[viewId](streams[viewId]); 321320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci delete streams[viewId]; 331320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci delete pluginInitFunctions[viewId]; 341320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci } 351320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci } 36a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 371320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci /** 381320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci * This is called when loading a document with the PDF mime type and passes a 391320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci * stream that points to the PDF file. This may be run before or after we 401320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci * receive a message from the PDF viewer with its initialization function. 411320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci */ 42a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) chrome.streamsPrivate.onExecuteMimeTypeHandler.addListener( 43a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) function(streamDetails) { 441320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci // Store the stream until we are contacted by the PDF viewer that owns the 451320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci // stream. 461320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci streams[streamDetails.viewId] = streamDetails; 471320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci flush(streamDetails.viewId); 48a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) } 49a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) ); 50a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 511320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci /** 521320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci * This is called when we receive a message from the PDF viewer indicating 531320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci * it has loaded and is ready to receive a stream of the data. 541320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci */ 551320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci chrome.runtime.onMessage.addListener( 561320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci function(request, sender, responseFunction) { 571320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci // Store the initialization function until we receive the stream which 581320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci // corresponds to the PDF viewer. 591320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci pluginInitFunctions[request.viewId] = responseFunction; 601320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci flush(request.viewId); 611320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci } 621320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci ); 63a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)}()); 64