cast_window_manager.cc revision 1320f92c476a1ad9d19dba2a48c72b75566198e9
18a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com// Copyright 2014 The Chromium Authors. All rights reserved. 2ec3ed6a5ebf6f2c406d7bcf94b6bc34fcaeb976eepoger@google.com// Use of this source code is governed by a BSD-style license that can be 38a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com// found in the LICENSE file. 4ec3ed6a5ebf6f2c406d7bcf94b6bc34fcaeb976eepoger@google.com 5ec3ed6a5ebf6f2c406d7bcf94b6bc34fcaeb976eepoger@google.com#include "chromecast/shell/browser/android/cast_window_manager.h" 68a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com 78a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com#include <jni.h> 88a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com 98a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com#include "base/android/jni_android.h" 108a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com#include "base/android/jni_string.h" 118a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com#include "base/android/scoped_java_ref.h" 128a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com#include "base/bind.h" 138a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com#include "base/lazy_instance.h" 148a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com#include "chromecast/common/chromecast_config.h" 158c3ff17e2cab6f7c798b9f8ff4515c4a3d3fd9d1bsalomon@google.com#include "chromecast/common/pref_names.h" 168a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com#include "chromecast/shell/browser/android/cast_window_android.h" 178a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com#include "chromecast/shell/browser/cast_browser_context.h" 188a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com#include "chromecast/shell/browser/cast_browser_main_parts.h" 198a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com#include "chromecast/shell/browser/cast_browser_process.h" 208a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com#include "chromecast/shell/browser/cast_content_browser_client.h" 218a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com#include "content/public/browser/browser_thread.h" 228a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com#include "content/public/browser/web_contents.h" 238a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com#include "ipc/ipc_channel.h" 248a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com#include "jni/CastWindowManager_jni.h" 258a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com#include "url/gurl.h" 26038aff623d9fd47946cd31685f74cf473f7c84f0senorblanco@chromium.org 27038aff623d9fd47946cd31685f74cf473f7c84f0senorblanco@chromium.orgnamespace { 28038aff623d9fd47946cd31685f74cf473f7c84f0senorblanco@chromium.org 294868e6b221a4a98e40f977851af5fcf09631ea15senorblanco@chromium.orgbase::LazyInstance<base::android::ScopedJavaGlobalRef<jobject> > 304868e6b221a4a98e40f977851af5fcf09631ea15senorblanco@chromium.org g_window_manager = LAZY_INSTANCE_INITIALIZER; 314868e6b221a4a98e40f977851af5fcf09631ea15senorblanco@chromium.org 32038aff623d9fd47946cd31685f74cf473f7c84f0senorblanco@chromium.org} // namespace 3391f489a65d436d36c7fe580af2775cd0cd13c8d2senorblanco@chromium.org 34038aff623d9fd47946cd31685f74cf473f7c84f0senorblanco@chromium.orgnamespace chromecast { 35038aff623d9fd47946cd31685f74cf473f7c84f0senorblanco@chromium.orgnamespace shell { 367ce661d19c5cf4484305a1b20c44bd111f129847robertphillips@google.com 377ce661d19c5cf4484305a1b20c44bd111f129847robertphillips@google.combase::android::ScopedJavaLocalRef<jobject> 387ce661d19c5cf4484305a1b20c44bd111f129847robertphillips@google.comCreateCastWindowView(CastWindowAndroid* shell) { 397ce661d19c5cf4484305a1b20c44bd111f129847robertphillips@google.com JNIEnv* env = base::android::AttachCurrentThread(); 407ce661d19c5cf4484305a1b20c44bd111f129847robertphillips@google.com jobject j_window_manager = g_window_manager.Get().obj(); 417ce661d19c5cf4484305a1b20c44bd111f129847robertphillips@google.com return Java_CastWindowManager_createCastWindow(env, j_window_manager); 428a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com} 438a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com 447ce661d19c5cf4484305a1b20c44bd111f129847robertphillips@google.comvoid CloseCastWindowView(jobject shell_wrapper) { 45038aff623d9fd47946cd31685f74cf473f7c84f0senorblanco@chromium.org JNIEnv* env = base::android::AttachCurrentThread(); 468a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com jobject j_window_manager = g_window_manager.Get().obj(); 478a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com Java_CastWindowManager_closeCastWindow(env, j_window_manager, shell_wrapper); 487ce661d19c5cf4484305a1b20c44bd111f129847robertphillips@google.com} 49038aff623d9fd47946cd31685f74cf473f7c84f0senorblanco@chromium.org 508a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com// Register native methods 518a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.combool RegisterCastWindowManager(JNIEnv* env) { 527ce661d19c5cf4484305a1b20c44bd111f129847robertphillips@google.com return RegisterNativesImpl(env); 537ce661d19c5cf4484305a1b20c44bd111f129847robertphillips@google.com} 548a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com 558a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.comvoid Init(JNIEnv* env, jclass clazz, jobject obj) { 568a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com g_window_manager.Get().Reset( 578a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com base::android::ScopedJavaLocalRef<jobject>(env, obj)); 588a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com} 597ce661d19c5cf4484305a1b20c44bd111f129847robertphillips@google.com 607ce661d19c5cf4484305a1b20c44bd111f129847robertphillips@google.comjlong LaunchCastWindow(JNIEnv* env, jclass clazz, jstring jurl) { 617ce661d19c5cf4484305a1b20c44bd111f129847robertphillips@google.com GURL url(base::android::ConvertJavaStringToUTF8(env, jurl)); 627ce661d19c5cf4484305a1b20c44bd111f129847robertphillips@google.com return reinterpret_cast<jlong>( 637ce661d19c5cf4484305a1b20c44bd111f129847robertphillips@google.com CastWindowAndroid::CreateNewWindow( 647ce661d19c5cf4484305a1b20c44bd111f129847robertphillips@google.com CastBrowserProcess::GetInstance()->browser_context(), 657ce661d19c5cf4484305a1b20c44bd111f129847robertphillips@google.com url)); 668a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com} 67a2ca41e3afdd8fad5e0e924dec029f33918e0a67djsollen@google.com 687ce661d19c5cf4484305a1b20c44bd111f129847robertphillips@google.comvoid StopCastWindow(JNIEnv* env, jclass clazz, 698a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com jlong nativeCastWindow, jboolean gracefully) { 708a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com CastWindowAndroid* window = 718a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com reinterpret_cast<CastWindowAndroid*>(nativeCastWindow); 728a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com DCHECK(window); 738a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com if (gracefully) 74 window->Close(); 75 else 76 window->Destroy(); 77} 78 79void EnableDevTools(JNIEnv* env, jclass clazz, jboolean enable) { 80 DCHECK_CURRENTLY_ON(content::BrowserThread::UI); 81 // The specific port value doesn't matter since Android uses Unix domain 82 // sockets, only whether or not it is zero. 83 chromecast::ChromecastConfig::GetInstance()->pref_service()-> 84 SetInteger(prefs::kRemoteDebuggingPort, enable ? 1 : 0); 85} 86 87} // namespace shell 88} // namespace chromecast 89