| Index: chrome/browser/android/dev_tools_server.cc
|
| diff --git a/chrome/browser/android/dev_tools_server.cc b/chrome/browser/android/dev_tools_server.cc
|
| deleted file mode 100644
|
| index 501cf8006121aea4c30400e35283cd559c59e826..0000000000000000000000000000000000000000
|
| --- a/chrome/browser/android/dev_tools_server.cc
|
| +++ /dev/null
|
| @@ -1,235 +0,0 @@
|
| -// Copyright (c) 2012 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.
|
| -
|
| -#include "chrome/browser/android/dev_tools_server.h"
|
| -
|
| -#include <pwd.h>
|
| -#include <cstring>
|
| -#include <utility>
|
| -
|
| -#include "base/android/context_utils.h"
|
| -#include "base/android/jni_string.h"
|
| -#include "base/bind.h"
|
| -#include "base/callback.h"
|
| -#include "base/command_line.h"
|
| -#include "base/compiler_specific.h"
|
| -#include "base/files/file_path.h"
|
| -#include "base/logging.h"
|
| -#include "base/macros.h"
|
| -#include "base/strings/string_number_conversions.h"
|
| -#include "base/strings/stringprintf.h"
|
| -#include "base/strings/utf_string_conversions.h"
|
| -#include "chrome/browser/android/tab_android.h"
|
| -#include "chrome/browser/browser_process.h"
|
| -#include "chrome/browser/profiles/profile_manager.h"
|
| -#include "chrome/browser/ui/android/tab_model/tab_model.h"
|
| -#include "chrome/browser/ui/android/tab_model/tab_model_list.h"
|
| -#include "chrome/common/chrome_content_client.h"
|
| -#include "chrome/grit/browser_resources.h"
|
| -#include "components/devtools_http_handler/devtools_http_handler.h"
|
| -#include "components/devtools_http_handler/devtools_http_handler_delegate.h"
|
| -#include "components/version_info/version_info.h"
|
| -#include "content/public/browser/android/devtools_auth.h"
|
| -#include "content/public/browser/browser_thread.h"
|
| -#include "content/public/browser/devtools_agent_host.h"
|
| -#include "content/public/browser/devtools_socket_factory.h"
|
| -#include "content/public/browser/favicon_status.h"
|
| -#include "content/public/browser/navigation_entry.h"
|
| -#include "content/public/browser/render_view_host.h"
|
| -#include "content/public/browser/web_contents.h"
|
| -#include "content/public/browser/web_contents_delegate.h"
|
| -#include "content/public/common/content_switches.h"
|
| -#include "content/public/common/url_constants.h"
|
| -#include "content/public/common/user_agent.h"
|
| -#include "jni/DevToolsServer_jni.h"
|
| -#include "net/base/net_errors.h"
|
| -#include "net/socket/unix_domain_server_socket_posix.h"
|
| -#include "net/url_request/url_request_context_getter.h"
|
| -#include "ui/base/resource/resource_bundle.h"
|
| -
|
| -using base::android::JavaParamRef;
|
| -using content::DevToolsAgentHost;
|
| -using content::RenderViewHost;
|
| -using content::WebContents;
|
| -using devtools_http_handler::DevToolsHttpHandler;
|
| -
|
| -namespace {
|
| -
|
| -// TL;DR: Do not change this string.
|
| -//
|
| -// Desktop Chrome relies on this format to identify debuggable apps on Android
|
| -// (see the code under chrome/browser/devtools/device).
|
| -// If this string ever changes it would not be sufficient to change the
|
| -// corresponding string on the client side. Since debugging an older version of
|
| -// Chrome for Android from a newer version of desktop Chrome is a very common
|
| -// scenario, the client code will have to be modified to recognize both the old
|
| -// and the new format.
|
| -const char kDevToolsChannelNameFormat[] = "%s_devtools_remote";
|
| -
|
| -const char kFrontEndURL[] =
|
| - "http://chrome-devtools-frontend.appspot.com/serve_rev/%s/inspector.html";
|
| -const char kTetheringSocketName[] = "chrome_devtools_tethering_%d_%d";
|
| -
|
| -const int kBackLog = 10;
|
| -
|
| -bool AuthorizeSocketAccessWithDebugPermission(
|
| - const net::UnixDomainServerSocket::Credentials& credentials) {
|
| - JNIEnv* env = base::android::AttachCurrentThread();
|
| - return Java_DevToolsServer_checkDebugPermission(
|
| - env, base::android::GetApplicationContext(),
|
| - credentials.process_id, credentials.user_id) ||
|
| - content::CanUserConnectToDevTools(credentials);
|
| -}
|
| -
|
| -// Delegate implementation for the devtools http handler on android. A new
|
| -// instance of this gets created each time devtools is enabled.
|
| -class DevToolsServerDelegate :
|
| - public devtools_http_handler::DevToolsHttpHandlerDelegate {
|
| - public:
|
| - DevToolsServerDelegate() {
|
| - }
|
| -
|
| - std::string GetDiscoveryPageHTML() override {
|
| - return ResourceBundle::GetSharedInstance().GetRawDataResource(
|
| - IDR_DEVTOOLS_DISCOVERY_PAGE_HTML).as_string();
|
| - }
|
| -
|
| - std::string GetFrontendResource(const std::string& path) override {
|
| - return std::string();
|
| - }
|
| -
|
| - private:
|
| -
|
| - DISALLOW_COPY_AND_ASSIGN(DevToolsServerDelegate);
|
| -};
|
| -
|
| -// Factory for UnixDomainServerSocket. It tries a fallback socket when
|
| -// original socket doesn't work.
|
| -class UnixDomainServerSocketFactory : public content::DevToolsSocketFactory {
|
| - public:
|
| - UnixDomainServerSocketFactory(
|
| - const std::string& socket_name,
|
| - const net::UnixDomainServerSocket::AuthCallback& auth_callback)
|
| - : socket_name_(socket_name),
|
| - last_tethering_socket_(0),
|
| - auth_callback_(auth_callback) {
|
| - }
|
| -
|
| - private:
|
| - std::unique_ptr<net::ServerSocket> CreateForHttpServer() override {
|
| - std::unique_ptr<net::UnixDomainServerSocket> socket(
|
| - new net::UnixDomainServerSocket(auth_callback_,
|
| - true /* use_abstract_namespace */));
|
| -
|
| - if (socket->BindAndListen(socket_name_, kBackLog) == net::OK)
|
| - return std::move(socket);
|
| -
|
| - // Try a fallback socket name.
|
| - const std::string fallback_address(
|
| - base::StringPrintf("%s_%d", socket_name_.c_str(), getpid()));
|
| - if (socket->BindAndListen(fallback_address, kBackLog) == net::OK)
|
| - return std::move(socket);
|
| -
|
| - return std::unique_ptr<net::ServerSocket>();
|
| - }
|
| -
|
| - std::unique_ptr<net::ServerSocket> CreateForTethering(
|
| - std::string* name) override {
|
| - *name = base::StringPrintf(
|
| - kTetheringSocketName, getpid(), ++last_tethering_socket_);
|
| - std::unique_ptr<net::UnixDomainServerSocket> socket(
|
| - new net::UnixDomainServerSocket(auth_callback_, true));
|
| - if (socket->BindAndListen(*name, kBackLog) != net::OK)
|
| - return std::unique_ptr<net::ServerSocket>();
|
| -
|
| - return std::move(socket);
|
| - }
|
| -
|
| - std::string socket_name_;
|
| - int last_tethering_socket_;
|
| - net::UnixDomainServerSocket::AuthCallback auth_callback_;
|
| -
|
| - DISALLOW_COPY_AND_ASSIGN(UnixDomainServerSocketFactory);
|
| -};
|
| -
|
| -} // namespace
|
| -
|
| -DevToolsServer::DevToolsServer(const std::string& socket_name_prefix)
|
| - : socket_name_(base::StringPrintf(kDevToolsChannelNameFormat,
|
| - socket_name_prefix.c_str())) {
|
| - // Override the socket name if one is specified on the command line.
|
| - const base::CommandLine& command_line =
|
| - *base::CommandLine::ForCurrentProcess();
|
| - if (command_line.HasSwitch(switches::kRemoteDebuggingSocketName)) {
|
| - socket_name_ = command_line.GetSwitchValueASCII(
|
| - switches::kRemoteDebuggingSocketName);
|
| - }
|
| -}
|
| -
|
| -DevToolsServer::~DevToolsServer() {
|
| - Stop();
|
| -}
|
| -
|
| -void DevToolsServer::Start(bool allow_debug_permission) {
|
| - if (devtools_http_handler_)
|
| - return;
|
| -
|
| - net::UnixDomainServerSocket::AuthCallback auth_callback =
|
| - allow_debug_permission ?
|
| - base::Bind(&AuthorizeSocketAccessWithDebugPermission) :
|
| - base::Bind(&content::CanUserConnectToDevTools);
|
| - std::unique_ptr<content::DevToolsSocketFactory> factory(
|
| - new UnixDomainServerSocketFactory(socket_name_, auth_callback));
|
| - devtools_http_handler_.reset(new DevToolsHttpHandler(
|
| - std::move(factory),
|
| - base::StringPrintf(kFrontEndURL, content::GetWebKitRevision().c_str()),
|
| - new DevToolsServerDelegate(), base::FilePath(), base::FilePath(),
|
| - version_info::GetProductNameAndVersionForUserAgent(), ::GetUserAgent()));
|
| -}
|
| -
|
| -void DevToolsServer::Stop() {
|
| - devtools_http_handler_.reset();
|
| -}
|
| -
|
| -bool DevToolsServer::IsStarted() const {
|
| - return !!devtools_http_handler_;
|
| -}
|
| -
|
| -bool RegisterDevToolsServer(JNIEnv* env) {
|
| - return RegisterNativesImpl(env);
|
| -}
|
| -
|
| -static jlong InitRemoteDebugging(
|
| - JNIEnv* env,
|
| - const JavaParamRef<jobject>& obj,
|
| - const JavaParamRef<jstring>& socket_name_prefix) {
|
| - DevToolsServer* server = new DevToolsServer(
|
| - base::android::ConvertJavaStringToUTF8(env, socket_name_prefix));
|
| - return reinterpret_cast<intptr_t>(server);
|
| -}
|
| -
|
| -static void DestroyRemoteDebugging(JNIEnv* env,
|
| - const JavaParamRef<jobject>& obj,
|
| - jlong server) {
|
| - delete reinterpret_cast<DevToolsServer*>(server);
|
| -}
|
| -
|
| -static jboolean IsRemoteDebuggingEnabled(JNIEnv* env,
|
| - const JavaParamRef<jobject>& obj,
|
| - jlong server) {
|
| - return reinterpret_cast<DevToolsServer*>(server)->IsStarted();
|
| -}
|
| -
|
| -static void SetRemoteDebuggingEnabled(JNIEnv* env,
|
| - const JavaParamRef<jobject>& obj,
|
| - jlong server,
|
| - jboolean enabled,
|
| - jboolean allow_debug_permission) {
|
| - DevToolsServer* devtools_server = reinterpret_cast<DevToolsServer*>(server);
|
| - if (enabled) {
|
| - devtools_server->Start(allow_debug_permission);
|
| - } else {
|
| - devtools_server->Stop();
|
| - }
|
| -}
|
|
|