1 // Copyright (c) 2012 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.
5 // Custom binding for the chrome.app.runtime API.
7 var binding
= require('binding').Binding
.create('app.runtime');
9 var eventBindings
= require('event_bindings');
10 var fileSystemHelpers
= requireNative('file_system_natives');
11 var GetIsolatedFileSystem
= fileSystemHelpers
.GetIsolatedFileSystem
;
12 var appNatives
= requireNative('app_runtime');
13 var DeserializeString
= appNatives
.DeserializeString
;
14 var SerializeToString
= appNatives
.SerializeToString
;
15 var CreateBlob
= appNatives
.CreateBlob
;
16 var entryIdManager
= require('entryIdManager');
18 eventBindings
.registerArgumentMassager('app.runtime.onLaunched',
19 function(args
, dispatch
) {
20 var launchData
= args
[0];
22 if (launchData
&& typeof launchData
.id
!== 'undefined') {
23 // new-style dispatch.
25 var numItems
= launchData
.items
.length
;
26 var itemLoaded = function(err
, item
) {
28 console
.error('Error getting fileEntry, code: ' + err
.code
);
30 $Array
.push(items
, item
);
32 if (--numItems
=== 0) {
33 if (items
.length
=== 0) {
36 var data
= { id
: launchData
.id
, items
: items
};
41 $Array
.forEach(launchData
.items
, function(item
) {
42 var fs
= GetIsolatedFileSystem(item
.fileSystemId
);
43 fs
.root
.getFile(item
.baseName
, {}, function(fileEntry
) {
44 entryIdManager
.registerEntry(item
.entryId
, fileEntry
);
45 itemLoaded(null, { entry
: fileEntry
, type
: item
.mimeType
});
46 }, function(fileError
) {
47 itemLoaded(fileError
);
50 } else if (launchData
) {
51 dispatch([launchData
]);
57 exports
.binding
= binding
.generate();