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