| OLD | NEW | 
 | (Empty) | 
|   1 // Copyright 2014 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 var shellNatives = requireNative('shell_natives'); |  | 
|   6 var Binding = require('binding').Binding; |  | 
|   7 var forEach = require('utils').forEach; |  | 
|   8 var renderViewObserverNatives = requireNative('renderViewObserverNatives'); |  | 
|   9  |  | 
|  10 var currentAppWindow = null; |  | 
|  11  |  | 
|  12 var shell = Binding.create('shell'); |  | 
|  13 shell.registerCustomHook(function(bindingsAPI) { |  | 
|  14   var apiFunctions = bindingsAPI.apiFunctions; |  | 
|  15  |  | 
|  16   apiFunctions.setCustomCallback('createWindow', |  | 
|  17                                  function(name, request, windowParams) { |  | 
|  18     var view = null; |  | 
|  19  |  | 
|  20     // When window creation fails, |windowParams| will be undefined. |  | 
|  21     if (windowParams && windowParams.viewId) { |  | 
|  22       view = shellNatives.GetView(windowParams.viewId); |  | 
|  23     } |  | 
|  24  |  | 
|  25     if (!view) { |  | 
|  26       // No route to created window. If given a callback, trigger it with an |  | 
|  27       // undefined object. |  | 
|  28       if (request.callback) { |  | 
|  29         request.callback(undefined); |  | 
|  30         delete request.callback; |  | 
|  31       } |  | 
|  32       return; |  | 
|  33     } |  | 
|  34  |  | 
|  35     // Initialize the app window in the newly created JS context |  | 
|  36     view.chrome.shell.initializeAppWindow(); |  | 
|  37  |  | 
|  38     var callback = request.callback; |  | 
|  39     if (callback) { |  | 
|  40       delete request.callback; |  | 
|  41  |  | 
|  42       var willCallback = |  | 
|  43           renderViewObserverNatives.OnDocumentElementCreated( |  | 
|  44               windowParams.viewId, |  | 
|  45               function(success) { |  | 
|  46                 if (success) { |  | 
|  47                   callback(view.chrome.shell.currentWindow()); |  | 
|  48                 } else { |  | 
|  49                   callback(undefined); |  | 
|  50                 } |  | 
|  51               }); |  | 
|  52       if (!willCallback) { |  | 
|  53         callback(undefined); |  | 
|  54       } |  | 
|  55     } |  | 
|  56   }); |  | 
|  57  |  | 
|  58   apiFunctions.setHandleRequest('currentWindow', function() { |  | 
|  59     if (!currentAppWindow) { |  | 
|  60       console.error( |  | 
|  61           'The JavaScript context calling chrome.shell.currentWindow() has' + |  | 
|  62           ' no associated AppWindow.'); |  | 
|  63       return null; |  | 
|  64     } |  | 
|  65     return currentAppWindow; |  | 
|  66   }); |  | 
|  67  |  | 
|  68   // This is an internal function, but needs to be bound into a closure |  | 
|  69   // so the correct JS context is used for global variables such as |  | 
|  70   // currentAppWindow. |  | 
|  71   apiFunctions.setHandleRequest('initializeAppWindow', function() { |  | 
|  72     var AppWindow = function() {}; |  | 
|  73     AppWindow.prototype.contentWindow = window; |  | 
|  74     currentAppWindow = new AppWindow; |  | 
|  75   }); |  | 
|  76 }); |  | 
|  77  |  | 
|  78 exports.binding = shell.generate(); |  | 
| OLD | NEW |