summaryrefslogtreecommitdiffstats
path: root/chrome_frame/chrome_frame_npapi.cc
diff options
context:
space:
mode:
authortommi@chromium.org <tommi@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2011-04-11 22:57:22 +0000
committertommi@chromium.org <tommi@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2011-04-11 22:57:22 +0000
commitdd2d0bf1abd68671d3d259a7f0f5af1867d490f5 (patch)
tree596405d3ab19ab85c451e2e8f54d192795da9e81 /chrome_frame/chrome_frame_npapi.cc
parent360d2ec2b1baa71f82f99cba96e4e97e74f6f941 (diff)
downloadchromium_src-dd2d0bf1abd68671d3d259a7f0f5af1867d490f5.zip
chromium_src-dd2d0bf1abd68671d3d259a7f0f5af1867d490f5.tar.gz
chromium_src-dd2d0bf1abd68671d3d259a7f0f5af1867d490f5.tar.bz2
Remove Chrome Frame's dependency on xul_runner.
Review URL: http://codereview.chromium.org/6825026 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@81171 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'chrome_frame/chrome_frame_npapi.cc')
-rw-r--r--chrome_frame/chrome_frame_npapi.cc215
1 files changed, 19 insertions, 196 deletions
diff --git a/chrome_frame/chrome_frame_npapi.cc b/chrome_frame/chrome_frame_npapi.cc
index 66817b5..84e2bc7 100644
--- a/chrome_frame/chrome_frame_npapi.cc
+++ b/chrome_frame/chrome_frame_npapi.cc
@@ -12,19 +12,12 @@
#include "base/stringprintf.h"
#include "base/utf_string_conversions.h"
#include "chrome/test/automation/tab_proxy.h"
-#include "chrome_frame/ff_privilege_check.h"
#include "chrome_frame/np_utils.h"
-#include "chrome_frame/scoped_ns_ptr_win.h"
#include "chrome_frame/utils.h"
MessageLoop* ChromeFrameNPAPI::message_loop_ = NULL;
int ChromeFrameNPAPI::instance_count_ = 0;
-static const char* kNpEventNames[] = {
- "focus",
- "blur",
-};
-
NPClass ChromeFrameNPAPI::plugin_class_ = {
NP_CLASS_STRUCT_VERSION,
ChromeFrameNPAPI::AllocateObject,
@@ -52,19 +45,16 @@ const NPUTF8* ChromeFrameNPAPI::plugin_property_identifier_names_[] = {
"onloaderror",
"onmessage",
"readystate",
- "onprivatemessage",
"usechromenetwork",
"onclose",
};
const NPUTF8* ChromeFrameNPAPI::plugin_method_identifier_names_[] = {
"postMessage",
- "postPrivateMessage",
};
ChromeFrameNPAPI::PluginMethod ChromeFrameNPAPI::plugin_methods_[] = {
&ChromeFrameNPAPI::postMessage,
- &ChromeFrameNPAPI::postPrivateMessage,
};
NPIdentifier
@@ -92,17 +82,6 @@ static const char kPluginOnMessageAttribute[] = "onmessage";
static const char kPluginOnPrivateMessageAttribute[] = "onprivatemessage";
static const char kPluginOnCloseAttribute[] = "onclose";
-// These properties can only be set in arguments at control instantiation.
-// When the privileged_mode property is provided and set to true, the control
-// will probe for whether its hosting document has the system principal, in
-// which case privileged mode will be enabled.
-static const char kPluginPrivilegedModeAttribute[] = "privileged_mode";
-// If privileged mode is enabled, the string value of this argument will
-// be appended to the chrome.exe command line.
-static const char kPluginChromeExtraArguments[] = "chrome_extra_arguments";
-// If privileged mode is enabled, the string value of this argument will
-// be used as the profile name for our chrome.exe instance.
-static const char kPluginChromeProfileName[] = "chrome_profile_name";
// If chrome network stack is to be used
static const char kPluginUseChromeNetwork[] = "usechromenetwork";
@@ -163,22 +142,6 @@ bool ChromeFrameNPAPI::Initialize(NPMIMEType mime_type, NPP instance,
instance_count_++;
- // Create our prefs service wrapper here.
- DCHECK(!pref_service_.get());
- pref_service_ = CreatePrefService();
- if (!pref_service_.get()) {
- NOTREACHED() << "new NpProxyService";
- return false;
- }
-
- // Temporary variables for privileged only parameters
- const char* onprivatemessage_arg = NULL;
- const char* chrome_extra_arguments_arg = NULL;
- const char* chrome_profile_name_arg = NULL;
- bool chrome_network_arg_set = false;
- bool chrome_network_arg = false;
- bool wants_privileged = false;
-
for (int i = 0; i < argc; ++i) {
if (LowerCaseEqualsASCII(argn[i], kPluginSrcAttribute)) {
src_ = ResolveURL(GetDocumentUrl(), argv[i]);
@@ -190,48 +153,11 @@ bool ChromeFrameNPAPI::Initialize(NPMIMEType mime_type, NPP instance,
onmessage_handler_ = JavascriptToNPObject(argv[i]);
} else if (LowerCaseEqualsASCII(argn[i], kPluginOnCloseAttribute)) {
onclose_handler_ = JavascriptToNPObject(argv[i]);
- } else if (LowerCaseEqualsASCII(argn[i],
- kPluginPrivilegedModeAttribute)) {
- // Test for the FireFox privileged mode if the user requests it
- // in initialization parameters.
- wants_privileged = atoi(argv[i]) ? true : false;
- } else if (LowerCaseEqualsASCII(argn[i],
- kPluginOnPrivateMessageAttribute)) {
- onprivatemessage_arg = argv[i];
- } else if (LowerCaseEqualsASCII(argn[i], kPluginChromeExtraArguments)) {
- chrome_extra_arguments_arg = argv[i];
- } else if (LowerCaseEqualsASCII(argn[i], kPluginChromeProfileName)) {
- chrome_profile_name_arg = argv[i];
- } else if (LowerCaseEqualsASCII(argn[i], kPluginUseChromeNetwork)) {
- chrome_network_arg_set = true;
- chrome_network_arg = atoi(argv[i]) ? true : false;
- }
- }
-
- // Is the privileged mode requested?
- if (wants_privileged) {
- set_is_privileged(IsFireFoxPrivilegedInvocation(instance));
- if (!is_privileged()) {
- DLOG(WARNING) << "Privileged mode requested in non-privileged context";
}
}
- std::wstring extra_arguments;
std::wstring profile_name(GetHostProcessName(false));
- if (is_privileged()) {
- // Process any privileged mode-only arguments we were handed.
- if (onprivatemessage_arg)
- onprivatemessage_handler_ = JavascriptToNPObject(onprivatemessage_arg);
-
- if (chrome_extra_arguments_arg)
- extra_arguments = UTF8ToWide(chrome_extra_arguments_arg);
-
- if (chrome_profile_name_arg)
- profile_name = UTF8ToWide(chrome_profile_name_arg);
-
- if (chrome_network_arg_set)
- automation_client_->set_use_chrome_network(chrome_network_arg);
- }
+ std::wstring extra_arguments;
static const wchar_t kHandleTopLevelRequests[] = L"HandleTopLevelRequests";
bool top_level_requests = GetConfigBool(true, kHandleTopLevelRequests);
@@ -274,13 +200,6 @@ void ChromeFrameNPAPI::Uninitialize() {
if (ready_state_ != READYSTATE_UNINITIALIZED)
SetReadyState(READYSTATE_UNINITIALIZED);
- UnsubscribeFromFocusEvents();
-
- if (pref_service_) {
- pref_service_->UnInitialize();
- pref_service_ = NULL;
- }
-
window_object_.Free();
onerror_handler_.Free();
onmessage_handler_.Free();
@@ -295,32 +214,6 @@ void ChromeFrameNPAPI::OnFinalMessage(HWND window) {
Uninitialize();
}
-void ChromeFrameNPAPI::SubscribeToFocusEvents() {
- DCHECK(focus_listener_.get() == NULL);
-
- focus_listener_ = new DomEventListener(this);
- if (!focus_listener_->Subscribe(instance_, kNpEventNames,
- arraysize(kNpEventNames))) {
- focus_listener_ = NULL;
- focus_listener_ = new NPObjectEventListener(this);
- if (!focus_listener_->Subscribe(instance_, kNpEventNames,
- arraysize(kNpEventNames))) {
- DLOG(ERROR) << "Failed to subscribe to focus events";
- focus_listener_ = NULL;
- }
- }
-}
-
-void ChromeFrameNPAPI::UnsubscribeFromFocusEvents() {
- if (!focus_listener_.get())
- return;
-
- bool ret = focus_listener_->Unsubscribe(instance_, kNpEventNames,
- arraysize(kNpEventNames));
- DLOG_IF(WARNING, !ret) << "focus_listener_->Unsubscribe failed";
- focus_listener_ = NULL;
-}
-
bool ChromeFrameNPAPI::SetWindow(NPWindow* window_info) {
if (!window_info || !automation_client_.get()) {
NOTREACHED();
@@ -342,8 +235,6 @@ bool ChromeFrameNPAPI::SetWindow(NPWindow* window_info) {
automation_client_->SetParentWindow(window);
- SubscribeToFocusEvents();
-
if (force_full_page_plugin_) {
// By default full page mode is only enabled when the plugin is loaded off
// a separate file, i.e. it is the primary content in the window. Even if
@@ -418,8 +309,7 @@ void ChromeFrameNPAPI::OnAcceleratorPressed(const MSG& accel_message) {
// WM_KEYUP, etc, which will result in messages like WM_CHAR, WM_SYSCHAR, etc
// being posted to the message queue. We don't post these messages here to
// avoid these messages from getting handled twice.
- if (!is_privileged() &&
- accel_message.message != WM_CHAR &&
+ if (accel_message.message != WM_CHAR &&
accel_message.message != WM_DEADCHAR &&
accel_message.message != WM_SYSCHAR &&
accel_message.message != WM_SYSDEADCHAR) {
@@ -443,8 +333,21 @@ void ChromeFrameNPAPI::OnTabbedOut(bool reverse) {
DVLOG(1) << __FUNCTION__;
ignore_setfocus_ = true;
- HWND parent = ::GetParent(m_hWnd);
- ::SetFocus(parent);
+
+ // Previously we set the focus to our parent window before sending the
+ // keyboard event but the browser architecture has changed, so we release
+ // our focus first by calling <object>.blur() and then tabbing to the
+ // next element.
+ ScopedNpObject<NPObject> object;
+ npapi::GetValue(instance_, NPNVPluginElementNPObject, object.Receive());
+ if (object.get()) {
+ ScopedNpVariant result;
+ bool invoke = npapi::Invoke(instance_, object,
+ npapi::GetStringIdentifier("blur"), NULL, 0, &result);
+ DLOG_IF(WARNING, !invoke) << "blur failed";
+ } else {
+ DLOG(WARNING) << "Failed to get the plugin element";
+ }
INPUT input = {0};
input.type = INPUT_KEYBOARD;
@@ -487,6 +390,8 @@ bool ChromeFrameNPAPI::HasMethod(NPObject* obj, NPIdentifier name) {
return true;
}
+ DLOG(INFO) << "Do not have method: " << npapi::StringFromIdentifier(name);
+
return false;
}
@@ -612,19 +517,6 @@ bool ChromeFrameNPAPI::GetProperty(NPIdentifier name,
variant->value.objectValue = onmessage_handler_.Copy();
return true;
}
- } else if (name ==
- plugin_property_identifiers_[PLUGIN_PROPERTY_ONPRIVATEMESSAGE]) {
- if (!is_privileged()) {
- DLOG(WARNING) << "Attempt to read onprivatemessage property while not "
- "privileged";
- } else {
- if (onprivatemessage_handler_) {
- variant->type = NPVariantType_Object;
- variant->value.objectValue =
- onprivatemessage_handler_.Copy();
- return true;
- }
- }
} else if (name == plugin_property_identifiers_[PLUGIN_PROPERTY_ONCLOSE]) {
if (onclose_handler_) {
variant->type = NPVariantType_Object;
@@ -679,15 +571,6 @@ bool ChromeFrameNPAPI::SetProperty(NPIdentifier name,
onmessage_handler_.Free();
onmessage_handler_ = variant->value.objectValue;
return true;
- } else if (name ==
- plugin_property_identifiers_[PLUGIN_PROPERTY_ONPRIVATEMESSAGE]) {
- if (!is_privileged()) {
- DLOG(WARNING) << "Attempt to set onprivatemessage while not privileged";
- } else {
- onprivatemessage_handler_.Free();
- onprivatemessage_handler_ = variant->value.objectValue;
- return true;
- }
} else if (name == plugin_property_identifiers_[PLUGIN_PROPERTY_ONCLOSE]) {
onclose_handler_.Free();
onclose_handler_ = variant->value.objectValue;
@@ -724,24 +607,6 @@ bool ChromeFrameNPAPI::SetProperty(NPObject* object, NPIdentifier name,
return plugin_instance->SetProperty(name, variant);
}
-void ChromeFrameNPAPI::OnFocus() {
- DVLOG(1) << __FUNCTION__;
- PostMessage(WM_SETFOCUS, 0, 0);
-}
-
-void ChromeFrameNPAPI::OnEvent(const char* event_name) {
- DCHECK(event_name);
- DVLOG(1) << event_name;
-
- if (lstrcmpiA(event_name, "focus") == 0) {
- OnFocus();
- } else if (lstrcmpiA(event_name, "blur") == 0) {
- OnBlur();
- } else {
- NOTREACHED() << event_name;
- }
-}
-
LRESULT CALLBACK ChromeFrameNPAPI::DropKillFocusHook(int code, WPARAM wparam,
LPARAM lparam) {
LRESULT ret = 0;
@@ -771,10 +636,6 @@ LRESULT ChromeFrameNPAPI::OnSetFocus(UINT message, WPARAM wparam,
return ret;
}
-void ChromeFrameNPAPI::OnBlur() {
- DVLOG(1) << __FUNCTION__;
-}
-
void ChromeFrameNPAPI::OnLoad(const GURL& gurl) {
DVLOG(1) << "Firing onload";
FireEvent("load", gurl.spec());
@@ -835,13 +696,6 @@ void ChromeFrameNPAPI::OnMessageFromChromeFrame(const std::string& message,
void ChromeFrameNPAPI::OnAutomationServerReady() {
Base::OnAutomationServerReady();
- std::string proxy_settings;
- bool has_prefs = pref_service_->Initialize(instance_,
- automation_client_.get());
- if (has_prefs && pref_service_->GetProxyValueJSONString(&proxy_settings)) {
- automation_client_->SetProxySettings(proxy_settings);
- }
-
if (navigate_after_initialization_ && !src_.empty()) {
navigate_after_initialization_ = false;
if (!automation_client_->InitiateNavigation(src_,
@@ -1183,33 +1037,6 @@ bool ChromeFrameNPAPI::postMessage(NPObject* npobject, const NPVariant* args,
return true;
}
-bool ChromeFrameNPAPI::postPrivateMessage(NPObject* npobject,
- const NPVariant* args,
- uint32_t arg_count,
- NPVariant* result) {
- if (!is_privileged()) {
- DLOG(WARNING) << "postPrivateMessage invoked in non-privileged mode";
- return false;
- }
-
- if (arg_count != 3 || !NPVARIANT_IS_STRING(args[0]) ||
- !NPVARIANT_IS_STRING(args[1]) || !NPVARIANT_IS_STRING(args[2])) {
- NOTREACHED();
- return false;
- }
-
- const NPString& message_str = args[0].value.stringValue;
- const NPString& origin_str = args[1].value.stringValue;
- const NPString& target_str = args[2].value.stringValue;
- std::string message(message_str.UTF8Characters, message_str.UTF8Length);
- std::string origin(origin_str.UTF8Characters, origin_str.UTF8Length);
- std::string target(target_str.UTF8Characters, target_str.UTF8Length);
-
- automation_client_->ForwardMessageFromExternalHost(message, origin, target);
-
- return true;
-}
-
void ChromeFrameNPAPI::FireEvent(const std::string& event_type,
const std::string& data) {
NPVariant arg;
@@ -1234,10 +1061,6 @@ void ChromeFrameNPAPI::FireEvent(const std::string& event_type,
}
}
-NpProxyService* ChromeFrameNPAPI::CreatePrefService() {
- return new NpProxyService;
-}
-
NPObject* ChromeFrameNPAPI::GetWindowObject() const {
if (!window_object_.get() && instance_) {
NPError ret = npapi::GetValue(instance_, NPNVWindowNPObject,