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

Unified Diff: src/trusted/plugin/plugin.h

Issue 7799028: Remove src/trusted/plugin (Closed) Base URL: svn://svn.chromium.org/native_client/trunk/src/native_client
Patch Set: fix gyp file for necessary -I Created 9 years, 4 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 | « src/trusted/plugin/osx_ppapi/ppNaClPlugin.r ('k') | src/trusted/plugin/plugin.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: src/trusted/plugin/plugin.h
diff --git a/src/trusted/plugin/plugin.h b/src/trusted/plugin/plugin.h
deleted file mode 100644
index 2df08270eed74e8b10ec05facbb30712e3a209ad..0000000000000000000000000000000000000000
--- a/src/trusted/plugin/plugin.h
+++ /dev/null
@@ -1,514 +0,0 @@
-/*
- * Copyright (c) 2011 The Native Client Authors. All rights reserved.
- * Use of this source code is governed by a BSD-style license that can be
- * found in the LICENSE file.
- */
-
-// The portable representation of an instance and root scriptable object.
-// The PPAPI version of the plugin instantiates a subclass of this class.
-
-#ifndef NATIVE_CLIENT_SRC_TRUSTED_PLUGIN_PLUGIN_H_
-#define NATIVE_CLIENT_SRC_TRUSTED_PLUGIN_PLUGIN_H_
-
-#include <stdio.h>
-#include <map>
-#include <set>
-#include <queue>
-#include <string>
-#include <vector>
-
-#include "native_client/src/include/nacl_macros.h"
-#include "native_client/src/include/nacl_scoped_ptr.h"
-#include "native_client/src/include/nacl_string.h"
-#include "native_client/src/trusted/plugin/file_downloader.h"
-#include "native_client/src/trusted/plugin/method_map.h"
-#include "native_client/src/trusted/plugin/nacl_subprocess.h"
-#include "native_client/src/trusted/plugin/pnacl_coordinator.h"
-#include "native_client/src/trusted/plugin/service_runtime.h"
-#include "native_client/src/trusted/plugin/utility.h"
-
-#include "ppapi/cpp/private/var_private.h"
-// for pp::VarPrivate
-#include "ppapi/cpp/private/instance_private.h"
-#include "ppapi/cpp/rect.h"
-#include "ppapi/cpp/url_loader.h"
-#include "ppapi/cpp/var.h"
-
-struct NaClSrpcChannel;
-struct NaClDesc;
-
-namespace nacl {
-class DescWrapper;
-class DescWrapperFactory;
-} // namespace nacl
-
-namespace pp {
-class Find_Dev;
-class Printing_Dev;
-class Selection_Dev;
-class URLLoader;
-class WidgetClient_Dev;
-class URLUtil_Dev;
-class Zoom_Dev;
-}
-
-namespace ppapi_proxy {
-class BrowserPpp;
-}
-
-namespace plugin {
-
-class ErrorInfo;
-class Manifest;
-class PnaclCoordinator;
-class ProgressEvent;
-class ScriptableHandle;
-
-typedef enum {
- METHOD_CALL = 0,
- PROPERTY_GET,
- PROPERTY_SET
-} CallType;
-
-
-class Plugin : public pp::InstancePrivate {
- public:
- // Factory method for creation.
- static Plugin* New(PP_Instance instance);
-
- // ----- Methods inherited from pp::Instance:
-
- // Initializes this plugin with <embed/object ...> tag attribute count |argc|,
- // names |argn| and values |argn|. Returns false on failure.
- // Gets called by the browser right after New().
- virtual bool Init(uint32_t argc, const char* argn[], const char* argv[]);
-
- // Handles view changes from the browser.
- virtual void DidChangeView(const pp::Rect& position, const pp::Rect& clip);
-
- // Handles gaining or losing focus.
- virtual void DidChangeFocus(bool has_focus);
-
- // Handles input events delivered from the browser to this plugin element.
- virtual bool HandleInputEvent(const pp::InputEvent& event);
-
- // Handles gaining or losing focus.
- virtual bool HandleDocumentLoad(const pp::URLLoader& url_loader);
-
- // Returns a scriptable reference to this plugin element.
- // Called by JavaScript document.getElementById(plugin_id).
- virtual pp::Var GetInstanceObject();
-
- // Handles postMessage from browser
- virtual void HandleMessage(const pp::Var& message);
-
- // ----- Plugin interface support.
-
- // Load support.
- // NaCl module can be loaded given a DescWrapper.
- //
- // Starts NaCl module but does not wait until low-level
- // initialization (e.g., ld.so dynamic loading of manifest files) is
- // done. The module will become ready later, asynchronously. Other
- // event handlers should block until the module is ready before
- // trying to communicate with it, i.e., until nacl_ready_state is
- // DONE. Note, however, we already have another mechanism that
- // prevents event delivery: StartJSObjectProxy plumbs through
- // NaClSubprocess to SrpcClient which upcalls
- // Plugin::StartProxiedExecution, which sets ppapi_proxy_. And NULL
- // == ppapi_proxy_ prevents events from being delivered, even if
- // nacl_ready_state is DONE.
- //
- // NB: currently we do not time out, so if the untrusted code
- // does not signal that it is ready, then we will deadlock the main
- // thread of the renderer on this subsequent event delivery. We
- // should include a time-out at which point we declare the
- // nacl_ready_state to be done, and let the normal crash detection
- // mechanism(s) take over.
- //
- // Updates nacl_module_origin() and nacl_module_url().
- bool LoadNaClModule(nacl::DescWrapper* wrapper, ErrorInfo* error_info,
- pp::CompletionCallback init_done_cb);
-
- // Finish hooking interfaces up, after low-level initialization is
- // complete.
- bool LoadNaClModuleContinuationIntern(ErrorInfo* error_info);
-
- // Continuation for starting SRPC/JSProxy services as appropriate.
- // This is invoked as a callback when the NaCl module makes the
- // init_done reverse RPC to tell us that low-level initialization
- // such as ld.so processing is done. That initialization requires
- // that the main thread be free in order to do Pepper
- // main-thread-only operations such as file processing.
- bool LoadNaClModuleContinuation(int32_t pp_error);
-
- // Load support.
- // A helper SRPC NaCl module can be loaded given a DescWrapper.
- // Blocks until the helper module signals initialization is done.
- // Does not update nacl_module_origin().
- // Returns kInvalidNaClSubprocessId or the ID of the new helper NaCl module.
- NaClSubprocessId LoadHelperNaClModule(nacl::DescWrapper* wrapper,
- ErrorInfo* error_info);
-
- // Returns the argument value for the specified key, or NULL if not found.
- // The callee retains ownership of the result.
- char* LookupArgument(const char* key);
-
- enum LengthComputable {
- LENGTH_IS_NOT_COMPUTABLE = 0,
- LENGTH_IS_COMPUTABLE = 1
- };
- // Report successful loading of a module.
- void ReportLoadSuccess(LengthComputable length_computable,
- uint64_t loaded_bytes,
- uint64_t total_bytes);
- // Report an error that was encountered while loading a module.
- void ReportLoadError(const ErrorInfo& error_info);
- // Report loading a module was aborted, typically due to user action.
- void ReportLoadAbort();
- // Dispatch a JavaScript event to indicate a key step in loading.
- // |event_type| is a character string indicating which type of progress
- // event (loadstart, progress, error, abort, load, loadend). Events are
- // enqueued on the JavaScript event loop, which then calls back through
- // DispatchProgressEvent.
- void EnqueueProgressEvent(const char* event_type,
- LengthComputable length_computable,
- uint64_t loaded_bytes,
- uint64_t total_bytes);
-
- // Report the error code that sel_ldr produces when starting a nexe.
- void ReportSelLdrLoadStatus(int status);
-
- // Report nexe death after load to JS and shut down the proxy.
- void ReportDeadNexe();
-
- // The embed/object tag argument list.
- int argc() const { return argc_; }
- char** argn() const { return argn_; }
- char** argv() const { return argv_; }
-
- BrowserInterface* browser_interface() const { return browser_interface_; }
- Plugin* plugin() const { return const_cast<Plugin*>(this); }
-
- // URL resolution support.
- // plugin_base_url is the URL used for resolving relative URLs used in
- // src="...".
- nacl::string plugin_base_url() const { return plugin_base_url_; }
- void set_plugin_base_url(nacl::string url) { plugin_base_url_ = url; }
- // manifest_base_url is the URL used for resolving relative URLs mentioned
- // in manifest files. If the manifest is a data URI, this is an empty string.
- nacl::string manifest_base_url() const { return manifest_base_url_; }
- void set_manifest_base_url(nacl::string url) { manifest_base_url_ = url; }
-
- // The URL of the manifest file as set by the "src" attribute.
- // It is not the fully resolved URL if it was set as relative.
- const nacl::string& manifest_url() const { return manifest_url_; }
- void set_manifest_url(const nacl::string& manifest_url) {
- manifest_url_ = manifest_url;
- }
-
- // The state of readiness of the plugin.
- enum ReadyState {
- // The trusted plugin begins in this ready state.
- UNSENT = 0,
- // The manifest file has been requested, but not yet received.
- OPENED = 1,
- // This state is unused.
- HEADERS_RECEIVED = 2,
- // The manifest file has been received and the nexe successfully requested.
- LOADING = 3,
- // The nexe has been loaded and the proxy started, so it is ready for
- // interaction with the page.
- DONE = 4
- };
- ReadyState nacl_ready_state() const { return nacl_ready_state_; }
- void set_nacl_ready_state(ReadyState nacl_ready_state) {
- nacl_ready_state_ = nacl_ready_state;
- }
-
- // Get the NaCl module subprocess that was assigned the ID |id|.
- NaClSubprocess* nacl_subprocess(NaClSubprocessId id) const {
- if (kInvalidNaClSubprocessId == id) {
- return NULL;
- }
- return nacl_subprocesses_[id];
- }
- NaClSubprocessId next_nacl_subprocess_id() const {
- return static_cast<NaClSubprocessId>(nacl_subprocesses_.size());
- }
-
- nacl::DescWrapperFactory* wrapper_factory() const { return wrapper_factory_; }
-
- // Requests a NaCl manifest download from a |url| relative to the page origin.
- void RequestNaClManifest(const nacl::string& url);
-
- // Start up proxied execution of the browser API.
- bool StartProxiedExecution(NaClSrpcChannel* srpc_channel,
- ErrorInfo* error_info);
-
- // Determines whether experimental APIs are usable.
- static bool ExperimentalJavaScriptApisAreEnabled();
-
- // Methods for method and property dispatch.
- bool InitParams(uintptr_t method_id, CallType call_type, SrpcParams* params);
- bool HasMethod(uintptr_t method_id, CallType call_type);
- bool Invoke(uintptr_t method_id, CallType call_type, SrpcParams* params);
- std::vector<uintptr_t>* GetPropertyIdentifiers() {
- return property_get_methods_.Keys();
- }
-
- // The size returned when a file download operation is unable to determine
- // the size of the file to load. W3C ProgressEvents specify that unknown
- // sizes return 0.
- static const uint64_t kUnknownBytes = 0;
-
- // Getter for PPAPI proxy interface.
- ppapi_proxy::BrowserPpp* ppapi_proxy() const { return ppapi_proxy_; }
-
- // Called back by CallOnMainThread. Dispatches the first enqueued progress
- // event.
- void DispatchProgressEvent(int32_t result);
-
- // Requests a URL asynchronously resulting in a call to pp_callback with
- // a PP_Error indicating status. On success an open file descriptor
- // corresponding to the url body is recorded for further lookup.
- // This is used by SRPC-based StreamAsFile().
- bool StreamAsFile(const nacl::string& url, PP_CompletionCallback pp_callback);
- // Returns an open POSIX file descriptor retrieved by StreamAsFile()
- // or NACL_NO_FILE_DESC. The caller must take ownership of the descriptor.
- int32_t GetPOSIXFileDesc(const nacl::string& url);
-
- // A helper function that gets the scheme type for |url|. Uses URLUtil_Dev
- // interface which this class has as a member.
- UrlSchemeType GetUrlScheme(const std::string& url);
-
- // Get the text description of the last error reported by the plugin.
- const nacl::string& last_error_string() const { return last_error_string_; }
- void set_last_error_string(const nacl::string& error) {
- last_error_string_ = error;
- }
-
- // The MIME type used to instantiate this instance of the NaCl plugin.
- // Typically, the MIME type will be application/x-nacl. However, if the NEXE
- // is being used as a content type handler for another content type (such as
- // PDF), then this function will return that type.
- const nacl::string& mime_type() const { return mime_type_; }
- // The default MIME type for the NaCl plugin.
- static const char* const kNaClMIMEType;
- // Tests if the MIME type is not a NaCl MIME type.
- bool IsForeignMIMEType() const;
- // Returns true if PPAPI Dev interfaces should be allowed.
- bool enable_dev_interface() { return enable_dev_interface_; }
-
- Manifest const* manifest() const { return manifest_.get(); }
-
- private:
- NACL_DISALLOW_COPY_AND_ASSIGN(Plugin);
-#ifndef HACK_FOR_MACOS_HANG_REMOVED
- void XYZZY(const nacl::string& url, pp::VarPrivate js_callback);
-#endif // HACK_FOR_MACOS_HANG_REMOVED
- // Prevent construction and destruction from outside the class:
- // must use factory New() method instead.
- explicit Plugin(PP_Instance instance);
- // The browser will invoke the destructor via the pp::Instance
- // pointer to this object, not from base's Delete().
- ~Plugin();
-
- bool Init(BrowserInterface* browser_interface,
- int argc,
- char* argn[],
- char* argv[]);
- void LoadMethods();
- // Shuts down socket connection, service runtime, and receive thread,
- // in this order, for all spun up NaCl module subprocesses.
- void ShutDownSubprocesses();
-
- ScriptableHandle* scriptable_handle() const { return scriptable_handle_; }
- void set_scriptable_handle(ScriptableHandle* scriptable_handle) {
- scriptable_handle_ = scriptable_handle;
- }
-
- // Access the service runtime for the main NaCl subprocess.
- ServiceRuntime* main_service_runtime() const {
- return main_subprocess_.service_runtime();
- }
-
- // Setting the properties and methods exported.
- void AddPropertyGet(RpcFunction function_ptr,
- const char* name,
- const char* outs);
-
- // Help load a nacl module, from the file specified in wrapper.
- // This will fully initialize the |subprocess| if the load was successful.
- bool LoadNaClModuleCommon(nacl::DescWrapper* wrapper,
- NaClSubprocess* subprocess,
- ErrorInfo* error_info,
- pp::CompletionCallback init_done_cb);
- bool StartSrpcServices(NaClSubprocess* subprocess, ErrorInfo* error_info);
- bool StartSrpcServicesCommon(NaClSubprocess* subprocess,
- ErrorInfo* error_info);
- bool StartJSObjectProxy(NaClSubprocess* subprocess, ErrorInfo* error_info);
-
- MethodInfo* GetMethodInfo(uintptr_t method_id, CallType call_type);
-
- // Check url and decide if PPAPI Dev interfaces are required.
- bool RequiresDevInterface(const nacl::string& manifest_url);
-
- // Callback used when getting the URL for the .nexe file. If the URL loading
- // is successful, the file descriptor is opened and can be passed to sel_ldr
- // with the sandbox on.
- void NexeFileDidOpen(int32_t pp_error);
- void NexeFileDidOpenContinuation(int32_t pp_error);
-
- // Callback used when a .nexe is translated from bitcode. If the translation
- // is successful, the file descriptor is opened and can be passed to sel_ldr
- // with the sandbox on.
- void BitcodeDidTranslate(int32_t pp_error);
- void BitcodeDidTranslateContinuation(int32_t pp_error);
-
- // NaCl ISA selection manifest file support. The manifest file is specified
- // using the "nacl" attribute in the <embed> tag. First, the manifest URL (or
- // data: URI) is fetched, then the JSON is parsed. Once a valid .nexe is
- // chosen for the sandbox ISA, any current service runtime is shut down, the
- // .nexe is loaded and run.
-
- // Callback used when getting the manifest file as a buffer (e.g., data URIs)
- void NaClManifestBufferReady(int32_t pp_error);
-
- // Callback used when getting the manifest file as a local file descriptor.
- void NaClManifestFileDidOpen(int32_t pp_error);
-
- // Processes the JSON manifest string and starts loading the nexe.
- void ProcessNaClManifest(const nacl::string& manifest_json);
-
- // Parses the JSON in |manifest_json| and retains a Manifest in
- // |manifest_| for use by subsequent resource lookups.
- // On success, |true| is returned and |manifest_| is updated to
- // contain a Manifest that is used by SelectNexeURLFromManifest.
- // On failure, |false| is returned, and |manifest_| is unchanged.
- bool SetManifestObject(const nacl::string& manifest_json,
- ErrorInfo* error_info);
-
- // Determines the URL of the program module appropriate for the NaCl sandbox
- // implemented by the installed sel_ldr. The URL is determined from the
- // Manifest in |manifest_|. On success, |true| is returned and |result| is
- // set to the URL to use for the program, and |is_portable| is set to
- // |true| if the program is portable bitcode.
- // On failure, |false| is returned.
- bool SelectProgramURLFromManifest(nacl::string* result,
- ErrorInfo* error_info,
- bool* is_portable);
-
- // TODO(jvoung): get rid of these once we find a better way to store / install
- // the pnacl translator nexes.
- bool SelectLLCURLFromManifest(nacl::string* result,
- ErrorInfo* error_info);
- bool SelectLDURLFromManifest(nacl::string* result,
- ErrorInfo* error_info);
-
- // Logs timing information to a UMA histogram, and also logs the same timing
- // information divided by the size of the nexe to another histogram.
- void HistogramStartupTimeSmall(const std::string& name, float dt);
- void HistogramStartupTimeMedium(const std::string& name, float dt);
-
- // Determines the appropriate nexe for the sandbox and requests a load.
- void RequestNexeLoad();
-
- // Callback used when loading a URL for SRPC-based StreamAsFile().
- void UrlDidOpenForStreamAsFile(int32_t pp_error,
- FileDownloader*& url_downloader,
- PP_CompletionCallback pp_callback);
-
- // Shuts down the proxy for PPAPI nexes.
- void ShutdownProxy(); // Nexe shutdown + proxy deletion.
-
- BrowserInterface* browser_interface_;
- ScriptableHandle* scriptable_handle_;
-
- int argc_;
- char** argn_;
- char** argv_;
-
- // Keep track of the NaCl module subprocesses that were spun up in the plugin.
- NaClSubprocess main_subprocess_;
- std::vector<NaClSubprocess*> nacl_subprocesses_;
-
- nacl::string plugin_base_url_;
- nacl::string manifest_base_url_;
- nacl::string manifest_url_;
- ReadyState nacl_ready_state_;
-
- nacl::DescWrapperFactory* wrapper_factory_;
-
- MethodMap property_get_methods_;
-
- // File download support. |nexe_downloader_| can be opened with a specific
- // callback to run when the file has been downloaded and is opened for
- // reading. We use one downloader for all URL downloads to prevent issuing
- // multiple GETs that might arrive out of order. For example, this will
- // prevent a GET of a NaCl manifest while a .nexe GET is pending. Note that
- // this will also prevent simultaneous handling of multiple .nexes on a page.
- FileDownloader nexe_downloader_;
- pp::CompletionCallbackFactory<Plugin> callback_factory_;
-
- PnaclCoordinator pnacl_;
-
- // The manifest dictionary. Used for looking up resources to be loaded.
- nacl::scoped_ptr<Manifest> manifest_;
- // URL processing interface for use in looking up resources in manifests.
- const pp::URLUtil_Dev* url_util_;
-
- // A string containing the text description of the last error produced by
- // this plugin.
- nacl::string last_error_string_;
-
- // A pointer to the browser end of a proxy pattern connecting the
- // NaCl plugin to the PPAPI .nexe's PPP interface
- // (InitializeModule, Shutdown, and GetInterface).
- // TODO(sehr): this should be a scoped_ptr for shutdown.
- ppapi_proxy::BrowserPpp* ppapi_proxy_;
-
- // PPAPI Dev interfaces are disabled by default.
- bool enable_dev_interface_;
-
- // If we get a DidChangeView event before the nexe is loaded, we store it and
- // replay it to nexe after it's loaded.
- bool replayDidChangeView;
- pp::Rect replayDidChangeViewPosition;
- pp::Rect replayDidChangeViewClip;
-
- // If we get a HandleDocumentLoad event before the nexe is loaded, we store
- // it and replay it to nexe after it's loaded.
- bool replayHandleDocumentLoad;
- pp::URLLoader replayHandleDocumentLoadURLLoader;
-
- nacl::string mime_type_;
-
- // Keep track of the FileDownloaders created to fetch urls.
- std::set<FileDownloader*> url_downloaders_;
- // Keep track of file descriptors opened by StreamAsFile().
- // These are owned by the browser.
- std::map<nacl::string, int32_t> url_fd_map_;
-
- // Pending progress events.
- std::queue<ProgressEvent*> progress_events_;
-
- // Adapter class constructors require a reference to 'this', so we can't
- // contain them directly.
- nacl::scoped_ptr<pp::Find_Dev> find_adapter_;
- nacl::scoped_ptr<pp::Printing_Dev> printing_adapter_;
- nacl::scoped_ptr<pp::Selection_Dev> selection_adapter_;
- nacl::scoped_ptr<pp::WidgetClient_Dev> widget_client_adapter_;
- nacl::scoped_ptr<pp::Zoom_Dev> zoom_adapter_;
-
- // used for NexeFileDidOpenContinuation
- int64_t load_start_;
-
- int64_t init_time_;
- int64_t ready_time_;
- size_t nexe_size_;
-};
-
-} // namespace plugin
-
-#endif // NATIVE_CLIENT_SRC_TRUSTED_PLUGIN_PLUGIN_H_
« no previous file with comments | « src/trusted/plugin/osx_ppapi/ppNaClPlugin.r ('k') | src/trusted/plugin/plugin.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698