|  | // Copyright 2014 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 "extensions/renderer/process_info_native_handler.h" | 
|  |  | 
|  | #include "base/bind.h" | 
|  | #include "base/command_line.h" | 
|  | #include "extensions/renderer/script_context.h" | 
|  |  | 
|  | namespace extensions { | 
|  |  | 
|  | ProcessInfoNativeHandler::ProcessInfoNativeHandler( | 
|  | ScriptContext* context, | 
|  | const std::string& extension_id, | 
|  | const std::string& context_type, | 
|  | bool is_incognito_context, | 
|  | bool is_component_extension, | 
|  | int manifest_version, | 
|  | bool send_request_disabled) | 
|  | : ObjectBackedNativeHandler(context), | 
|  | extension_id_(extension_id), | 
|  | context_type_(context_type), | 
|  | is_incognito_context_(is_incognito_context), | 
|  | is_component_extension_(is_component_extension), | 
|  | manifest_version_(manifest_version), | 
|  | send_request_disabled_(send_request_disabled) { | 
|  | RouteFunction("GetExtensionId", | 
|  | base::Bind(&ProcessInfoNativeHandler::GetExtensionId, | 
|  | base::Unretained(this))); | 
|  | RouteFunction("GetContextType", | 
|  | base::Bind(&ProcessInfoNativeHandler::GetContextType, | 
|  | base::Unretained(this))); | 
|  | RouteFunction("InIncognitoContext", | 
|  | base::Bind(&ProcessInfoNativeHandler::InIncognitoContext, | 
|  | base::Unretained(this))); | 
|  | RouteFunction("IsComponentExtension", | 
|  | base::Bind(&ProcessInfoNativeHandler::IsComponentExtension, | 
|  | base::Unretained(this))); | 
|  | RouteFunction("GetManifestVersion", | 
|  | base::Bind(&ProcessInfoNativeHandler::GetManifestVersion, | 
|  | base::Unretained(this))); | 
|  | RouteFunction("IsSendRequestDisabled", | 
|  | base::Bind(&ProcessInfoNativeHandler::IsSendRequestDisabled, | 
|  | base::Unretained(this))); | 
|  | RouteFunction( | 
|  | "HasSwitch", | 
|  | base::Bind(&ProcessInfoNativeHandler::HasSwitch, base::Unretained(this))); | 
|  | } | 
|  |  | 
|  | void ProcessInfoNativeHandler::GetExtensionId( | 
|  | const v8::FunctionCallbackInfo<v8::Value>& args) { | 
|  | args.GetReturnValue().Set( | 
|  | v8::String::NewFromUtf8(args.GetIsolate(), extension_id_.c_str())); | 
|  | } | 
|  |  | 
|  | void ProcessInfoNativeHandler::GetContextType( | 
|  | const v8::FunctionCallbackInfo<v8::Value>& args) { | 
|  | args.GetReturnValue().Set( | 
|  | v8::String::NewFromUtf8(args.GetIsolate(), context_type_.c_str())); | 
|  | } | 
|  |  | 
|  | void ProcessInfoNativeHandler::InIncognitoContext( | 
|  | const v8::FunctionCallbackInfo<v8::Value>& args) { | 
|  | args.GetReturnValue().Set(is_incognito_context_); | 
|  | } | 
|  |  | 
|  | void ProcessInfoNativeHandler::IsComponentExtension( | 
|  | const v8::FunctionCallbackInfo<v8::Value>& args) { | 
|  | args.GetReturnValue().Set(is_component_extension_); | 
|  | } | 
|  |  | 
|  | void ProcessInfoNativeHandler::GetManifestVersion( | 
|  | const v8::FunctionCallbackInfo<v8::Value>& args) { | 
|  | args.GetReturnValue().Set(static_cast<int32_t>(manifest_version_)); | 
|  | } | 
|  |  | 
|  | void ProcessInfoNativeHandler::IsSendRequestDisabled( | 
|  | const v8::FunctionCallbackInfo<v8::Value>& args) { | 
|  | if (send_request_disabled_) { | 
|  | args.GetReturnValue().Set(v8::String::NewFromUtf8( | 
|  | args.GetIsolate(), | 
|  | "sendRequest and onRequest are obsolete." | 
|  | " Please use sendMessage and onMessage instead.")); | 
|  | } | 
|  | } | 
|  |  | 
|  | void ProcessInfoNativeHandler::HasSwitch( | 
|  | const v8::FunctionCallbackInfo<v8::Value>& args) { | 
|  | CHECK(args.Length() == 1 && args[0]->IsString()); | 
|  | bool has_switch = base::CommandLine::ForCurrentProcess()->HasSwitch( | 
|  | *v8::String::Utf8Value(args[0])); | 
|  | args.GetReturnValue().Set(v8::Boolean::New(args.GetIsolate(), has_switch)); | 
|  | } | 
|  |  | 
|  | }  // namespace extensions |