| Index: chrome/browser/extensions/extension_tabs_module.cc
|
| diff --git a/chrome/browser/extensions/extension_tabs_module.cc b/chrome/browser/extensions/extension_tabs_module.cc
|
| index 66846fd312fcb220661772df01c70eeea05db3a3..dc228a8ba63350b3066fbc0ed9a8a5f4ab4c6592 100644
|
| --- a/chrome/browser/extensions/extension_tabs_module.cc
|
| +++ b/chrome/browser/extensions/extension_tabs_module.cc
|
| @@ -27,6 +27,7 @@
|
| #include "chrome/browser/extensions/extension_tabs_module_constants.h"
|
| #include "chrome/browser/extensions/extension_window_controller.h"
|
| #include "chrome/browser/extensions/extension_window_list.h"
|
| +#include "chrome/browser/extensions/script_executor.h"
|
| #include "chrome/browser/prefs/incognito_mode_prefs.h"
|
| #include "chrome/browser/profiles/profile.h"
|
| #include "chrome/browser/sessions/restore_tab_helper.h"
|
| @@ -88,6 +89,7 @@ using content::OpenURLParams;
|
| using content::Referrer;
|
| using content::RenderViewHost;
|
| using content::WebContents;
|
| +using extensions::ScriptExecutor;
|
|
|
| const int CaptureVisibleTabFunction::kDefaultQuality = 90;
|
|
|
| @@ -1178,7 +1180,7 @@ bool HighlightTabsFunction::RunImpl() {
|
| return true;
|
| }
|
|
|
| -UpdateTabFunction::UpdateTabFunction() : web_contents_(NULL) {
|
| +UpdateTabFunction::UpdateTabFunction() : tab_contents_(NULL) {
|
| }
|
|
|
| bool UpdateTabFunction::RunImpl() {
|
| @@ -1215,7 +1217,7 @@ bool UpdateTabFunction::RunImpl() {
|
| return false;
|
| }
|
|
|
| - web_contents_ = contents->web_contents();
|
| + tab_contents_ = contents;
|
|
|
| // TODO(rafaelw): handle setting remaining tab properties:
|
| // -title
|
| @@ -1243,7 +1245,7 @@ bool UpdateTabFunction::RunImpl() {
|
| tab_strip->ActivateTabAt(tab_index, false);
|
| DCHECK_EQ(contents, tab_strip->GetActiveTabContents());
|
| }
|
| - web_contents_->Focus();
|
| + tab_contents_->web_contents()->Focus();
|
| }
|
|
|
| if (update_props->HasKey(keys::kHighlightedKey)) {
|
| @@ -1313,37 +1315,30 @@ bool UpdateTabFunction::UpdateURLIfPresent(DictionaryValue* update_props,
|
| // we need to check host permissions before allowing them.
|
| if (url.SchemeIs(chrome::kJavaScriptScheme)) {
|
| if (!GetExtension()->CanExecuteScriptOnPage(
|
| - web_contents_->GetURL(), NULL, &error_)) {
|
| + tab_contents_->web_contents()->GetURL(), NULL, &error_)) {
|
| return false;
|
| }
|
|
|
| - ExtensionMsg_ExecuteCode_Params params;
|
| - params.request_id = request_id();
|
| - params.extension_id = extension_id();
|
| - params.is_javascript = true;
|
| - params.code = url.path();
|
| - params.run_at = UserScript::DOCUMENT_IDLE;
|
| - params.all_frames = false;
|
| - params.in_main_world = true;
|
| -
|
| - RenderViewHost* render_view_host = web_contents_->GetRenderViewHost();
|
| - render_view_host->Send(
|
| - new ExtensionMsg_ExecuteCode(render_view_host->GetRoutingID(), params));
|
| -
|
| - Observe(web_contents_);
|
| - AddRef(); // Balanced in OnExecuteCodeFinished().
|
| + tab_contents_->extension_script_executor()->ExecuteScript(
|
| + extension_id(),
|
| + ScriptExecutor::JAVASCRIPT,
|
| + url.path(),
|
| + ScriptExecutor::TOP_FRAME,
|
| + UserScript::DOCUMENT_IDLE,
|
| + ScriptExecutor::MAIN_WORLD,
|
| + base::Bind(&UpdateTabFunction::OnExecuteCodeFinished, this));
|
|
|
| *is_async = true;
|
| return true;
|
| }
|
|
|
| - web_contents_->GetController().LoadURL(
|
| + tab_contents_->web_contents()->GetController().LoadURL(
|
| url, content::Referrer(), content::PAGE_TRANSITION_LINK, std::string());
|
|
|
| // The URL of a tab contents never actually changes to a JavaScript URL, so
|
| // this check only makes sense in other cases.
|
| if (!url.SchemeIs(chrome::kJavaScriptScheme))
|
| - DCHECK_EQ(url.spec(), web_contents_->GetURL().spec());
|
| + DCHECK_EQ(url.spec(), tab_contents_->web_contents()->GetURL().spec());
|
|
|
| return true;
|
| }
|
| @@ -1352,42 +1347,15 @@ void UpdateTabFunction::PopulateResult() {
|
| if (!has_callback())
|
| return;
|
|
|
| - if (GetExtension()->HasAPIPermission(ExtensionAPIPermission::kTab) &&
|
| - web_contents_ != NULL) {
|
| - result_.reset(ExtensionTabUtil::CreateTabValue(web_contents_));
|
| + if (GetExtension()->HasAPIPermission(ExtensionAPIPermission::kTab)) {
|
| + result_.reset(
|
| + ExtensionTabUtil::CreateTabValue(tab_contents_->web_contents()));
|
| } else {
|
| result_.reset(Value::CreateNullValue());
|
| }
|
| }
|
|
|
| -void UpdateTabFunction::WebContentsDestroyed(WebContents* tab) {
|
| - CHECK_EQ(tab, web_contents_);
|
| - web_contents_ = NULL;
|
| -}
|
| -
|
| -bool UpdateTabFunction::OnMessageReceived(const IPC::Message& message) {
|
| - if (message.type() != ExtensionHostMsg_ExecuteCodeFinished::ID)
|
| - return false;
|
| -
|
| - int message_request_id = -1;
|
| - PickleIterator iter(message);
|
| - if (!message.ReadInt(&iter, &message_request_id)) {
|
| - NOTREACHED() << "malformed extension message";
|
| - return true;
|
| - }
|
| -
|
| - if (message_request_id != request_id())
|
| - return false;
|
| -
|
| - IPC_BEGIN_MESSAGE_MAP(UpdateTabFunction, message)
|
| - IPC_MESSAGE_HANDLER(ExtensionHostMsg_ExecuteCodeFinished,
|
| - OnExecuteCodeFinished)
|
| - IPC_END_MESSAGE_MAP()
|
| - return true;
|
| -}
|
| -
|
| -void UpdateTabFunction::OnExecuteCodeFinished(int request_id,
|
| - bool success,
|
| +void UpdateTabFunction::OnExecuteCodeFinished(bool success,
|
| const std::string& error) {
|
| if (!error.empty()) {
|
| CHECK(!success);
|
| @@ -1397,9 +1365,6 @@ void UpdateTabFunction::OnExecuteCodeFinished(int request_id,
|
| if (success)
|
| PopulateResult();
|
| SendResponse(success);
|
| -
|
| - Observe(NULL);
|
| - Release(); // Balanced in UpdateURLIfPresent().
|
| }
|
|
|
| bool MoveTabsFunction::RunImpl() {
|
|
|