diff options
author | brg@chromium.com <brg@chromium.com@0039d316-1c4b-4281-b951-d872f2087c98> | 2010-03-17 20:41:58 +0000 |
---|---|---|
committer | brg@chromium.com <brg@chromium.com@0039d316-1c4b-4281-b951-d872f2087c98> | 2010-03-17 20:41:58 +0000 |
commit | 4462559524df6726acc2400113508f3dc22b3648 (patch) | |
tree | 29986e90138219c2091482606685a0f6ddab6628 /chrome/browser/extensions | |
parent | 6d37714b0e46f65b0418bc3d85f2d296bbbbdfa9 (diff) | |
download | chromium_src-4462559524df6726acc2400113508f3dc22b3648.zip chromium_src-4462559524df6726acc2400113508f3dc22b3648.tar.gz chromium_src-4462559524df6726acc2400113508f3dc22b3648.tar.bz2 |
Committing for dcheng@
Original review: http://codereview.chromium.org/882003
Review URL: http://codereview.chromium.org/1042004
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@41874 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'chrome/browser/extensions')
4 files changed, 110 insertions, 0 deletions
diff --git a/chrome/browser/extensions/extension_clipboard_api.cc b/chrome/browser/extensions/extension_clipboard_api.cc new file mode 100644 index 0000000..dbfe664 --- /dev/null +++ b/chrome/browser/extensions/extension_clipboard_api.cc @@ -0,0 +1,52 @@ +// Copyright (c) 2010 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/browser/extensions/extension_clipboard_api.h" + +#include "base/string_util.h" +#include "base/values.h" +#include "chrome/browser/extensions/extension_tabs_module.h" +#include "chrome/browser/renderer_host/render_view_host.h" +#include "chrome/browser/tab_contents/tab_contents.h" +#include "chrome/common/extensions/extension_error_utils.h" + +namespace { +// Errors. +const char kNoTabError[] = "No tab with id: *."; +} + +bool ClipboardFunction::RunImpl() { + int tab_id; + EXTENSION_FUNCTION_VALIDATE(args_->GetAsInteger(&tab_id)); + + TabContents* contents = NULL; + if (!ExtensionTabUtil::GetTabById(tab_id, profile(), include_incognito(), + NULL, NULL, &contents, NULL)) { + error_ = ExtensionErrorUtils::FormatErrorMessage(kNoTabError, + IntToString(tab_id)); + return false; + } + + RenderViewHost* render_view_host = contents->render_view_host(); + if (!render_view_host) { + return false; + } + + return RunImpl(render_view_host); +} + +bool ExecuteCopyClipboardFunction::RunImpl(RenderViewHost* render_view_host) { + render_view_host->Copy(); + return true; +} + +bool ExecuteCutClipboardFunction::RunImpl(RenderViewHost* render_view_host) { + render_view_host->Cut(); + return true; +} + +bool ExecutePasteClipboardFunction::RunImpl(RenderViewHost* render_view_host) { + render_view_host->Paste(); + return true; +} diff --git a/chrome/browser/extensions/extension_clipboard_api.h b/chrome/browser/extensions/extension_clipboard_api.h new file mode 100644 index 0000000..4789221 --- /dev/null +++ b/chrome/browser/extensions/extension_clipboard_api.h @@ -0,0 +1,37 @@ +// Copyright (c) 2010 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_BROWSER_EXTENSIONS_EXTENSION_CLIPBOARD_API_H_ +#define CHROME_BROWSER_EXTENSIONS_EXTENSION_CLIPBOARD_API_H_ + +#include "chrome/browser/extensions/extension_function.h" + +class RenderViewHost; + +// Base class for clipboard function APIs. +class ClipboardFunction : public SyncExtensionFunction { + public: + virtual bool RunImpl(); + virtual bool RunImpl(RenderViewHost* render_view_host) = 0; +}; + +class ExecuteCopyClipboardFunction : public ClipboardFunction { + public: + virtual bool RunImpl(RenderViewHost* render_view_host); + DECLARE_EXTENSION_FUNCTION_NAME("experimental.clipboard.executeCopy"); +}; + +class ExecuteCutClipboardFunction : public ClipboardFunction { + public: + virtual bool RunImpl(RenderViewHost* render_view_host); + DECLARE_EXTENSION_FUNCTION_NAME("experimental.clipboard.executeCut"); +}; + +class ExecutePasteClipboardFunction : public ClipboardFunction { + public: + virtual bool RunImpl(RenderViewHost* render_view_host); + DECLARE_EXTENSION_FUNCTION_NAME("experimental.clipboard.executePaste"); +}; + +#endif // CHROME_BROWSER_EXTENSIONS_EXTENSION_CLIPBOARD_API_H_ diff --git a/chrome/browser/extensions/extension_clipboard_apitest.cc b/chrome/browser/extensions/extension_clipboard_apitest.cc new file mode 100644 index 0000000..8198c9a --- /dev/null +++ b/chrome/browser/extensions/extension_clipboard_apitest.cc @@ -0,0 +1,15 @@ +// Copyright (c) 2010 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" + +IN_PROC_BROWSER_TEST_F(ExtensionApiTest, Clipboard) { + CommandLine::ForCurrentProcess()->AppendSwitch( + switches::kEnableExperimentalExtensionApis); + + StartHTTPServer(); + ASSERT_TRUE(RunExtensionTest("clipboard")) << message_; +} diff --git a/chrome/browser/extensions/extension_function_dispatcher.cc b/chrome/browser/extensions/extension_function_dispatcher.cc index 640725d..30350db 100644 --- a/chrome/browser/extensions/extension_function_dispatcher.cc +++ b/chrome/browser/extensions/extension_function_dispatcher.cc @@ -15,6 +15,7 @@ #include "chrome/browser/extensions/extension_bookmarks_module.h" #include "chrome/browser/extensions/extension_bookmarks_module_constants.h" #include "chrome/browser/extensions/extension_browser_actions_api.h" +#include "chrome/browser/extensions/extension_clipboard_api.h" #include "chrome/browser/extensions/extension_dom_ui.h" #include "chrome/browser/extensions/extension_function.h" #include "chrome/browser/extensions/extension_history_api.h" @@ -199,6 +200,11 @@ void FactoryRegistry::ResetFunctions() { // Accessibility. RegisterFunction<GetFocusedControlFunction>(); RegisterFunction<SetAccessibilityEnabledFunction>(); + + // Clipboard. + RegisterFunction<ExecuteCopyClipboardFunction>(); + RegisterFunction<ExecuteCutClipboardFunction>(); + RegisterFunction<ExecutePasteClipboardFunction>(); } void FactoryRegistry::GetAllNames(std::vector<std::string>* names) { |