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

Unified Diff: chrome/browser/extensions/api/tabs/execute_code_in_tab_function.cc

Issue 11747025: Run the JSON Schema Compiler's bundle compilation on JSON files. Previously it (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: fix ms release build Created 7 years, 11 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/browser/extensions/api/tabs/execute_code_in_tab_function.cc
diff --git a/chrome/browser/extensions/api/tabs/execute_code_in_tab_function.cc b/chrome/browser/extensions/api/tabs/execute_code_in_tab_function.cc
deleted file mode 100644
index 29a57d9f71ab3f074e5df8fca559d7ce204eb630..0000000000000000000000000000000000000000
--- a/chrome/browser/extensions/api/tabs/execute_code_in_tab_function.cc
+++ /dev/null
@@ -1,277 +0,0 @@
-// 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/browser/extensions/api/tabs/execute_code_in_tab_function.h"
-
-#include "base/bind.h"
-#include "base/string_util.h"
-#include "base/utf_string_conversions.h"
-#include "chrome/browser/extensions/api/tabs/tabs.h"
-#include "chrome/browser/extensions/api/tabs/tabs_constants.h"
-#include "chrome/browser/extensions/extension_service.h"
-#include "chrome/browser/extensions/extension_tab_util.h"
-#include "chrome/browser/extensions/file_reader.h"
-#include "chrome/browser/extensions/script_executor.h"
-#include "chrome/browser/extensions/tab_helper.h"
-#include "chrome/browser/profiles/profile.h"
-#include "chrome/browser/ui/browser.h"
-#include "chrome/common/extensions/api/tabs.h"
-#include "chrome/common/extensions/extension.h"
-#include "chrome/common/extensions/extension_constants.h"
-#include "chrome/common/extensions/extension_file_util.h"
-#include "chrome/common/extensions/extension_l10n_util.h"
-#include "chrome/common/extensions/extension_manifest_constants.h"
-#include "chrome/common/extensions/extension_messages.h"
-#include "chrome/common/extensions/message_bundle.h"
-#include "content/public/browser/render_view_host.h"
-#include "content/public/browser/web_contents.h"
-#include "extensions/common/error_utils.h"
-
-using content::BrowserThread;
-using extensions::api::tabs::InjectDetails;
-using extensions::ErrorUtils;
-using extensions::ScriptExecutor;
-using extensions::UserScript;
-
-namespace keys = extensions::tabs_constants;
-
-ExecuteCodeInTabFunction::ExecuteCodeInTabFunction()
- : execute_tab_id_(-1) {
-}
-
-ExecuteCodeInTabFunction::~ExecuteCodeInTabFunction() {}
-
-bool ExecuteCodeInTabFunction::HasPermission() {
- if (Init() &&
- extension_->HasAPIPermissionForTab(execute_tab_id_,
- extensions::APIPermission::kTab)) {
- return true;
- }
- return ExtensionFunction::HasPermission();
-}
-
-bool ExecuteCodeInTabFunction::RunImpl() {
- EXTENSION_FUNCTION_VALIDATE(Init());
-
- if (!details_->code.get() && !details_->file.get()) {
- error_ = keys::kNoCodeOrFileToExecuteError;
- return false;
- }
- if (details_->code.get() && details_->file.get()) {
- error_ = keys::kMoreThanOneValuesError;
- return false;
- }
-
- content::WebContents* contents = NULL;
-
- // If |tab_id| is specified, look for the tab. Otherwise default to selected
- // tab in the current window.
- CHECK_GE(execute_tab_id_, 0);
- if (!ExtensionTabUtil::GetTabById(execute_tab_id_, profile(),
- include_incognito(),
- NULL, NULL, &contents, NULL)) {
- return false;
- }
-
- // NOTE: This can give the wrong answer due to race conditions, but it is OK,
- // we check again in the renderer.
- CHECK(contents);
- if (!GetExtension()->CanExecuteScriptOnPage(contents->GetURL(),
- contents->GetURL(),
- execute_tab_id_,
- NULL,
- &error_)) {
- return false;
- }
-
- if (details_->code.get())
- return Execute(*details_->code);
-
- CHECK(details_->file.get());
- resource_ = GetExtension()->GetResource(*details_->file);
-
- if (resource_.extension_root().empty() || resource_.relative_path().empty()) {
- error_ = keys::kNoCodeOrFileToExecuteError;
- return false;
- }
-
- scoped_refptr<FileReader> file_reader(new FileReader(
- resource_, base::Bind(&ExecuteCodeInTabFunction::DidLoadFile, this)));
- file_reader->Start();
-
- return true;
-}
-
-void ExecuteCodeInTabFunction::OnExecuteCodeFinished(const std::string& error,
- int32 on_page_id,
- const GURL& on_url,
- const ListValue& result) {
- if (!error.empty())
- SetError(error);
-
- SendResponse(error.empty());
-}
-
-void TabsExecuteScriptFunction::OnExecuteCodeFinished(const std::string& error,
- int32 on_page_id,
- const GURL& on_url,
- const ListValue& result) {
- if (error.empty())
- SetResult(result.DeepCopy());
- ExecuteCodeInTabFunction::OnExecuteCodeFinished(error, on_page_id, on_url,
- result);
-}
-
-bool ExecuteCodeInTabFunction::Init() {
- if (details_.get())
- return true;
-
- // |tab_id| is optional so it's ok if it's not there.
- int tab_id = -1;
- args_->GetInteger(0, &tab_id);
-
- // |details| are not optional.
- DictionaryValue* details_value = NULL;
- if (!args_->GetDictionary(1, &details_value))
- return false;
- scoped_ptr<InjectDetails> details(new InjectDetails());
- if (!InjectDetails::Populate(*details_value, details.get()))
- return false;
-
- // If the tab ID is -1 then it needs to be converted to the currently active
- // tab's ID.
- if (tab_id == -1) {
- Browser* browser = GetCurrentBrowser();
- if (!browser)
- return false;
- content::WebContents* web_contents = NULL;
- if (!ExtensionTabUtil::GetDefaultTab(browser, &web_contents, &tab_id))
- return false;
- }
-
- execute_tab_id_ = tab_id;
- details_ = details.Pass();
- return true;
-}
-
-void ExecuteCodeInTabFunction::DidLoadFile(bool success,
- const std::string& data) {
- std::string function_name = name();
- const extensions::Extension* extension = GetExtension();
-
- // Check if the file is CSS and needs localization.
- if (success &&
- function_name == TabsInsertCSSFunction::function_name() &&
- extension != NULL &&
- data.find(
- extensions::MessageBundle::kMessageBegin) != std::string::npos) {
- BrowserThread::PostTask(
- BrowserThread::FILE, FROM_HERE,
- base::Bind(&ExecuteCodeInTabFunction::LocalizeCSS, this,
- data,
- extension->id(),
- extension->path(),
- extension->default_locale()));
- } else {
- DidLoadAndLocalizeFile(success, data);
- }
-}
-
-void ExecuteCodeInTabFunction::LocalizeCSS(
- const std::string& data,
- const std::string& extension_id,
- const FilePath& extension_path,
- const std::string& extension_default_locale) {
- scoped_ptr<SubstitutionMap> localization_messages(
- extension_file_util::LoadMessageBundleSubstitutionMap(
- extension_path, extension_id, extension_default_locale));
-
- // We need to do message replacement on the data, so it has to be mutable.
- std::string css_data = data;
- std::string error;
- extensions::MessageBundle::ReplaceMessagesWithExternalDictionary(
- *localization_messages, &css_data, &error);
-
- // Call back DidLoadAndLocalizeFile on the UI thread. The success parameter
- // is always true, because if loading had failed, we wouldn't have had
- // anything to localize.
- BrowserThread::PostTask(
- BrowserThread::UI, FROM_HERE,
- base::Bind(&ExecuteCodeInTabFunction::DidLoadAndLocalizeFile, this,
- true, css_data));
-}
-
-void ExecuteCodeInTabFunction::DidLoadAndLocalizeFile(bool success,
- const std::string& data) {
- if (success) {
- if (!Execute(data))
- SendResponse(false);
- } else {
-#if defined(OS_POSIX)
- // TODO(viettrungluu): bug: there's no particular reason the path should be
- // UTF-8, in which case this may fail.
- error_ = ErrorUtils::FormatErrorMessage(keys::kLoadFileError,
- resource_.relative_path().value());
-#elif defined(OS_WIN)
- error_ = ErrorUtils::FormatErrorMessage(keys::kLoadFileError,
- WideToUTF8(resource_.relative_path().value()));
-#endif // OS_WIN
- SendResponse(false);
- }
-}
-
-bool ExecuteCodeInTabFunction::Execute(const std::string& code_string) {
- content::WebContents* contents = NULL;
- Browser* browser = NULL;
-
- bool success = ExtensionTabUtil::GetTabById(
- execute_tab_id_, profile(), include_incognito(), &browser, NULL,
- &contents, NULL) && contents && browser;
-
- if (!success)
- return false;
-
- const extensions::Extension* extension = GetExtension();
- if (!extension)
- return false;
-
- ScriptExecutor::ScriptType script_type = ScriptExecutor::JAVASCRIPT;
- std::string function_name = name();
- if (function_name == TabsInsertCSSFunction::function_name()) {
- script_type = ScriptExecutor::CSS;
- } else if (function_name != TabsExecuteScriptFunction::function_name()) {
- NOTREACHED();
- }
-
- ScriptExecutor::FrameScope frame_scope =
- details_->all_frames.get() && *details_->all_frames ?
- ScriptExecutor::ALL_FRAMES :
- ScriptExecutor::TOP_FRAME;
-
- UserScript::RunLocation run_at = UserScript::UNDEFINED;
- switch (details_->run_at) {
- case InjectDetails::RUN_AT_NONE:
- case InjectDetails::RUN_AT_DOCUMENT_IDLE:
- run_at = UserScript::DOCUMENT_IDLE;
- break;
- case InjectDetails::RUN_AT_DOCUMENT_START:
- run_at = UserScript::DOCUMENT_START;
- break;
- case InjectDetails::RUN_AT_DOCUMENT_END:
- run_at = UserScript::DOCUMENT_END;
- break;
- }
- CHECK_NE(UserScript::UNDEFINED, run_at);
-
- extensions::TabHelper::FromWebContents(contents)->
- script_executor()->ExecuteScript(
- extension->id(),
- script_type,
- code_string,
- frame_scope,
- run_at,
- ScriptExecutor::ISOLATED_WORLD,
- base::Bind(&ExecuteCodeInTabFunction::OnExecuteCodeFinished, this));
- return true;
-}
« no previous file with comments | « chrome/browser/extensions/api/tabs/execute_code_in_tab_function.h ('k') | chrome/browser/extensions/api/tabs/tabs.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698