Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1078)

Unified Diff: chrome/renderer/resources/extensions/runtime_custom_bindings.js

Issue 16470003: Add chrome.runtime.getPackageDirectoryEntry. (Closed) Base URL: http://git.chromium.org/chromium/src.git@master
Patch Set: Created 7 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: chrome/renderer/resources/extensions/runtime_custom_bindings.js
diff --git a/chrome/renderer/resources/extensions/runtime_custom_bindings.js b/chrome/renderer/resources/extensions/runtime_custom_bindings.js
index 85f04764c24e92c85afaa7f46b22883698e5f574..aa0b3b684ed7c4c109c3db62f94f92a443377214 100644
--- a/chrome/renderer/resources/extensions/runtime_custom_bindings.js
+++ b/chrome/renderer/resources/extensions/runtime_custom_bindings.js
@@ -11,6 +11,60 @@ var miscBindings = require('miscellaneous_bindings');
var runtimeNatives = requireNative('runtime');
var unloadEvent = require('unload_event');
+var manifest = runtimeNatives.GetManifest();
+if (manifest.app && manifest.app.background) {
+ var backgroundPage = extensionNatives.GetExtensionViews(-1, 'BACKGROUND')[0];
+ var GetModuleSystem = requireNative('v8_context').GetModuleSystem;
+ var backgroundRequire = GetModuleSystem(backgroundPage).require;
+} else {
+ var backgroundPage = window;
+ var backgroundRequire = require;
+}
+
+// For packaged apps, all windows use the bindFileEntryCallback from the
+// background page so their FileEntry objects have the background page's context
+// as their own. This allows them to be used from other windows (including the
+// background page) after the original window is closed.
+if (window == backgroundPage) {
+ var lastError = require('lastError');
+ var fileSystemNatives = requireNative('file_system_natives');
+ var GetIsolatedFileSystem = fileSystemNatives.GetIsolatedFileSystem;
+ var bindDirectoryEntryCallback = function(functionName, apiFunctions) {
+ apiFunctions.setCustomCallback(functionName,
+ function(name, request, response) {
+ if (request.callback && response) {
+ var callback = request.callback;
+ request.callback = null;
+
+ var fileSystemId = response.fileSystemId;
+ var baseName = response.baseName;
+ var fs = GetIsolatedFileSystem(fileSystemId);
+
+ try {
+ fs.root.getDirectory(baseName, {}, callback, function(fileError) {
+ lastError.run('runtime.' + functionName,
+ 'Error getting Entry, code: ' + fileError.code,
+ request.stack,
+ callback);
+ });
+ } catch (e) {
+ lastError.run('runtime.' + functionName,
+ 'Error: ' + e.stack,
+ request.stack,
+ callback);
+ }
+ }
+ });
+ };
+} else {
+ // Force the runtime API to be loaded in the background page. Using
+ // backgroundPageModuleSystem.require('runtime') is insufficient as
+ // requireNative is only allowed while lazily loading an API.
+ backgroundPage.runtime;
+ var bindDirectoryEntryCallback = backgroundRequire(
+ 'runtime').bindDirectoryEntryCallback;
+}
+
binding.registerCustomHook(function(binding, id, contextType) {
var apiFunctions = binding.apiFunctions;
var runtime = binding.compiledApi;
@@ -126,6 +180,8 @@ binding.registerCustomHook(function(binding, id, contextType) {
request.callback = null;
});
+ bindDirectoryEntryCallback('getPackageDirectoryEntry', apiFunctions);
});
+exports.bindDirectoryEntryCallback = bindDirectoryEntryCallback;
exports.binding = binding.generate();

Powered by Google App Engine
This is Rietveld 408576698