Index: remoting/client/plugin/chromoting_plugin.cc |
=================================================================== |
--- remoting/client/plugin/chromoting_plugin.cc (revision 52921) |
+++ remoting/client/plugin/chromoting_plugin.cc (working copy) |
@@ -10,18 +10,18 @@ |
#include "base/message_loop.h" |
#include "base/string_util.h" |
#include "base/thread.h" |
+#include "remoting/client/client_config.h" |
+#include "remoting/client/client_util.h" |
#include "remoting/client/chromoting_client.h" |
#include "remoting/client/host_connection.h" |
#include "remoting/client/jingle_host_connection.h" |
+#include "remoting/client/plugin/pepper_input_handler.h" |
#include "remoting/client/plugin/pepper_view.h" |
#include "remoting/jingle_glue/jingle_thread.h" |
#include "third_party/ppapi/c/pp_event.h" |
#include "third_party/ppapi/c/pp_rect.h" |
#include "third_party/ppapi/cpp/completion_callback.h" |
-using std::string; |
-using std::vector; |
- |
namespace remoting { |
const char* ChromotingPlugin::kMimeType = "pepper-application/x-chromoting"; |
@@ -32,18 +32,17 @@ |
} |
ChromotingPlugin::~ChromotingPlugin() { |
- if (host_connection_.get()) |
- host_connection_->Disconnect(); |
+ if (client_.get()) { |
+ client_->Stop(); |
+ } |
// TODO(ajwong): We need to ensure all objects have actually stopped posting |
// to the message loop before this point. Right now, we don't have a well |
// defined stop for the plugin process, and the thread shutdown is likely a |
// race condition. |
- if (network_thread_.get()) |
- network_thread_->Stop(); |
- |
- if (main_thread_.get()) |
- main_thread_->Stop(); |
+ if (context_.get()) { |
+ context_->Stop(); |
+ } |
} |
bool ChromotingPlugin::Init(uint32_t argc, |
@@ -77,34 +76,29 @@ |
return false; |
} |
- string user_id; |
- string auth_token; |
- string host_jid; |
- if (!ParseUrl(url, &user_id, &auth_token, &host_jid)) { |
+ ClientConfig config; |
+ if (!GetLoginInfoFromUrlParams(url, &config)) { |
LOG(WARNING) << "Could not parse URL: " << url; |
return false; |
} |
- // Start the threads. |
- main_thread_.reset(new base::Thread("ChromoClientMain")); |
- if (!main_thread_->Start()) { |
- LOG(ERROR) << "Main thread failed to start."; |
- return false; |
- } |
- network_thread_.reset(new JingleThread()); |
- network_thread_->Start(); |
- |
- // Create the chromting objects. |
- host_connection_.reset(new JingleHostConnection(network_thread_.get())); |
+ // Create the chromoting objects. |
+ host_connection_.reset(new JingleHostConnection(context_.get())); |
view_.reset(new PepperView(this)); |
- client_.reset(new ChromotingClient(main_thread_->message_loop(), |
- host_connection_.get(), view_.get())); |
+ input_handler_.reset(new PepperInputHandler()); |
+ client_.reset(new ChromotingClient(&config, |
+ context_.get(), |
+ host_connection_.get(), |
+ view_.get(), |
+ input_handler_.get(), |
+ NULL)); |
// Default to a medium grey. |
view_->SetSolidFill(0xFFCDCDCD); |
// Kick off the connection. |
- host_connection_->Connect(user_id, auth_token, host_jid, client_.get()); |
+ context_->Start(); |
+ client_->Start(); |
return true; |
} |
@@ -153,41 +147,4 @@ |
return false; |
} |
-bool ChromotingPlugin::ParseUrl(const std::string& url, |
- string* user_id, |
- string* auth_token, |
- string* host_jid) { |
- // TODO(ajwong): We should use GURL or something. Don't parse this by hand! |
- |
- // The Url should be of the form: |
- // |
- // chromotocol://<hostid>?user=<userid>&auth=<authtoken>&jid=<hostjid> |
- // |
- vector<string> parts; |
- SplitString(url, '&', &parts); |
- if (parts.size() != 3) { |
- return false; |
- } |
- |
- size_t pos = parts[0].rfind('='); |
- if (pos == string::npos && (pos + 1) != string::npos) { |
- return false; |
- } |
- user_id->assign(parts[0].substr(pos + 1)); |
- |
- pos = parts[1].rfind('='); |
- if (pos == string::npos && (pos + 1) != string::npos) { |
- return false; |
- } |
- auth_token->assign(parts[1].substr(pos + 1)); |
- |
- pos = parts[2].rfind('='); |
- if (pos == string::npos && (pos + 1) != string::npos) { |
- return false; |
- } |
- host_jid->assign(parts[2].substr(pos + 1)); |
- |
- return true; |
-} |
- |
} // namespace remoting |