| Index: remoting/host/host_script_object.h
|
| diff --git a/remoting/host/host_script_object.h b/remoting/host/host_script_object.h
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..ea953f194ec5f191c79087173c10e4fa04c1d786
|
| --- /dev/null
|
| +++ b/remoting/host/host_script_object.h
|
| @@ -0,0 +1,148 @@
|
| +// Copyright (c) 2011 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.
|
| +
|
| +#ifndef REMOTING_HOST_HOST_SCRIPT_OBJECT_H_
|
| +#define REMOTING_HOST_HOST_SCRIPT_OBJECT_H_
|
| +
|
| +#include <string>
|
| +#include <vector>
|
| +
|
| +#include "base/compiler_specific.h"
|
| +#include "base/memory/scoped_ptr.h"
|
| +#include "base/memory/ref_counted.h"
|
| +#include "base/synchronization/cancellation_flag.h"
|
| +#include "base/synchronization/waitable_event.h"
|
| +#include "base/threading/platform_thread.h"
|
| +#include "remoting/host/chromoting_host_context.h"
|
| +#include "remoting/host/host_status_observer.h"
|
| +#include "third_party/npapi/bindings/npapi.h"
|
| +#include "third_party/npapi/bindings/npfunctions.h"
|
| +#include "third_party/npapi/bindings/npruntime.h"
|
| +
|
| +class Task;
|
| +
|
| +namespace tracked_objects {
|
| +class Location;
|
| +} // namespace tracked_objects
|
| +
|
| +namespace remoting {
|
| +
|
| +class ChromotingHost;
|
| +class MutableHostConfig;
|
| +class RegisterSupportHostRequest;
|
| +class SignalStrategy;
|
| +class SupportAccessVerifier;
|
| +
|
| +// NPAPI plugin implementation for remoting host script object.
|
| +// HostNPScriptObject creates threads that are required to run
|
| +// ChromotingHost and starts/stops the host on those threads. When
|
| +// destroyed it sychronously shuts down the host and all threads.
|
| +class HostNPScriptObject : public HostStatusObserver {
|
| + public:
|
| + HostNPScriptObject(NPP plugin, NPObject* parent);
|
| + virtual ~HostNPScriptObject();
|
| +
|
| + bool Init();
|
| +
|
| + bool HasMethod(const std::string& method_name);
|
| + bool InvokeDefault(const NPVariant* args,
|
| + uint32_t argCount,
|
| + NPVariant* result);
|
| + bool Invoke(const std::string& method_name,
|
| + const NPVariant* args,
|
| + uint32_t argCount,
|
| + NPVariant* result);
|
| + bool HasProperty(const std::string& property_name);
|
| + bool GetProperty(const std::string& property_name, NPVariant* result);
|
| + bool SetProperty(const std::string& property_name, const NPVariant* value);
|
| + bool RemoveProperty(const std::string& property_name);
|
| + bool Enumerate(std::vector<std::string>* values);
|
| +
|
| + // remoting::HostStatusObserver implementation.
|
| + virtual void OnSignallingConnected(remoting::SignalStrategy* signal_strategy,
|
| + const std::string& full_jid) OVERRIDE;
|
| + virtual void OnSignallingDisconnected() OVERRIDE;
|
| + virtual void OnAccessDenied() OVERRIDE;
|
| + virtual void OnShutdown() OVERRIDE;
|
| +
|
| + private:
|
| + enum State {
|
| + kDisconnected,
|
| + kRequestedAccessCode,
|
| + kReceivedAccessCode,
|
| + kConnected,
|
| + kAffirmingConnection,
|
| + kError
|
| + };
|
| +
|
| + // Start connection. args are:
|
| + // string uid, string auth_token
|
| + // No result.
|
| + bool Connect(const NPVariant* args, uint32_t argCount, NPVariant* result);
|
| +
|
| + // Disconnect. No arguments or result.
|
| + bool Disconnect(const NPVariant* args, uint32_t argCount, NPVariant* result);
|
| +
|
| + // Call LogDebugInfo handler if there is one.
|
| + void LogDebugInfo(const std::string& message);
|
| +
|
| + // Call OnStateChanged handler if there is one.
|
| + void OnStateChanged(State state);
|
| +
|
| + // Callbacks invoked during session setup.
|
| + void OnReceivedSupportID(remoting::SupportAccessVerifier* access_verifier,
|
| + bool success,
|
| + const std::string& support_id);
|
| +
|
| + // Helper functions that run on main thread. Can be called on any
|
| + // other thread.
|
| + void ConnectInternal(const std::string& uid,
|
| + const std::string& auth_token,
|
| + const std::string& auth_service);
|
| + void DisconnectInternal();
|
| +
|
| + // Callback for ChromotingHost::Shutdown().
|
| + void OnShutdownFinished();
|
| +
|
| + // Call a JavaScript function wrapped as an NPObject.
|
| + // If result is non-null, the result of the call will be stored in it.
|
| + // Caller is responsible for releasing result if they ask for it.
|
| + static bool CallJSFunction(NPObject* func,
|
| + const NPVariant* args,
|
| + uint32_t argCount,
|
| + NPVariant* result);
|
| +
|
| + // Posts a task on the main NP thread.
|
| + void PostTaskToNPThread(const tracked_objects::Location& from_here,
|
| + Task* task);
|
| +
|
| + // Utility function for PostTaskToNPThread.
|
| + static void NPTaskSpringboard(void* task);
|
| +
|
| + // Set an exception for the current call.
|
| + void SetException(const std::string& exception_string);
|
| +
|
| + NPP plugin_;
|
| + NPObject* parent_;
|
| + int state_;
|
| + std::string access_code_;
|
| + NPObject* log_debug_info_func_;
|
| + NPObject* on_state_changed_func_;
|
| + base::PlatformThreadId np_thread_id_;
|
| +
|
| + scoped_ptr<RegisterSupportHostRequest> register_request_;
|
| + scoped_refptr<ChromotingHost> host_;
|
| + scoped_refptr<MutableHostConfig> host_config_;
|
| + ChromotingHostContext host_context_;
|
| + int failed_login_attempts_;
|
| +
|
| + base::WaitableEvent disconnected_event_;
|
| + base::CancellationFlag destructing_;
|
| +};
|
| +
|
| +} // namespace remoting
|
| +
|
| +DISABLE_RUNNABLE_METHOD_REFCOUNT(remoting::HostNPScriptObject);
|
| +
|
| +#endif // REMOTING_HOST_HOST_SCRIPT_OBJECT_H_
|
|
|