Chromecast Android shell improvements:
* Handling RenderProcessGone in CastWindowAndroid
* Using CastBrowserProcess instead of passing the browser context
* A few style nits

R=byungchul@chromium.org,lcwu@chromium.org
BUG=None

Review URL: https://codereview.chromium.org/566963003

Cr-Commit-Position: refs/heads/master@{#295210}
diff --git a/chromecast/android/cast_jni_registrar.cc b/chromecast/android/cast_jni_registrar.cc
index db79061..e8bae63 100644
--- a/chromecast/android/cast_jni_registrar.cc
+++ b/chromecast/android/cast_jni_registrar.cc
@@ -6,7 +6,6 @@
 
 #include "base/android/jni_android.h"
 #include "base/android/jni_registrar.h"
-#include "chromecast/android/chromecast_config_android.h"
 #include "chromecast/shell/browser/android/cast_window_android.h"
 #include "chromecast/shell/browser/android/cast_window_manager.h"
 
diff --git a/chromecast/service/cast_service_android.cc b/chromecast/service/cast_service_android.cc
index afaab64..07fdb5a 100644
--- a/chromecast/service/cast_service_android.cc
+++ b/chromecast/service/cast_service_android.cc
@@ -6,7 +6,6 @@
 
 #include "base/callback.h"
 #include "chromecast/android/chromecast_config_android.h"
-#include "chromecast/shell/browser/android/cast_window_manager.h"
 
 namespace chromecast {
 
@@ -17,7 +16,6 @@
 
 CastServiceAndroid::CastServiceAndroid(content::BrowserContext* browser_context)
     : CastService(browser_context) {
-  shell::SetBrowserContextAndroid(browser_context);
 }
 
 CastServiceAndroid::~CastServiceAndroid() {
diff --git a/chromecast/shell/app/cast_main_delegate.cc b/chromecast/shell/app/cast_main_delegate.cc
index f713f5b..719cc2b 100644
--- a/chromecast/shell/app/cast_main_delegate.cc
+++ b/chromecast/shell/app/cast_main_delegate.cc
@@ -93,7 +93,7 @@
         base::File(pak_fd), ui::SCALE_FACTOR_100P);
     return;
   }
-#endif
+#endif  // defined(OS_ANDROID)
 
   resource_delegate_.reset(new CastResourceDelegate());
   // TODO(gunsch): Use LOAD_COMMON_RESOURCES once ResourceBundle no longer
diff --git a/chromecast/shell/browser/android/cast_window_android.cc b/chromecast/shell/browser/android/cast_window_android.cc
index 65380b147..4bf98c2 100644
--- a/chromecast/shell/browser/android/cast_window_android.cc
+++ b/chromecast/shell/browser/android/cast_window_android.cc
@@ -126,5 +126,10 @@
   contents->GetRenderViewHost()->Blur();
 }
 
+void CastWindowAndroid::RenderProcessGone(base::TerminationStatus status) {
+  LOG(ERROR) << "Render process gone: status=" << status;
+  Close();
+}
+
 }  // namespace shell
 }  // namespace chromecast
diff --git a/chromecast/shell/browser/android/cast_window_android.h b/chromecast/shell/browser/android/cast_window_android.h
index 979aea9..512e5e8 100644
--- a/chromecast/shell/browser/android/cast_window_android.h
+++ b/chromecast/shell/browser/android/cast_window_android.h
@@ -50,7 +50,7 @@
   // Registers the JNI methods for CastWindowAndroid.
   static bool RegisterJni(JNIEnv* env);
 
-  // WebContentsDelegate implementation.
+  // content::WebContentsDelegate implementation:
   virtual void AddNewContents(content::WebContents* source,
                               content::WebContents* new_contents,
                               WindowOpenDisposition disposition,
@@ -67,6 +67,9 @@
   virtual void ActivateContents(content::WebContents* contents) OVERRIDE;
   virtual void DeactivateContents(content::WebContents* contents) OVERRIDE;
 
+  // content::WebContentsObserver implementation:
+  virtual void RenderProcessGone(base::TerminationStatus status) OVERRIDE;
+
  private:
   explicit CastWindowAndroid(content::WebContents* web_contents);
 
diff --git a/chromecast/shell/browser/android/cast_window_manager.cc b/chromecast/shell/browser/android/cast_window_manager.cc
index daa18af3..8f485d54 100644
--- a/chromecast/shell/browser/android/cast_window_manager.cc
+++ b/chromecast/shell/browser/android/cast_window_manager.cc
@@ -16,6 +16,7 @@
 #include "chromecast/shell/browser/android/cast_window_android.h"
 #include "chromecast/shell/browser/cast_browser_context.h"
 #include "chromecast/shell/browser/cast_browser_main_parts.h"
+#include "chromecast/shell/browser/cast_browser_process.h"
 #include "chromecast/shell/browser/cast_content_browser_client.h"
 #include "content/public/browser/browser_thread.h"
 #include "content/public/browser/web_contents.h"
@@ -25,20 +26,14 @@
 
 namespace {
 
-base::LazyInstance<base::android::ScopedJavaGlobalRef<jobject>>
+base::LazyInstance<base::android::ScopedJavaGlobalRef<jobject> >
     g_window_manager = LAZY_INSTANCE_INITIALIZER;
 
-content::BrowserContext* g_browser_context = NULL;
-
 }  // namespace
 
 namespace chromecast {
 namespace shell {
 
-void SetBrowserContextAndroid(content::BrowserContext* browser_context) {
-  g_browser_context = browser_context;
-}
-
 base::android::ScopedJavaLocalRef<jobject>
 CreateCastWindowView(CastWindowAndroid* shell) {
   JNIEnv* env = base::android::AttachCurrentThread();
@@ -63,10 +58,11 @@
 }
 
 jlong LaunchCastWindow(JNIEnv* env, jclass clazz, jstring jurl) {
-  DCHECK(g_browser_context);
   GURL url(base::android::ConvertJavaStringToUTF8(env, jurl));
   return reinterpret_cast<jlong>(
-      CastWindowAndroid::CreateNewWindow(g_browser_context, url));
+      CastWindowAndroid::CreateNewWindow(
+          CastBrowserProcess::GetInstance()->browser_context(),
+          url));
 }
 
 void StopCastWindow(JNIEnv* env, jclass clazz, jlong nativeCastWindow) {
diff --git a/chromecast/shell/browser/android/cast_window_manager.h b/chromecast/shell/browser/android/cast_window_manager.h
index 9a811a91..a7c2e0a 100644
--- a/chromecast/shell/browser/android/cast_window_manager.h
+++ b/chromecast/shell/browser/android/cast_window_manager.h
@@ -19,10 +19,6 @@
 namespace chromecast {
 namespace shell {
 
-// Sets the browser context to use for creating windows. Must be invoked before
-// a LaunchCastWindow call.
-void SetBrowserContextAndroid(content::BrowserContext* browser_context);
-
 // Given a CastWindowAndroid instance, creates and returns a Java wrapper.
 base::android::ScopedJavaLocalRef<jobject>
 CreateCastWindowView(CastWindowAndroid* shell);