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

Unified Diff: ppapi/native_client/src/trusted/plugin/plugin.cc

Issue 11783112: Remove the NaCl SRPC proxy from Chrome. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: 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
« no previous file with comments | « ppapi/native_client/src/trusted/plugin/plugin.h ('k') | ppapi/native_client/src/trusted/plugin/plugin.gyp » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: ppapi/native_client/src/trusted/plugin/plugin.cc
diff --git a/ppapi/native_client/src/trusted/plugin/plugin.cc b/ppapi/native_client/src/trusted/plugin/plugin.cc
index 78de2fa4e1a1f2bc16a52deb76c0199729d3bf7c..c0e8e6dd693577f29ffad516d8c36ac3a3abd01c 100644
--- a/ppapi/native_client/src/trusted/plugin/plugin.cc
+++ b/ppapi/native_client/src/trusted/plugin/plugin.cc
@@ -30,7 +30,6 @@
#include "native_client/src/include/portability_io.h"
#include "native_client/src/include/portability_string.h"
#include "native_client/src/shared/platform/nacl_check.h"
-#include "native_client/src/shared/ppapi_proxy/browser_ppp.h"
#include "native_client/src/trusted/desc/nacl_desc_wrapper.h"
#include "native_client/src/trusted/nonnacl_util/sel_ldr_launcher.h"
#include "native_client/src/trusted/plugin/json_manifest.h"
@@ -67,8 +66,6 @@
#include "ppapi/cpp/mouse_lock.h"
#include "ppapi/cpp/rect.h"
-using ppapi_proxy::BrowserPpp;
-
namespace plugin {
namespace {
@@ -240,193 +237,6 @@ void HistogramEnumerateManifestIsDataURI(bool is_data_uri) {
HistogramEnumerate("NaCl.Manifest.IsDataURI", is_data_uri, 2, -1);
}
-// Derive a class from pp::Find_Dev to forward PPP_Find_Dev calls to
-// the plugin.
-class FindAdapter : public pp::Find_Dev {
- public:
- explicit FindAdapter(Plugin* plugin)
- : pp::Find_Dev(plugin),
- plugin_(plugin) {
- BrowserPpp* proxy = plugin_->ppapi_proxy();
- CHECK(proxy != NULL);
- ppp_find_ = static_cast<const PPP_Find_Dev*>(
- proxy->GetPluginInterface(PPP_FIND_DEV_INTERFACE));
- }
-
- bool StartFind(const std::string& text, bool case_sensitive) {
- if (ppp_find_ != NULL) {
- PP_Bool pp_success =
- ppp_find_->StartFind(plugin_->pp_instance(),
- text.c_str(),
- PP_FromBool(case_sensitive));
- return pp_success == PP_TRUE;
- }
- return false;
- }
-
- void SelectFindResult(bool forward) {
- if (ppp_find_ != NULL) {
- ppp_find_->SelectFindResult(plugin_->pp_instance(),
- PP_FromBool(forward));
- }
- }
-
- void StopFind() {
- if (ppp_find_ != NULL)
- ppp_find_->StopFind(plugin_->pp_instance());
- }
-
- private:
- Plugin* plugin_;
- const PPP_Find_Dev* ppp_find_;
-
- NACL_DISALLOW_COPY_AND_ASSIGN(FindAdapter);
-};
-
-
-// Derive a class from pp::MouseLock to forward PPP_MouseLock calls to
-// the plugin.
-class MouseLockAdapter : public pp::MouseLock {
- public:
- explicit MouseLockAdapter(Plugin* plugin)
- : pp::MouseLock(plugin),
- plugin_(plugin) {
- BrowserPpp* proxy = plugin_->ppapi_proxy();
- CHECK(proxy != NULL);
- ppp_mouse_lock_ = static_cast<const PPP_MouseLock*>(
- proxy->GetPluginInterface(PPP_MOUSELOCK_INTERFACE));
- }
-
- void MouseLockLost() {
- if (ppp_mouse_lock_ != NULL)
- ppp_mouse_lock_->MouseLockLost(plugin_->pp_instance());
- }
-
- private:
- Plugin* plugin_;
- const PPP_MouseLock* ppp_mouse_lock_;
-
- NACL_DISALLOW_COPY_AND_ASSIGN(MouseLockAdapter);
-};
-
-
-// Derive a class from pp::Printing_Dev to forward PPP_Printing_Dev calls to
-// the plugin.
-class PrintingAdapter : public pp::Printing_Dev {
- public:
- explicit PrintingAdapter(Plugin* plugin)
- : pp::Printing_Dev(plugin),
- plugin_(plugin) {
- BrowserPpp* proxy = plugin_->ppapi_proxy();
- CHECK(proxy != NULL);
- ppp_printing_ = static_cast<const PPP_Printing_Dev*>(
- proxy->GetPluginInterface(PPP_PRINTING_DEV_INTERFACE));
- }
-
- uint32_t QuerySupportedPrintOutputFormats() {
- if (ppp_printing_ != NULL) {
- return ppp_printing_->QuerySupportedFormats(plugin_->pp_instance());
- }
- return 0;
- }
-
- int32_t PrintBegin(const PP_PrintSettings_Dev& print_settings) {
- if (ppp_printing_ != NULL) {
- return ppp_printing_->Begin(plugin_->pp_instance(), &print_settings);
- }
- return 0;
- }
-
- pp::Resource PrintPages(const PP_PrintPageNumberRange_Dev* page_ranges,
- uint32_t page_range_count) {
- if (ppp_printing_ != NULL) {
- PP_Resource image_data = ppp_printing_->PrintPages(plugin_->pp_instance(),
- page_ranges,
- page_range_count);
- return pp::ImageData(pp::PASS_REF, image_data);
- }
- return pp::Resource();
- }
-
- void PrintEnd() {
- if (ppp_printing_ != NULL)
- ppp_printing_->End(plugin_->pp_instance());
- }
-
- bool IsPrintScalingDisabled() {
- if (ppp_printing_ != NULL) {
- PP_Bool result = ppp_printing_->IsScalingDisabled(plugin_->pp_instance());
- return result == PP_TRUE;
- }
- return false;
- }
-
- private:
- Plugin* plugin_;
- const PPP_Printing_Dev* ppp_printing_;
-
- NACL_DISALLOW_COPY_AND_ASSIGN(PrintingAdapter);
-};
-
-
-// Derive a class from pp::Selection_Dev to forward PPP_Selection_Dev calls to
-// the plugin.
-class SelectionAdapter : public pp::Selection_Dev {
- public:
- explicit SelectionAdapter(Plugin* plugin)
- : pp::Selection_Dev(plugin),
- plugin_(plugin) {
- BrowserPpp* proxy = plugin_->ppapi_proxy();
- CHECK(proxy != NULL);
- ppp_selection_ = static_cast<const PPP_Selection_Dev*>(
- proxy->GetPluginInterface(PPP_SELECTION_DEV_INTERFACE));
- }
-
- pp::Var GetSelectedText(bool html) {
- if (ppp_selection_ != NULL) {
- PP_Var var = ppp_selection_->GetSelectedText(plugin_->pp_instance(),
- PP_FromBool(html));
- return pp::Var(pp::PASS_REF, var);
- }
- return pp::Var();
- }
-
- private:
- Plugin* plugin_;
- const PPP_Selection_Dev* ppp_selection_;
-
- NACL_DISALLOW_COPY_AND_ASSIGN(SelectionAdapter);
-};
-
-
-// Derive a class from pp::Zoom_Dev to forward PPP_Zoom_Dev calls to
-// the plugin.
-class ZoomAdapter : public pp::Zoom_Dev {
- public:
- explicit ZoomAdapter(Plugin* plugin)
- : pp::Zoom_Dev(plugin),
- plugin_(plugin) {
- BrowserPpp* proxy = plugin_->ppapi_proxy();
- CHECK(proxy != NULL);
- ppp_zoom_ = static_cast<const PPP_Zoom_Dev*>(
- proxy->GetPluginInterface(PPP_ZOOM_DEV_INTERFACE));
- }
-
- void Zoom(double factor, bool text_only) {
- if (ppp_zoom_ != NULL) {
- ppp_zoom_->Zoom(plugin_->pp_instance(),
- factor,
- PP_FromBool(text_only));
- }
- }
-
- private:
- Plugin* plugin_;
- const PPP_Zoom_Dev* ppp_zoom_;
-
- NACL_DISALLOW_COPY_AND_ASSIGN(ZoomAdapter);
-};
-
} // namespace
static int const kAbiHeaderBuffer = 256; // must be at least EI_ABIVERSION + 1
@@ -608,7 +418,6 @@ bool Plugin::LoadNaClModuleContinuationIntern(ErrorInfo* error_info) {
"could not initialize module.");
return false;
}
- // Try to start the Chrome IPC-based proxy first.
PP_NaClResult ipc_result = nacl_interface_->StartPpapiProxy(pp_instance());
if (ipc_result == PP_NACL_OK) {
// Log the amound of time that has passed between the trusted plugin being
@@ -618,11 +427,6 @@ bool Plugin::LoadNaClModuleContinuationIntern(ErrorInfo* error_info) {
"NaCl.Perf.StartupTime.NaClOverhead",
static_cast<float>(NaClGetTimeOfDayMicroseconds() - init_time_)
/ NACL_MICROS_PER_MILLI);
- } else if (ipc_result == PP_NACL_USE_SRPC) {
- // Start the old SRPC PPAPI proxy.
- if (!main_subprocess_.StartJSObjectProxy(this, error_info)) {
- return false;
- }
} else if (ipc_result == PP_NACL_ERROR_MODULE) {
error_info->SetReport(ERROR_START_PROXY_MODULE,
"could not initialize module.");
@@ -856,7 +660,6 @@ Plugin::Plugin(PP_Instance pp_instance)
nexe_error_reported_(false),
wrapper_factory_(NULL),
last_error_string_(""),
- ppapi_proxy_(NULL),
enable_dev_interfaces_(false),
init_time_(0),
ready_time_(0),
@@ -880,9 +683,8 @@ Plugin::~Plugin() {
static_cast<void*>(scriptable_plugin())));
// Destroy the coordinator while the rest of the data is still there
pnacl_coordinator_.reset(NULL);
- // If the proxy has been shutdown before now, it's likely the plugin suffered
- // an error while loading.
- if (ppapi_proxy_ != NULL) {
+
+ if (!nexe_error_reported()) {
HistogramTimeLarge(
"NaCl.ModuleUptime.Normal",
(shutdown_start - ready_time_) / NACL_MICROS_PER_MILLI);
@@ -890,7 +692,6 @@ Plugin::~Plugin() {
url_downloaders_.erase(url_downloaders_.begin(), url_downloaders_.end());
- ShutdownProxy();
ScriptablePlugin* scriptable_plugin_ = scriptable_plugin();
ScriptablePlugin::Unref(&scriptable_plugin_);
@@ -933,75 +734,14 @@ Plugin::~Plugin() {
static_cast<void*>(this)));
}
-
-void Plugin::DidChangeView(const pp::View& view) {
- PLUGIN_PRINTF(("Plugin::DidChangeView (this=%p)\n",
- static_cast<void*>(this)));
-
- if (!BrowserPpp::is_valid(ppapi_proxy_)) {
- // Store this event and replay it when the proxy becomes available.
- view_to_replay_ = view;
- } else {
- ppapi_proxy_->ppp_instance_interface()->DidChangeView(
- pp_instance(), view.pp_resource());
- }
-}
-
-
-void Plugin::DidChangeFocus(bool has_focus) {
- PLUGIN_PRINTF(("Plugin::DidChangeFocus (this=%p)\n",
- static_cast<void*>(this)));
- if (BrowserPpp::is_valid(ppapi_proxy_)) {
- ppapi_proxy_->ppp_instance_interface()->DidChangeFocus(
- pp_instance(), PP_FromBool(has_focus));
- }
-}
-
-
-bool Plugin::HandleInputEvent(const pp::InputEvent& event) {
- PLUGIN_PRINTF(("Plugin::HandleInputEvent (this=%p)\n",
- static_cast<void*>(this)));
- if (!BrowserPpp::is_valid(ppapi_proxy_) ||
- ppapi_proxy_->ppp_input_event_interface() == NULL) {
- return false; // event is not handled here.
- } else {
- bool handled = PP_ToBool(
- ppapi_proxy_->ppp_input_event_interface()->HandleInputEvent(
- pp_instance(), event.pp_resource()));
- PLUGIN_PRINTF(("Plugin::HandleInputEvent (handled=%d)\n", handled));
- return handled;
- }
-}
-
-
bool Plugin::HandleDocumentLoad(const pp::URLLoader& url_loader) {
PLUGIN_PRINTF(("Plugin::HandleDocumentLoad (this=%p)\n",
static_cast<void*>(this)));
- if (!BrowserPpp::is_valid(ppapi_proxy_)) {
- // Store this event and replay it when the proxy becomes available.
- document_load_to_replay_ = url_loader;
- // Return true so that the browser keeps servicing this loader so we can
- // perform requests on it later.
- return true;
- } else {
- return PP_ToBool(
- ppapi_proxy_->ppp_instance_interface()->HandleDocumentLoad(
- pp_instance(), url_loader.pp_resource()));
- }
-}
-
-
-void Plugin::HandleMessage(const pp::Var& message) {
- PLUGIN_PRINTF(("Plugin::HandleMessage (this=%p)\n",
- static_cast<void*>(this)));
- if (BrowserPpp::is_valid(ppapi_proxy_) &&
- ppapi_proxy_->ppp_messaging_interface() != NULL) {
- ppapi_proxy_->ppp_messaging_interface()->HandleMessage(
- pp_instance(), message.pp_var());
- }
+ // We don't know if the plugin will handle the document load, but return
+ // true in order to give it a chance to respond once the proxy is started.
+ return true;
}
-
pp::Var Plugin::GetInstanceObject() {
PLUGIN_PRINTF(("Plugin::GetInstanceObject (this=%p)\n",
static_cast<void*>(this)));
@@ -1171,7 +911,7 @@ void Plugin::NexeDidCrash(int32_t pp_error) {
ErrorInfo error_info;
// The error is not quite right. In particular, the crash
// reported by this path could be due to NaCl application
- // crashes that occur after the pepper proxy has started.
+ // crashes that occur after the PPAPI proxy has started.
error_info.SetReport(ERROR_START_PROXY_CRASH,
"Nexe crashed during startup");
ReportLoadError(error_info);
@@ -1230,103 +970,8 @@ void Plugin::BitcodeDidTranslateContinuation(int32_t pp_error) {
}
}
-bool Plugin::StartProxiedExecution(NaClSrpcChannel* srpc_channel,
- ErrorInfo* error_info) {
- PLUGIN_PRINTF(("Plugin::StartProxiedExecution (srpc_channel=%p)\n",
- static_cast<void*>(srpc_channel)));
-
- // Log the amound of time that has passed between the trusted plugin being
- // initialized and the untrusted plugin being initialized. This is (roughly)
- // the cost of using NaCl, in terms of startup time.
- HistogramStartupTimeMedium(
- "NaCl.Perf.StartupTime.NaClOverhead",
- static_cast<float>(NaClGetTimeOfDayMicroseconds() - init_time_)
- / NACL_MICROS_PER_MILLI);
-
- // Check that the .nexe exports the PPAPI intialization method.
- NaClSrpcService* client_service = srpc_channel->client;
- if (NaClSrpcServiceMethodIndex(client_service,
- "PPP_InitializeModule:ihs:i") ==
- kNaClSrpcInvalidMethodIndex) {
- error_info->SetReport(
- ERROR_START_PROXY_CHECK_PPP,
- "could not find PPP_InitializeModule() - toolchain version mismatch?");
- PLUGIN_PRINTF(("Plugin::StartProxiedExecution (%s)\n",
- error_info->message().c_str()));
- return false;
- }
- nacl::scoped_ptr<BrowserPpp> ppapi_proxy(new BrowserPpp(srpc_channel, this));
- PLUGIN_PRINTF(("Plugin::StartProxiedExecution (ppapi_proxy=%p)\n",
- static_cast<void*>(ppapi_proxy.get())));
- if (ppapi_proxy.get() == NULL) {
- error_info->SetReport(ERROR_START_PROXY_ALLOC,
- "could not allocate proxy memory.");
- return false;
- }
- pp::Module* module = pp::Module::Get();
- PLUGIN_PRINTF(("Plugin::StartProxiedExecution (module=%p)\n",
- static_cast<void*>(module)));
- CHECK(module != NULL); // We could not have gotten past init stage otherwise.
- int32_t pp_error =
- ppapi_proxy->InitializeModule(module->pp_module(),
- module->get_browser_interface());
- PLUGIN_PRINTF(("Plugin::StartProxiedExecution (pp_error=%"
- NACL_PRId32")\n", pp_error));
- if (pp_error != PP_OK) {
- error_info->SetReport(ERROR_START_PROXY_MODULE,
- "could not initialize module.");
- return false;
- }
- const PPP_Instance* instance_interface =
- ppapi_proxy->ppp_instance_interface();
- PLUGIN_PRINTF(("Plugin::StartProxiedExecution (ppp_instance=%p)\n",
- static_cast<const void*>(instance_interface)));
- CHECK(instance_interface != NULL); // Verified on module initialization.
- PP_Bool did_create = instance_interface->DidCreate(
- pp_instance(),
- argc(),
- const_cast<const char**>(argn()),
- const_cast<const char**>(argv()));
- PLUGIN_PRINTF(("Plugin::StartProxiedExecution (did_create=%d)\n",
- did_create));
- if (did_create == PP_FALSE) {
- error_info->SetReport(ERROR_START_PROXY_INSTANCE,
- "could not create instance.");
- return false;
- }
-
- ppapi_proxy_ = ppapi_proxy.release();
-
- // Create PPP* interface adapters to forward calls to .nexe.
- find_adapter_.reset(new FindAdapter(this));
- mouse_lock_adapter_.reset(new MouseLockAdapter(this));
- printing_adapter_.reset(new PrintingAdapter(this));
- selection_adapter_.reset(new SelectionAdapter(this));
- zoom_adapter_.reset(new ZoomAdapter(this));
-
- // Replay missed events.
- if (!view_to_replay_.is_null()) {
- DidChangeView(view_to_replay_);
- view_to_replay_ = pp::View();
- }
- if (!document_load_to_replay_.is_null()) {
- HandleDocumentLoad(document_load_to_replay_);
- document_load_to_replay_ = pp::URLLoader();
- }
- bool is_valid_proxy = BrowserPpp::is_valid(ppapi_proxy_);
- PLUGIN_PRINTF(("Plugin::StartProxiedExecution (is_valid_proxy=%d)\n",
- is_valid_proxy));
- if (!is_valid_proxy) {
- error_info->SetReport(ERROR_START_PROXY_CRASH,
- "instance crashed after creation.");
- }
- return is_valid_proxy;
-}
-
void Plugin::ReportDeadNexe() {
PLUGIN_PRINTF(("Plugin::ReportDeadNexe\n"));
- if (ppapi_proxy_ != NULL)
- ppapi_proxy_->ReportDeadNexe();
if (nacl_ready_state() == DONE && !nexe_error_reported()) { // After loadEnd.
int64_t crash_time = NaClGetTimeOfDayMicroseconds();
@@ -1342,30 +987,15 @@ void Plugin::ReportDeadNexe() {
EnqueueProgressEvent(kProgressEventCrash);
set_nexe_error_reported(true);
- CHECK(ppapi_proxy_ == NULL || !ppapi_proxy_->is_valid());
- ShutdownProxy();
}
// else ReportLoadError() and ReportAbortError() will be used by loading code
- // to provide error handling and proxy shutdown.
+ // to provide error handling.
//
// NOTE: not all crashes during load will make it here.
// Those in BrowserPpp::InitializeModule and creation of PPP interfaces
// will just get reported back as PP_ERROR_FAILED.
}
-void Plugin::ShutdownProxy() {
- PLUGIN_PRINTF(("Plugin::ShutdownProxy (ppapi_proxy=%p)\n",
- static_cast<void*>(ppapi_proxy_)));
- // We do not call remote PPP_Instance::DidDestroy because the untrusted
- // side can no longer take full advantage of mostly asynchronous Pepper
- // per-Instance interfaces at this point.
- if (ppapi_proxy_ != NULL) {
- ppapi_proxy_->ShutdownModule();
- delete ppapi_proxy_;
- ppapi_proxy_ = NULL;
- }
-}
-
void Plugin::NaClManifestBufferReady(int32_t pp_error) {
PLUGIN_PRINTF(("Plugin::NaClManifestBufferReady (pp_error=%"
NACL_PRId32")\n", pp_error));
@@ -1708,7 +1338,6 @@ void Plugin::ReportLoadError(const ErrorInfo& error_info) {
error_info.message();
set_last_error_string(message);
AddToConsole(message);
- ShutdownProxy();
// Inform JavaScript that loading encountered an error and is complete.
EnqueueProgressEvent(kProgressEventError);
EnqueueProgressEvent(kProgressEventLoadEnd);
@@ -1727,7 +1356,6 @@ void Plugin::ReportLoadAbort() {
nacl::string error_string("NaCl module load failed: user aborted");
set_last_error_string(error_string);
AddToConsole(error_string);
- ShutdownProxy();
// Inform JavaScript that loading was aborted and is complete.
EnqueueProgressEvent(kProgressEventAbort);
EnqueueProgressEvent(kProgressEventLoadEnd);
« no previous file with comments | « ppapi/native_client/src/trusted/plugin/plugin.h ('k') | ppapi/native_client/src/trusted/plugin/plugin.gyp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698