summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorvandebo@chromium.org <vandebo@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2012-03-21 23:17:34 +0000
committervandebo@chromium.org <vandebo@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2012-03-21 23:17:34 +0000
commit48f67668c7362e2532636fe241a3f631a0c9945c (patch)
treecf7d06b9ea02bcade2f2760f4cb9b20746e61cda
parent2251675efc18a26d71e6d1e8dfaaf8524d01f7b2 (diff)
downloadchromium_src-48f67668c7362e2532636fe241a3f631a0c9945c.zip
chromium_src-48f67668c7362e2532636fe241a3f631a0c9945c.tar.gz
chromium_src-48f67668c7362e2532636fe241a3f631a0c9945c.tar.bz2
Initial extension bindings for Media Gallery API.
BUG=NONE TEST=NONE Review URL: https://chromiumcodereview.appspot.com/9358076 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@128089 0039d316-1c4b-4281-b951-d872f2087c98
-rw-r--r--chrome/browser/extensions/api/media_gallery/media_gallery_api.cc44
-rw-r--r--chrome/browser/extensions/api/media_gallery/media_gallery_api.h50
-rw-r--r--chrome/browser/extensions/api/media_gallery/media_gallery_apitest.cc23
-rw-r--r--chrome/browser/extensions/extension_function_registry.cc7
-rw-r--r--chrome/chrome_browser_extensions.gypi2
-rw-r--r--chrome/chrome_renderer.gypi2
-rw-r--r--chrome/chrome_tests.gypi1
-rw-r--r--chrome/common/common_resources.grd1
-rw-r--r--chrome/common/extensions/api/experimental.mediaGalleries.json98
-rw-r--r--chrome/common/extensions/api/extension_api.cc1
-rw-r--r--chrome/common/extensions/docs/js/api_page_generator.js1
-rw-r--r--chrome/renderer/extensions/extension_dispatcher.cc6
-rw-r--r--chrome/renderer/extensions/media_gallery_custom_bindings.cc38
-rw-r--r--chrome/renderer/extensions/media_gallery_custom_bindings.h28
-rw-r--r--chrome/renderer/renderer_resources.grd1
-rw-r--r--chrome/renderer/resources/extensions/experimental.media_galleries_custom_bindings.js29
-rw-r--r--chrome/test/data/extensions/api_test/README.txt2
-rw-r--r--chrome/test/data/extensions/api_test/media_gallery/manifest.json10
-rw-r--r--chrome/test/data/extensions/api_test/media_gallery/test.js28
19 files changed, 371 insertions, 1 deletions
diff --git a/chrome/browser/extensions/api/media_gallery/media_gallery_api.cc b/chrome/browser/extensions/api/media_gallery/media_gallery_api.cc
new file mode 100644
index 0000000..81d9d27
--- /dev/null
+++ b/chrome/browser/extensions/api/media_gallery/media_gallery_api.cc
@@ -0,0 +1,44 @@
+// Copyright (c) 2012 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.
+
+// Implements the Chrome Extensions Cookies API.
+
+#include "chrome/browser/extensions/api/media_gallery/media_gallery_api.h"
+
+#include "base/values.h"
+
+namespace extensions {
+
+GetMediaGalleriesFunction::~GetMediaGalleriesFunction() {}
+
+bool GetMediaGalleriesFunction::RunImpl() {
+ // TODO(vandebo) Get the list of galleries.
+ result_.reset(new ListValue);
+ return true;
+}
+
+OpenMediaGalleryManagerFunction::~OpenMediaGalleryManagerFunction() {}
+
+bool OpenMediaGalleryManagerFunction::RunImpl() {
+ // TODO(vandebo) Open a new tab/ui surface with config UI.
+ return true;
+}
+
+AssembleMediaFileFunction::~AssembleMediaFileFunction() {}
+
+bool AssembleMediaFileFunction::RunImpl() {
+ // TODO(vandebo) Update the metadata and return the new file.
+ result_.reset(Value::CreateNullValue());
+ return true;
+}
+
+ParseMediaFileMetadataFunction::~ParseMediaFileMetadataFunction() {}
+
+bool ParseMediaFileMetadataFunction::RunImpl() {
+ // TODO(vandebo) Try to parse the file.
+ result_.reset(Value::CreateNullValue());
+ return true;
+}
+
+} // namespace extensions
diff --git a/chrome/browser/extensions/api/media_gallery/media_gallery_api.h b/chrome/browser/extensions/api/media_gallery/media_gallery_api.h
new file mode 100644
index 0000000..eab8b56
--- /dev/null
+++ b/chrome/browser/extensions/api/media_gallery/media_gallery_api.h
@@ -0,0 +1,50 @@
+// Copyright (c) 2012 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.
+
+// Defines the Chrome Extensions Cookies API functions for accessing internet
+// cookies, as specified in the extension API JSON.
+
+#ifndef CHROME_BROWSER_EXTENSIONS_API_MEDIA_GALLERY_MEDIA_GALLERY_API_H_
+#define CHROME_BROWSER_EXTENSIONS_API_MEDIA_GALLERY_MEDIA_GALLERY_API_H_
+#pragma once
+
+#include "chrome/browser/extensions/extension_function.h"
+
+namespace extensions {
+
+class GetMediaGalleriesFunction : public SyncExtensionFunction {
+ public:
+ virtual ~GetMediaGalleriesFunction();
+ virtual bool RunImpl() OVERRIDE;
+ DECLARE_EXTENSION_FUNCTION_NAME(
+ "experimental.mediaGalleries.getMediaGalleries")
+};
+
+class OpenMediaGalleryManagerFunction : public SyncExtensionFunction {
+ public:
+ virtual ~OpenMediaGalleryManagerFunction();
+ virtual bool RunImpl() OVERRIDE;
+ DECLARE_EXTENSION_FUNCTION_NAME(
+ "experimental.mediaGalleries.openMediaGalleryManager")
+};
+
+class AssembleMediaFileFunction : public SyncExtensionFunction {
+ public:
+ virtual ~AssembleMediaFileFunction();
+ virtual bool RunImpl() OVERRIDE;
+ DECLARE_EXTENSION_FUNCTION_NAME(
+ "experimental.mediaGalleries.assembleMediaFile")
+};
+
+class ParseMediaFileMetadataFunction : public SyncExtensionFunction {
+ public:
+ virtual ~ParseMediaFileMetadataFunction();
+ virtual bool RunImpl() OVERRIDE;
+ DECLARE_EXTENSION_FUNCTION_NAME(
+ "experimental.mediaGalleries.parseMediaFileMetadata")
+};
+
+} // namespace extensions
+
+#endif // CHROME_BROWSER_EXTENSIONS_API_MEDIA_GALLERY_MEDIA_GALLERY_API_H_
diff --git a/chrome/browser/extensions/api/media_gallery/media_gallery_apitest.cc b/chrome/browser/extensions/api/media_gallery/media_gallery_apitest.cc
new file mode 100644
index 0000000..31ba636
--- /dev/null
+++ b/chrome/browser/extensions/api/media_gallery/media_gallery_apitest.cc
@@ -0,0 +1,23 @@
+// Copyright (c) 2012 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.
+
+#include "base/command_line.h"
+#include "chrome/browser/extensions/extension_apitest.h"
+#include "chrome/common/chrome_switches.h"
+
+namespace {
+
+class ExperimentalExtensionApiTest : public ExtensionApiTest {
+ public:
+ virtual void SetUpCommandLine(CommandLine* command_line) OVERRIDE {
+ ExtensionApiTest::SetUpCommandLine(command_line);
+ command_line->AppendSwitch(switches::kEnableExperimentalExtensionApis);
+ }
+};
+
+} // namespace
+
+IN_PROC_BROWSER_TEST_F(ExperimentalExtensionApiTest, MediaGallery) {
+ ASSERT_TRUE(RunExtensionTest("media_gallery")) << message_;
+}
diff --git a/chrome/browser/extensions/extension_function_registry.cc b/chrome/browser/extensions/extension_function_registry.cc
index 3b1d025..21fb72d 100644
--- a/chrome/browser/extensions/extension_function_registry.cc
+++ b/chrome/browser/extensions/extension_function_registry.cc
@@ -13,6 +13,7 @@
#include "chrome/browser/extensions/api/declarative/declarative_api.h"
#include "chrome/browser/extensions/api/extension_action/extension_browser_actions_api.h"
#include "chrome/browser/extensions/api/extension_action/extension_page_actions_api.h"
+#include "chrome/browser/extensions/api/media_gallery/media_gallery_api.h"
#include "chrome/browser/extensions/api/offscreen_tabs/offscreen_tabs_api.h"
#include "chrome/browser/extensions/api/permissions/permissions_api.h"
#include "chrome/browser/extensions/api/serial/serial_api.h"
@@ -481,6 +482,12 @@ void ExtensionFunctionRegistry::ResetFunctions() {
RegisterFunction<ToDataUrlOffscreenTabFunction>();
RegisterFunction<UpdateOffscreenTabFunction>();
+ // Media Gallery
+ RegisterFunction<extensions::GetMediaGalleriesFunction>();
+ RegisterFunction<extensions::OpenMediaGalleryManagerFunction>();
+ RegisterFunction<extensions::AssembleMediaFileFunction>();
+ RegisterFunction<extensions::ParseMediaFileMetadataFunction>();
+
// Generated APIs
extensions::api::GeneratedFunctionRegistry::RegisterAll(this);
}
diff --git a/chrome/chrome_browser_extensions.gypi b/chrome/chrome_browser_extensions.gypi
index b2844b8..2d7351d 100644
--- a/chrome/chrome_browser_extensions.gypi
+++ b/chrome/chrome_browser_extensions.gypi
@@ -90,6 +90,8 @@
'browser/extensions/api/extension_action/extension_page_actions_api.h',
'browser/extensions/api/extension_action/extension_page_actions_api_constants.cc',
'browser/extensions/api/extension_action/extension_page_actions_api_constants.h',
+ 'browser/extensions/api/media_gallery/media_gallery_api.cc',
+ 'browser/extensions/api/media_gallery/media_gallery_api.h',
'browser/extensions/api/offscreen_tabs/offscreen_tabs_api.cc',
'browser/extensions/api/offscreen_tabs/offscreen_tabs_api.h',
'browser/extensions/api/offscreen_tabs/offscreen_tabs_constants.cc',
diff --git a/chrome/chrome_renderer.gypi b/chrome/chrome_renderer.gypi
index 5959cdd..69291db 100644
--- a/chrome/chrome_renderer.gypi
+++ b/chrome/chrome_renderer.gypi
@@ -93,6 +93,8 @@
'renderer/extensions/file_browser_private_custom_bindings.h',
'renderer/extensions/i18n_custom_bindings.cc',
'renderer/extensions/i18n_custom_bindings.h',
+ 'renderer/extensions/media_gallery_custom_bindings.cc',
+ 'renderer/extensions/media_gallery_custom_bindings.h',
'renderer/extensions/miscellaneous_bindings.cc',
'renderer/extensions/miscellaneous_bindings.h',
'renderer/extensions/page_actions_custom_bindings.cc',
diff --git a/chrome/chrome_tests.gypi b/chrome/chrome_tests.gypi
index 9300e13..c83ffc9 100644
--- a/chrome/chrome_tests.gypi
+++ b/chrome/chrome_tests.gypi
@@ -2640,6 +2640,7 @@
'browser/extensions/api/dns/dns_apitest.cc',
'browser/extensions/api/extension_action/browser_action_apitest.cc',
'browser/extensions/api/extension_action/page_action_apitest.cc',
+ 'browser/extensions/api/media_gallery/media_gallery_apitest.cc',
'browser/extensions/api/offscreen_tabs/offscreen_tabs_apitest.cc',
'browser/extensions/api/permissions/permissions_apitest.cc',
'browser/extensions/api/proxy/proxy_apitest.cc',
diff --git a/chrome/common/common_resources.grd b/chrome/common/common_resources.grd
index 7819341..9a247e5 100644
--- a/chrome/common/common_resources.grd
+++ b/chrome/common/common_resources.grd
@@ -36,6 +36,7 @@
<include name="IDR_EXTENSION_API_JSON_EXPERIMENTAL_INPUT_VIRTUALKEYBOARD" file="extensions\api\experimental.input.virtualKeyboard.json" type="BINDATA" />
<include name="IDR_EXTENSION_API_JSON_EXPERIMENTAL_KEYBINDING" file="extensions\api\experimental.keybinding.json" type="BINDATA" />
<include name="IDR_EXTENSION_API_JSON_EXPERIMENTAL_MANAGED_MODE" file="extensions\api\experimental.managedMode.json" type="BINDATA" />
+ <include name="IDR_EXTENSION_API_JSON_EXPERIMENTAL_MEDIAGALLERIES" file="extensions\api\experimental.mediaGalleries.json" type="BINDATA" />
<include name="IDR_EXTENSION_API_JSON_EXPERIMENTAL_OFFSCREENTABS" file="extensions\api\experimental.offscreenTabs.json" type="BINDATA" />
<include name="IDR_EXTENSION_API_JSON_EXPERIMENTAL_PROCESSES" file="extensions\api\experimental.processes.json" type="BINDATA" />
<include name="IDR_EXTENSION_API_JSON_EXPERIMENTAL_RLZ" file="extensions\api\experimental.rlz.json" type="BINDATA" />
diff --git a/chrome/common/extensions/api/experimental.mediaGalleries.json b/chrome/common/extensions/api/experimental.mediaGalleries.json
new file mode 100644
index 0000000..77121dd
--- /dev/null
+++ b/chrome/common/extensions/api/experimental.mediaGalleries.json
@@ -0,0 +1,98 @@
+[
+ {
+ "namespace": "experimental.mediaGalleries",
+ "nodoc": true,
+ "types": [
+ {
+ "id": "MediaGallery",
+ "type": "object",
+ "description": "A class representing a media gallery on the user's machines."
+ },
+ {
+ "id": "MediaFileMetadata",
+ "type": "object",
+ "description": "A class representing a metadata for a media file."
+ }
+ ],
+ "functions": [
+ {
+ "name": "getMediaGalleries",
+ "type": "function",
+ "description": "Get the media galleries configured in this user agent.",
+ "parameters": [
+ {
+ "type": "function",
+ "name": "callback",
+ "parameters": [
+ {
+ "name": "galleries",
+ "type": "array",
+ "items": { "$ref": "MediaGallery"}
+ }
+ ]
+ }
+ ]
+ },
+ {
+ "name": "openMediaGalleryManager",
+ "type": "function",
+ "description": "Open the user agent’s UI to configure galleries. Calling openMediaGalleryManager will trigger a permission prompt for any origin that has not yet been granted permission.",
+ "parameters": []
+ },
+ {
+ "name": "assembleMediaFile",
+ "type": "function",
+ "description": "Create a new MediaFile setting the metadata in the Blob to the supplied values, overriding any existing metadata in the media file. If user agent does not recognize the  Blob as a supported file format, it will return null in the callback.",
+ "parameters": [
+ {
+ "type": "object",
+ "description": "A Blob",
+ "name": "mediaFileContents"
+ },
+ {
+ "$ref": "MediaFileMetadata",
+ "name": "metadata"
+ },
+ {
+ "type": "function",
+ "name": "callback",
+ "parameters": [
+ {
+ "name": "mediaFile",
+ "choices": [
+ { "type": "Blob" },
+ { "type": "null" }
+ ]
+ }
+ ]
+ }
+ ]
+ },
+ {
+ "name": "parseMediaFileMetadata",
+ "type": "function",
+ "description": "Parse the metadata in a given Blob. If the user agent does not recognize the Blob as a supported file format, it will return null in the callback.",
+ "parameters": [
+ {
+ "type": "object",
+ "description": "A Blob",
+ "name": "mediaFile"
+ },
+ {
+ "type": "function",
+ "name": "callback",
+ "parameters": [
+ {
+ "name": "metadata",
+ "choices": [
+ {"$ref": "MediaFileMetadata"},
+ { "type": "null" }
+ ]
+ }
+ ]
+ }
+ ]
+ }
+ ]
+ }
+]
diff --git a/chrome/common/extensions/api/extension_api.cc b/chrome/common/extensions/api/extension_api.cc
index 7c55165..30bf4fc 100644
--- a/chrome/common/extensions/api/extension_api.cc
+++ b/chrome/common/extensions/api/extension_api.cc
@@ -110,6 +110,7 @@ ExtensionAPI::ExtensionAPI() {
IDR_EXTENSION_API_JSON_EXPERIMENTAL_INPUT_VIRTUALKEYBOARD,
IDR_EXTENSION_API_JSON_EXPERIMENTAL_KEYBINDING,
IDR_EXTENSION_API_JSON_EXPERIMENTAL_MANAGED_MODE,
+ IDR_EXTENSION_API_JSON_EXPERIMENTAL_MEDIAGALLERIES,
IDR_EXTENSION_API_JSON_EXPERIMENTAL_OFFSCREENTABS,
IDR_EXTENSION_API_JSON_EXPERIMENTAL_PROCESSES,
IDR_EXTENSION_API_JSON_EXPERIMENTAL_RLZ,
diff --git a/chrome/common/extensions/docs/js/api_page_generator.js b/chrome/common/extensions/docs/js/api_page_generator.js
index b73f037..720bf77 100644
--- a/chrome/common/extensions/docs/js/api_page_generator.js
+++ b/chrome/common/extensions/docs/js/api_page_generator.js
@@ -42,6 +42,7 @@ var MODULE_SCHEMAS = [
'../api/experimental.input.virtualKeyboard.json',
'../api/experimental.keybinding.json',
'../api/experimental.managedMode.json',
+ '../api/experimental.mediaGalleries.json',
'../api/experimental.offscreenTabs.json',
'../api/experimental.processes.json',
'../api/experimental.rlz.json',
diff --git a/chrome/renderer/extensions/extension_dispatcher.cc b/chrome/renderer/extensions/extension_dispatcher.cc
index 1833d64..b573baf 100644
--- a/chrome/renderer/extensions/extension_dispatcher.cc
+++ b/chrome/renderer/extensions/extension_dispatcher.cc
@@ -28,6 +28,7 @@
#include "chrome/renderer/extensions/file_browser_handler_custom_bindings.h"
#include "chrome/renderer/extensions/file_browser_private_custom_bindings.h"
#include "chrome/renderer/extensions/i18n_custom_bindings.h"
+#include "chrome/renderer/extensions/media_gallery_custom_bindings.h"
#include "chrome/renderer/extensions/miscellaneous_bindings.h"
#include "chrome/renderer/extensions/page_actions_custom_bindings.h"
#include "chrome/renderer/extensions/page_capture_custom_bindings.h"
@@ -64,6 +65,7 @@ using extensions::FileBrowserHandlerCustomBindings;
using extensions::FileBrowserPrivateCustomBindings;
using extensions::I18NCustomBindings;
using extensions::MiscellaneousBindings;
+using extensions::MediaGalleryCustomBindings;
using extensions::PageActionsCustomBindings;
using extensions::PageCaptureCustomBindings;
using extensions::SchemaGeneratedBindings;
@@ -357,6 +359,8 @@ void ExtensionDispatcher::RegisterNativeHandlers(ModuleSystem* module_system,
module_system->RegisterNativeHandler("extension",
scoped_ptr<NativeHandler>(
new ExtensionCustomBindings(this)));
+ module_system->RegisterNativeHandler("experimental_mediaGalleries",
+ scoped_ptr<NativeHandler>(new MediaGalleryCustomBindings()));
module_system->RegisterNativeHandler("experimental_socket",
scoped_ptr<NativeHandler>(new ExperimentalSocketCustomBindings()));
module_system->RegisterNativeHandler("file_browser_handler",
@@ -402,6 +406,8 @@ void ExtensionDispatcher::PopulateSourceMap() {
source_map_.RegisterSource("devtools", IDR_DEVTOOLS_CUSTOM_BINDINGS_JS);
source_map_.RegisterSource("experimental.declarative",
IDR_EXPERIMENTAL_DECLARATIVE_CUSTOM_BINDINGS_JS);
+ source_map_.RegisterSource("experimental.mediaGalleries",
+ IDR_MEDIA_GALLERY_CUSTOM_BINDINGS_JS);
source_map_.RegisterSource("experimental.offscreen",
IDR_EXPERIMENTAL_OFFSCREENTABS_CUSTOM_BINDINGS_JS);
source_map_.RegisterSource("experimental.socket",
diff --git a/chrome/renderer/extensions/media_gallery_custom_bindings.cc b/chrome/renderer/extensions/media_gallery_custom_bindings.cc
new file mode 100644
index 0000000..d5d6807
--- /dev/null
+++ b/chrome/renderer/extensions/media_gallery_custom_bindings.cc
@@ -0,0 +1,38 @@
+// Copyright (c) 2012 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.
+
+#include "chrome/renderer/extensions/media_gallery_custom_bindings.h"
+
+#include "content/public/renderer/render_view.h"
+#include "grit/renderer_resources.h"
+#include "v8/include/v8.h"
+
+namespace extensions {
+
+MediaGalleryCustomBindings::MediaGalleryCustomBindings()
+ : ChromeV8Extension(NULL) {
+ RouteStaticFunction("CreateMediaGalleryObject", &CreateMediaGalleryObject);
+}
+
+// static
+v8::Handle<v8::Value> MediaGalleryCustomBindings::CreateMediaGalleryObject(
+ const v8::Arguments& args) {
+ if (args.Length() != 3 || !args[0]->IsUint32() || args[1]->IsNull() ||
+ !args[1]->IsString() || !args[2]->IsUint32()) {
+ NOTREACHED() << "Bad arguments";
+ return v8::Undefined();
+ }
+
+ std::string name;
+ name = *v8::String::Utf8Value(args[1]->ToString());
+ if (name.empty())
+ return v8::Undefined();
+
+ // TODO(vandebo) Create and return a MediaGallery object.
+ // int id = args[0]->Uint32Value();
+ // int flags = args[2]->Uint32Value();
+ return v8::Undefined();
+}
+
+} // namespace extensions
diff --git a/chrome/renderer/extensions/media_gallery_custom_bindings.h b/chrome/renderer/extensions/media_gallery_custom_bindings.h
new file mode 100644
index 0000000..2889512
--- /dev/null
+++ b/chrome/renderer/extensions/media_gallery_custom_bindings.h
@@ -0,0 +1,28 @@
+// Copyright (c) 2012 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.
+
+#ifndef CHROME_RENDERER_EXTENSIONS_MEDIA_GALLERY_CUSTOM_BINDINGS_H_
+#define CHROME_RENDERER_EXTENSIONS_MEDIA_GALLERY_CUSTOM_BINDINGS_H_
+#pragma once
+
+#include "chrome/renderer/extensions/chrome_v8_extension.h"
+
+namespace extensions {
+
+// Implements custom bindings for the media gallery API.
+class MediaGalleryCustomBindings : public ChromeV8Extension {
+ public:
+ MediaGalleryCustomBindings();
+
+ private:
+ static v8::Handle<v8::Value> CreateMediaGalleryObject(
+ const v8::Arguments& args);
+
+ DISALLOW_COPY_AND_ASSIGN(MediaGalleryCustomBindings);
+};
+
+} // extensions
+
+#endif // CHROME_RENDERER_EXTENSIONS_MEDIA_GALLERY_CUSTOM_BINDINGS_H_
+
diff --git a/chrome/renderer/renderer_resources.grd b/chrome/renderer/renderer_resources.grd
index 21d6949..9e4a9ae 100644
--- a/chrome/renderer/renderer_resources.grd
+++ b/chrome/renderer/renderer_resources.grd
@@ -40,6 +40,7 @@ without changes to the corresponding grd file. fb9 -->
<include name="IDR_FILE_BROWSER_PRIVATE_CUSTOM_BINDINGS_JS" file="resources\extensions\file_browser_private_custom_bindings.js" type="BINDATA" />
<include name="IDR_I18N_CUSTOM_BINDINGS_JS" file="resources\extensions\i18n_custom_bindings.js" type="BINDATA" />
<include name="IDR_INPUT_IME_CUSTOM_BINDINGS_JS" file="resources\extensions\input.ime_custom_bindings.js" type="BINDATA" />
+ <include name="IDR_MEDIA_GALLERY_CUSTOM_BINDINGS_JS" file="resources\extensions\experimental.media_galleries_custom_bindings.js" type="BINDATA" />
<include name="IDR_OMNIBOX_CUSTOM_BINDINGS_JS" file="resources\extensions\omnibox_custom_bindings.js" type="BINDATA" />
<include name="IDR_PAGE_ACTIONS_CUSTOM_BINDINGS_JS" file="resources\extensions\page_actions_custom_bindings.js" type="BINDATA" />
<include name="IDR_PAGE_ACTION_CUSTOM_BINDINGS_JS" file="resources\extensions\page_action_custom_bindings.js" type="BINDATA" />
diff --git a/chrome/renderer/resources/extensions/experimental.media_galleries_custom_bindings.js b/chrome/renderer/resources/extensions/experimental.media_galleries_custom_bindings.js
new file mode 100644
index 0000000..bc146a1
--- /dev/null
+++ b/chrome/renderer/resources/extensions/experimental.media_galleries_custom_bindings.js
@@ -0,0 +1,29 @@
+// Copyright (c) 2012 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.
+
+// Custom bindings for the Media Gallery API.
+
+var mediaGalleriesNatives = requireNative('experimental_mediaGalleries');
+var CreateMediaGalleryObject = mediaGalleriesNatives.CreateMediaGalleryObject;
+
+var chromeHidden = requireNative('chrome_hidden').GetChromeHidden();
+
+chromeHidden.registerCustomHook('experimental.mediaGalleries',
+ function(bindingsAPI, extensionId) {
+ var apiFunctions = bindingsAPI.apiFunctions;
+
+ apiFunctions.setCustomCallback('getMediaGalleries',
+ function(name, request, response) {
+ var result = [];
+ var resp = response ? chromeHidden.JSON.parse(response) : [];
+ for (var i = 0; i < resp.length; i++) {
+ result.push(CreateMediaGalleryObject(resp[i].id, resp[i].name,
+ resp[i].flags));
+
+ }
+ if (request.callback)
+ request.callback(result);
+ request.callback = null;
+ });
+});
diff --git a/chrome/test/data/extensions/api_test/README.txt b/chrome/test/data/extensions/api_test/README.txt
index 06088f1..957526a 100644
--- a/chrome/test/data/extensions/api_test/README.txt
+++ b/chrome/test/data/extensions/api_test/README.txt
@@ -11,7 +11,7 @@ To write a new test:
(1) Add a new browser_test which is a subclass of ExtensionApiTest. This test
should call RunExtensionTest("extension_name") to kick off the test. See
-extension_bookmarks_apitest.cc for an example.
+bookmark_extension_apitest.cc for an example.
(2) Create an extension of in this directory of the same name as the extension
that your test referred to ("extension_name" above). This test should load
diff --git a/chrome/test/data/extensions/api_test/media_gallery/manifest.json b/chrome/test/data/extensions/api_test/media_gallery/manifest.json
new file mode 100644
index 0000000..8f3e263
--- /dev/null
+++ b/chrome/test/data/extensions/api_test/media_gallery/manifest.json
@@ -0,0 +1,10 @@
+{
+ "name": "chrome.experimental.mediaGalleries",
+ "version": "0.1",
+ "manifest_version": 2,
+ "description": "end-to-end browser test for chrome.experimental.mediaGalleries API",
+ "background": {
+ "scripts": ["test.js"]
+ },
+ "permissions": ["experimental"]
+}
diff --git a/chrome/test/data/extensions/api_test/media_gallery/test.js b/chrome/test/data/extensions/api_test/media_gallery/test.js
new file mode 100644
index 0000000..2759c4e
--- /dev/null
+++ b/chrome/test/data/extensions/api_test/media_gallery/test.js
@@ -0,0 +1,28 @@
+// Copyright (c) 2012 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.
+
+var mediaGalleries = chrome.experimental.mediaGalleries;
+var emptyListCallback = function(results) {
+ chrome.test.assertEq(results, []);
+};
+var nullCallback = function(results) {
+ chrome.test.assertEq(results, null);
+};
+
+chrome.test.runTests([
+ function getGalleries() {
+ mediaGalleries.getMediaGalleries(
+ chrome.test.callbackPass(emptyListCallback));
+ },
+
+ function assembleMediaFile() {
+ mediaGalleries.assembleMediaFile(
+ {}, {}, chrome.test.callbackPass(nullCallback));
+ },
+
+ function parseMediaFileMetadata() {
+ mediaGalleries.parseMediaFileMetadata(
+ {}, chrome.test.callbackPass(nullCallback));
+ },
+]);