Index: chrome/renderer/searchbox/searchbox_extension.cc |
diff --git a/chrome/renderer/searchbox/searchbox_extension.cc b/chrome/renderer/searchbox/searchbox_extension.cc |
index f56ce48c84f1e8922f47ef0b17ac13d31baac1fa..fee965975779a74a1a1e7fc5f5ce5865f32f2049 100644 |
--- a/chrome/renderer/searchbox/searchbox_extension.cc |
+++ b/chrome/renderer/searchbox/searchbox_extension.cc |
@@ -15,6 +15,7 @@ |
#include "chrome/common/ntp_logging_events.h" |
#include "chrome/common/url_constants.h" |
#include "chrome/renderer/searchbox/searchbox.h" |
+#include "content/public/common/url_constants.h" |
#include "content/public/renderer/render_view.h" |
#include "extensions/common/extension.h" |
#include "grit/renderer_resources.h" |
@@ -362,6 +363,10 @@ class SearchBoxExtensionWrapper : public v8::Extension { |
static void GetAppLauncherEnabled( |
const v8::FunctionCallbackInfo<v8::Value>& args); |
+ // Gets the desired navigation behavior from a click event. |
+ static void GetDispositionFromClick( |
+ const v8::FunctionCallbackInfo<v8::Value>& args); |
+ |
// Gets Most Visited Items. |
static void GetMostVisitedItems( |
const v8::FunctionCallbackInfo<v8::Value>& args); |
@@ -405,7 +410,12 @@ class SearchBoxExtensionWrapper : public v8::Extension { |
static void LogEvent(const v8::FunctionCallbackInfo<v8::Value>& args); |
// Logs an impression on one of the Most Visited tile on the NTP. |
- static void LogImpression(const v8::FunctionCallbackInfo<v8::Value>& args); |
+ static void LogMostVisitedImpression( |
+ const v8::FunctionCallbackInfo<v8::Value>& args); |
+ |
+ // Logs a navigation on one of the Most Visited tile on the NTP. |
+ static void LogMostVisitedNavigation( |
+ const v8::FunctionCallbackInfo<v8::Value>& args); |
// Navigates the window to a URL represented by either a URL string or a |
// restricted ID. |
@@ -541,6 +551,8 @@ SearchBoxExtensionWrapper::GetNativeFunctionTemplate( |
return v8::FunctionTemplate::New(isolate, Focus); |
if (name->Equals(v8::String::NewFromUtf8(isolate, "GetAppLauncherEnabled"))) |
return v8::FunctionTemplate::New(isolate, GetAppLauncherEnabled); |
+ if (name->Equals(v8::String::NewFromUtf8(isolate, "GetDispositionFromClick"))) |
+ return v8::FunctionTemplate::New(isolate, GetDispositionFromClick); |
if (name->Equals(v8::String::NewFromUtf8(isolate, "GetMostVisitedItems"))) |
return v8::FunctionTemplate::New(isolate, GetMostVisitedItems); |
if (name->Equals(v8::String::NewFromUtf8(isolate, "GetMostVisitedItemData"))) |
@@ -563,8 +575,14 @@ SearchBoxExtensionWrapper::GetNativeFunctionTemplate( |
return v8::FunctionTemplate::New(isolate, IsKeyCaptureEnabled); |
if (name->Equals(v8::String::NewFromUtf8(isolate, "LogEvent"))) |
return v8::FunctionTemplate::New(isolate, LogEvent); |
- if (name->Equals(v8::String::NewFromUtf8(isolate, "LogImpression"))) |
- return v8::FunctionTemplate::New(isolate, LogImpression); |
+ if (name->Equals( |
+ v8::String::NewFromUtf8(isolate, "LogMostVisitedImpression"))) { |
+ return v8::FunctionTemplate::New(isolate, LogMostVisitedImpression); |
+ } |
+ if (name->Equals( |
+ v8::String::NewFromUtf8(isolate, "LogMostVisitedNavigation"))) { |
+ return v8::FunctionTemplate::New(isolate, LogMostVisitedNavigation); |
+ } |
if (name->Equals(v8::String::NewFromUtf8(isolate, "NavigateContentWindow"))) |
return v8::FunctionTemplate::New(isolate, NavigateContentWindow); |
if (name->Equals(v8::String::NewFromUtf8(isolate, "Paste"))) |
@@ -641,6 +659,27 @@ void SearchBoxExtensionWrapper::GetAppLauncherEnabled( |
} |
// static |
+void SearchBoxExtensionWrapper::GetDispositionFromClick( |
+ const v8::FunctionCallbackInfo<v8::Value>& args) { |
+ content::RenderView* render_view = GetRenderView(); |
+ if (!render_view || args.Length() != 5) return; |
+ |
+ bool middle_button = args[0]->BooleanValue(); |
+ bool alt_key = args[1]->BooleanValue(); |
+ bool ctrl_key = args[2]->BooleanValue(); |
+ bool meta_key = args[3]->BooleanValue(); |
+ bool shift_key = args[4]->BooleanValue(); |
+ |
+ WindowOpenDisposition disposition = ui::DispositionFromClick(middle_button, |
+ alt_key, |
+ ctrl_key, |
+ meta_key, |
+ shift_key); |
+ v8::Isolate* isolate = args.GetIsolate(); |
+ args.GetReturnValue().Set(v8::Int32::New(isolate, disposition)); |
+} |
+ |
+// static |
void SearchBoxExtensionWrapper::GetMostVisitedItems( |
const v8::FunctionCallbackInfo<v8::Value>& args) { |
content::RenderView* render_view = GetRenderView(); |
@@ -939,7 +978,23 @@ void SearchBoxExtensionWrapper::LogEvent( |
} |
// static |
-void SearchBoxExtensionWrapper::LogImpression( |
+void SearchBoxExtensionWrapper::LogMostVisitedImpression( |
+ const v8::FunctionCallbackInfo<v8::Value>& args) { |
+ content::RenderView* render_view = GetRenderViewWithCheckedOrigin( |
+ GURL(chrome::kChromeSearchMostVisitedUrl)); |
+ if (!render_view) return; |
+ |
+ if (args.Length() < 2 || !args[0]->IsNumber() || args[1]->IsUndefined()) |
+ return; |
+ |
+ DVLOG(1) << render_view << " LogMostVisitedImpression"; |
+ |
+ SearchBox::Get(render_view)->LogMostVisitedImpression( |
+ args[0]->IntegerValue(), V8ValueToUTF16(args[1])); |
+} |
+ |
+// static |
+void SearchBoxExtensionWrapper::LogMostVisitedNavigation( |
const v8::FunctionCallbackInfo<v8::Value>& args) { |
content::RenderView* render_view = GetRenderViewWithCheckedOrigin( |
GURL(chrome::kChromeSearchMostVisitedUrl)); |
@@ -948,10 +1003,10 @@ void SearchBoxExtensionWrapper::LogImpression( |
if (args.Length() < 2 || !args[0]->IsNumber() || args[1]->IsUndefined()) |
return; |
- DVLOG(1) << render_view << " LogImpression"; |
+ DVLOG(1) << render_view << " LogMostVisitedNavigation"; |
- SearchBox::Get(render_view)->LogImpression(args[0]->IntegerValue(), |
- V8ValueToUTF16(args[1])); |
+ SearchBox::Get(render_view)->LogMostVisitedNavigation( |
+ args[0]->IntegerValue(), V8ValueToUTF16(args[1])); |
} |
// static |
@@ -973,17 +1028,19 @@ void SearchBoxExtensionWrapper::NavigateContentWindow( |
} else { |
// Resolve the URL |
const base::string16& possibly_relative_url = V8ValueToUTF16(args[0]); |
- GURL current_url = GetCurrentURL(render_view); |
+ GURL current_url = GetCurrentURL(render_view); |
destination_url = internal::ResolveURL(current_url, possibly_relative_url); |
} |
DVLOG(1) << render_view << " NavigateContentWindow: " << destination_url; |
// Navigate the main frame. |
- if (destination_url.is_valid()) { |
+ if (destination_url.is_valid() && |
+ !destination_url.SchemeIs(content::kJavaScriptScheme)) { |
WindowOpenDisposition disposition = CURRENT_TAB; |
- if (args[1]->Uint32Value() == 2) |
- disposition = NEW_BACKGROUND_TAB; |
+ if (args[1]->IsNumber()) { |
+ disposition = (WindowOpenDisposition) args[1]->Uint32Value(); |
+ } |
SearchBox::Get(render_view)->NavigateToURL(destination_url, disposition, |
is_most_visited_item_url); |
} |