| Index: remoting/client/plugin/chromoting_instance.cc
|
| diff --git a/remoting/client/plugin/chromoting_instance.cc b/remoting/client/plugin/chromoting_instance.cc
|
| index 7eb70a90d674b892809b155d6c85decced2e0075..eec8b39512e1b89ecbf92e9ac8e1c096fe7f456e 100644
|
| --- a/remoting/client/plugin/chromoting_instance.cc
|
| +++ b/remoting/client/plugin/chromoting_instance.cc
|
| @@ -8,7 +8,6 @@
|
| #include <vector>
|
|
|
| #include "base/bind.h"
|
| -#include "base/json/json_reader.h"
|
| #include "base/logging.h"
|
| #include "base/message_loop.h"
|
| #include "base/stringprintf.h"
|
| @@ -16,9 +15,7 @@
|
| #include "base/synchronization/waitable_event.h"
|
| #include "base/task.h"
|
| #include "base/threading/thread.h"
|
| -#include "base/values.h"
|
| #include "media/base/media.h"
|
| -#include "ppapi/c/dev/ppb_query_policy_dev.h"
|
| #include "ppapi/cpp/completion_callback.h"
|
| #include "ppapi/cpp/input_event.h"
|
| #include "ppapi/cpp/rect.h"
|
| @@ -39,17 +36,6 @@
|
|
|
| namespace remoting {
|
|
|
| -namespace {
|
| -
|
| -const char kClientFirewallTraversalPolicyName[] =
|
| - "remote_access.client_firewall_traversal";
|
| -
|
| -} // namespace
|
| -
|
| -PPP_PolicyUpdate_Dev ChromotingInstance::kPolicyUpdatedInterface = {
|
| - &ChromotingInstance::PolicyUpdatedThunk,
|
| -};
|
| -
|
| // This flag blocks LOGs to the UI if we're already in the middle of logging
|
| // to the UI. This prevents a potential infinite loop if we encounter an error
|
| // while sending the log message to the UI.
|
| @@ -68,8 +54,6 @@ ChromotingInstance::ChromotingInstance(PP_Instance pp_instance)
|
| new PluginMessageLoopProxy(&plugin_thread_delegate_)),
|
| context_(plugin_message_loop_),
|
| scale_to_fit_(false),
|
| - enable_client_nat_traversal_(false),
|
| - initial_policy_received_(false),
|
| thread_proxy_(new ScopedThreadProxy(plugin_message_loop_)) {
|
| RequestInputEvents(PP_INPUTEVENT_CLASS_MOUSE | PP_INPUTEVENT_CLASS_WHEEL);
|
| RequestFilteringInputEvents(PP_INPUTEVENT_CLASS_KEYBOARD);
|
| @@ -129,8 +113,6 @@ bool ChromotingInstance::Init(uint32_t argc,
|
| // Start all the threads.
|
| context_.Start();
|
|
|
| - SubscribeToNatTraversalPolicy();
|
| -
|
| // Create the chromoting objects that don't depend on the network connection.
|
| view_.reset(new PepperView(this, &context_));
|
| view_proxy_ = new PepperViewProxy(this, view_.get(), plugin_message_loop_);
|
| @@ -146,20 +128,8 @@ bool ChromotingInstance::Init(uint32_t argc,
|
| void ChromotingInstance::Connect(const ClientConfig& config) {
|
| DCHECK(plugin_message_loop_->BelongsToCurrentThread());
|
|
|
| - // This can only happen at initialization if the Javascript connect call
|
| - // occurs before the enterprise policy is read. We are guaranteed that the
|
| - // enterprise policy is pushed at least once, we we delay the connect call.
|
| - if (!initial_policy_received_) {
|
| - VLOG(1) << "Delaying connect until initial policy is read.";
|
| - // base::Unretained() is safe here because |delayed_connect_| is
|
| - // used only with |thread_proxy_|.
|
| - delayed_connect_ = base::Bind(&ChromotingInstance::Connect,
|
| - base::Unretained(this), config);
|
| - return;
|
| - }
|
| -
|
| host_connection_.reset(new protocol::ConnectionToHost(
|
| - context_.network_message_loop(), this, enable_client_nat_traversal_));
|
| + context_.network_message_loop(), this, true));
|
|
|
| input_handler_.reset(new PepperInputHandler(&context_,
|
| host_connection_.get(),
|
| @@ -456,78 +426,4 @@ void ChromotingInstance::ReleaseAllKeys() {
|
| input_handler_->ReleaseAllKeys();
|
| }
|
|
|
| -// static
|
| -void ChromotingInstance::PolicyUpdatedThunk(PP_Instance pp_instance,
|
| - PP_Var pp_policy_json) {
|
| - ChromotingInstance* instance = static_cast<ChromotingInstance*>(
|
| - pp::Module::Get()->InstanceForPPInstance(pp_instance));
|
| - std::string policy_json =
|
| - pp::Var(pp::Var::DontManage(), pp_policy_json).AsString();
|
| - instance->HandlePolicyUpdate(policy_json);
|
| -}
|
| -
|
| -void ChromotingInstance::SubscribeToNatTraversalPolicy() {
|
| - pp::Module::Get()->AddPluginInterface(PPP_POLICYUPDATE_DEV_INTERFACE,
|
| - &kPolicyUpdatedInterface);
|
| - const PPB_QueryPolicy_Dev* query_policy_interface =
|
| - static_cast<PPB_QueryPolicy_Dev const*>(
|
| - pp::Module::Get()->GetBrowserInterface(
|
| - PPB_QUERYPOLICY_DEV_INTERFACE));
|
| - query_policy_interface->SubscribeToPolicyUpdates(pp_instance());
|
| -}
|
| -
|
| -bool ChromotingInstance::IsNatTraversalAllowed(
|
| - const std::string& policy_json) {
|
| - int error_code = base::JSONReader::JSON_NO_ERROR;
|
| - std::string error_message;
|
| - scoped_ptr<base::Value> policy(base::JSONReader::ReadAndReturnError(
|
| - policy_json, true, &error_code, &error_message));
|
| -
|
| - if (!policy.get()) {
|
| - LOG(ERROR) << "Error " << error_code << " parsing policy: "
|
| - << error_message << ".";
|
| - return false;
|
| - }
|
| -
|
| - if (!policy->IsType(base::Value::TYPE_DICTIONARY)) {
|
| - LOG(ERROR) << "Policy must be a dictionary";
|
| - return false;
|
| - }
|
| -
|
| - base::DictionaryValue* dictionary =
|
| - static_cast<base::DictionaryValue*>(policy.get());
|
| - bool traversal_policy = false;
|
| - if (!dictionary->GetBoolean(kClientFirewallTraversalPolicyName,
|
| - &traversal_policy)) {
|
| - // Disable NAT traversal on any failure of reading the policy.
|
| - return false;
|
| - }
|
| -
|
| - return traversal_policy;
|
| -}
|
| -
|
| -void ChromotingInstance::HandlePolicyUpdate(const std::string policy_json) {
|
| - DCHECK(plugin_message_loop_->BelongsToCurrentThread());
|
| - bool traversal_policy = IsNatTraversalAllowed(policy_json);
|
| -
|
| - // If the policy changes from traversal allowed, to traversal denied, we
|
| - // need to immediately drop all connections and redo the conneciton
|
| - // preparation.
|
| - if (traversal_policy == false &&
|
| - traversal_policy != enable_client_nat_traversal_) {
|
| - if (client_.get()) {
|
| - // This will delete the client and network related objects.
|
| - Disconnect();
|
| - }
|
| - }
|
| -
|
| - initial_policy_received_ = true;
|
| - enable_client_nat_traversal_ = traversal_policy;
|
| -
|
| - if (!delayed_connect_.is_null()) {
|
| - thread_proxy_->PostTask(FROM_HERE, delayed_connect_);
|
| - delayed_connect_.Reset();
|
| - }
|
| -}
|
| -
|
| } // namespace remoting
|
|
|