| Index: chrome/common/extensions/docs/examples/extensions/storage_api_devtools/storage/inspectedWindow/initStorage.js
|
| ===================================================================
|
| --- chrome/common/extensions/docs/examples/extensions/storage_api_devtools/storage/inspectedWindow/initStorage.js (revision 0)
|
| +++ chrome/common/extensions/docs/examples/extensions/storage_api_devtools/storage/inspectedWindow/initStorage.js (revision 0)
|
| @@ -0,0 +1,210 @@
|
| +// Copyright 2013 The Chromium Authors. All rights reserved.
|
| +// Use of this source code is governed by a BSD-style license that can be
|
| +// found in the LICENSE file.
|
| +
|
| +// initStorage.js
|
| +// Retrieves chrome.storage data as well as usage information and pass all
|
| +// these to panel.js.
|
| +// |devtoolsId|: Identify different DevTools instances.
|
| +// |contextId|: Identify different contexts within an inspected page.
|
| +// |reportUsage|: NOT IMPLEMENTED. Allows to disable usage report.
|
| +
|
| +(function() {
|
| + var extensionId = '<REPLACE_WITH_EXTENSION_ID_BEFORE_EVAL>';
|
| + var devtoolsId = '<REPLACE_WITH_EXTRA_PARAMETER_BEFORE_EVAL:devtoolsId>';
|
| + var contextId = '<REPLACE_WITH_EXTRA_PARAMETER_BEFORE_EVAL:contextId>';
|
| + var reportUsage = '<REPLACE_WITH_EXTRA_PARAMETER_BEFORE_EVAL:reportUsage>';
|
| +
|
| + var port;
|
| + var connectInfo = {name: '_registerInspectedWindow'};
|
| + // Event page cannot connect to itself. Use fakeEventPageConnect defined
|
| + // in bg.js.
|
| + if (chrome.i18n.getMessage('@@extension_id') == extensionId &&
|
| + typeof fakeEventPageConnect != 'undefined')
|
| + port = fakeEventPageConnect(connectInfo);
|
| + else
|
| + port = (chrome.runtime.connect || chrome.extension.connect)(extensionId,
|
| + connectInfo);
|
| +
|
| + function onPortMessage(message) {
|
| + if (message && message.name) {
|
| + if (message.name == '_panelUnload') {
|
| + chrome.storage.onChanged.removeListener(onStorageChanged);
|
| + port.onMessage.removeListener(onPortMessage);
|
| + if (port.disconnect)
|
| + port.disconnect();
|
| + port = null;
|
| + } else if (message.areaName == 'local' || message.areaName == 'sync')
|
| + onPanelMessage(message);
|
| + }
|
| + }
|
| +
|
| + port.onMessage.addListener(onPortMessage);
|
| +
|
| + port.postMessage({
|
| + name: '_handshake',
|
| + devtoolsId: devtoolsId,
|
| + contextId: contextId,
|
| + panelId: 'storage'
|
| + });
|
| +
|
| + port.onDisconnect.addListener(function(message) {
|
| + chrome.storage.onChanged.removeListener(onStorageChanged);
|
| + });
|
| +
|
| + function sendMessageInternal(name, areaName, message) {
|
| + message.name = 'devtools.' + name;
|
| + message.areaName = areaName;
|
| + message.contextId = contextId;
|
| + port.postMessage(message);
|
| + }
|
| +
|
| + // Send customLastError if specified. Otherwise, send
|
| + // chrome.runtime.lastError if available. Returns true when an error is
|
| + // sent.
|
| + function sendIfError(areaName, customLastError) {
|
| + var lastError;
|
| + if (customLastError)
|
| + lastError = customLastError;
|
| + else if (chrome.runtime && chrome.runtime.lastError)
|
| + lastError = chrome.runtime.lastError;
|
| + else if(!chrome.runtime && chrome.extension && chrome.extension.lastError)
|
| + lastError = chrome.extension.lastError;
|
| + else
|
| + return false;
|
| + sendMessageInternal('reportError', areaName, {lastError: lastError});
|
| + return true;
|
| + }
|
| +
|
| + function sendInit(areaName, items) {
|
| + sendMessageInternal('init', areaName, {items: items});
|
| + }
|
| +
|
| + function sendReportUsage(areaName, key, bytesInUse) {
|
| + sendMessageInternal('reportUsage', areaName, {
|
| + key: key,
|
| + bytesInUse: bytesInUse
|
| + });
|
| + }
|
| +
|
| + function sendUpdate(areaName, changes) {
|
| + sendMessageInternal('update', areaName, {changes: changes});
|
| + }
|
| +
|
| + function sendUnlimitedStorage(result) {
|
| + sendMessageInternal('unlimitedStorage', null,
|
| + {unlimitedStorage:result});
|
| + }
|
| +
|
| + function updateBytesInUse(area, areaName, dict) {
|
| + if (reportUsage != 'false')
|
| + {
|
| + Object.keys(dict).forEach(function(key) {
|
| + area.getBytesInUse(key, function(bytesInUse) {
|
| + sendReportUsage(areaName, key, bytesInUse);
|
| + });
|
| + });
|
| + }
|
| + }
|
| +
|
| + function initStorageArea(area, areaName) {
|
| + area.get(null, function(items)
|
| + {
|
| + sendInit(areaName, items);
|
| + updateBytesInUse(area, areaName, items);
|
| + });
|
| + }
|
| +
|
| + function onStorageChanged(changes, areaName) {
|
| + sendUpdate(areaName, changes);
|
| + updateBytesInUse(chrome.storage[areaName], areaName, changes);
|
| + }
|
| +
|
| + function updateValue(areaName, storage, key, value) {
|
| + var items = {};
|
| + try {
|
| + items[key] = JSON.parse(value);
|
| + } catch (e) {
|
| + sendIfError(areaName, {message: e.message});
|
| + return;
|
| + }
|
| + storage.set(items, function() {
|
| + sendIfError(areaName);
|
| + });
|
| + }
|
| +
|
| + function updateKey(areaName, storage, key, newKey) {
|
| + storage.get(key, function(items) {
|
| + if(sendIfError(areaName))
|
| + return;
|
| +
|
| + var value = items[key];
|
| + if (value) {
|
| + var items = {};
|
| + items[newKey] = value;
|
| + // First set then remove in case of quota errors
|
| + storage.set(items, function() {
|
| + if(!sendIfError(areaName)) {
|
| + storage.remove(key, function() {
|
| + sendIfError(areaName);
|
| + });
|
| + }
|
| + });
|
| + }
|
| + });
|
| + }
|
| +
|
| + function removeKey(areaName, storage, key) {
|
| + storage.remove(key, function() {
|
| + sendIfError(areaName);
|
| + });
|
| + }
|
| +
|
| + function clear(areaName, storage) {
|
| + storage.clear(function() {
|
| + sendIfError(areaName);
|
| + });
|
| + }
|
| +
|
| + function onPanelMessage(message)
|
| + {
|
| + var areaName = message.areaName;
|
| + var storage = chrome.storage[areaName];
|
| +
|
| + switch(message.name) {
|
| + case 'updateValue':
|
| + if (message.key && message.value)
|
| + updateValue(areaName, storage, message.key, message.value);
|
| + break;
|
| + case 'updateKey':
|
| + if (message.key && message.newKey)
|
| + updateKey(areaName, storage, message.key, message.newKey);
|
| + break;
|
| + case 'removeKey':
|
| + if (message.key)
|
| + removeKey(areaName, storage, message.key);
|
| + break;
|
| + case 'clear':
|
| + clear(areaName, storage);
|
| + break;
|
| + default:
|
| + break;
|
| + }
|
| + }
|
| +
|
| + initStorageArea(chrome.storage.local, 'local');
|
| + initStorageArea(chrome.storage.sync, 'sync');
|
| + chrome.storage.onChanged.addListener(onStorageChanged);
|
| +
|
| + // chrome.permissions is not available in content scripts.
|
| + if (chrome.runtime && chrome.runtime.getManifest) {
|
| + var permissions = chrome.runtime.getManifest().permissions || [];
|
| + sendUnlimitedStorage(permissions.indexOf('unlimitedStorage') != -1 ||
|
| + permissions.indexOf('unlimited_storage') != -1);
|
| + } else if (chrome.permissions)
|
| + chrome.permissions.contains({permissions: ['unlimitedStorage']},
|
| + function(result) {
|
| + sendUnlimitedStorage(result);
|
| + });
|
| +})();
|
| +
|
|
|
| Property changes on: chrome/common/extensions/docs/examples/extensions/storage_api_devtools/storage/inspectedWindow/initStorage.js
|
| ___________________________________________________________________
|
| Added: svn:eol-style
|
| + LF
|
| Added: svn:mime-type
|
| + text/javascript
|
|
|
|
|