1c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// Copyright (c) 2010 The Chromium Authors. All rights reserved.
2c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// Use of this source code is governed by a BSD-style license that can be
3c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// found in the LICENSE file.
4c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
5c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "chrome/browser/extensions/extension_clipboard_api.h"
6c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
73345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick#include "base/string_number_conversions.h"
8c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "base/values.h"
9c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "chrome/browser/extensions/extension_tabs_module.h"
1021d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen#include "chrome/browser/ui/tab_contents/tab_contents_wrapper.h"
11c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "chrome/common/extensions/extension_error_utils.h"
12dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen#include "content/browser/renderer_host/render_view_host.h"
13dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen#include "content/browser/tab_contents/tab_contents.h"
14c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
15c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochnamespace {
16c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// Errors.
17c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochconst char kNoTabError[] = "No tab with id: *.";
18c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}
19c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
20c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochbool ClipboardFunction::RunImpl() {
21c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  int tab_id;
22c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  EXTENSION_FUNCTION_VALIDATE(args_->GetInteger(0, &tab_id));
23c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
24201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch  TabContentsWrapper* contents = NULL;
25c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  if (!ExtensionTabUtil::GetTabById(tab_id, profile(), include_incognito(),
26c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                                    NULL, NULL, &contents, NULL)) {
273345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick    error_ = ExtensionErrorUtils::FormatErrorMessage(
283345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick        kNoTabError, base::IntToString(tab_id));
29c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    return false;
30c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  }
31c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
32c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  RenderViewHost* render_view_host = contents->render_view_host();
33c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  if (!render_view_host) {
34c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    return false;
35c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  }
36c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
37c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  return RunImpl(render_view_host);
38c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}
39c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
40c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochbool ExecuteCopyClipboardFunction::RunImpl(RenderViewHost* render_view_host) {
41c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  render_view_host->Copy();
42c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  return true;
43c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}
44c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
45c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochbool ExecuteCutClipboardFunction::RunImpl(RenderViewHost* render_view_host) {
46c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  render_view_host->Cut();
47c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  return true;
48c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}
49c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
50c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochbool ExecutePasteClipboardFunction::RunImpl(RenderViewHost* render_view_host) {
51c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  render_view_host->Paste();
52c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  return true;
53c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}
54