Home | History | Annotate | Download | only in android
      1 // Copyright 2014 The Chromium Authors. All rights reserved.
      2 // Use of this source code is governed by a BSD-style license that can be
      3 // found in the LICENSE file.
      4 
      5 #ifndef CHROMECAST_SHELL_BROWSER_ANDROID_CAST_WINDOW_ANDROID_H_
      6 #define CHROMECAST_SHELL_BROWSER_ANDROID_CAST_WINDOW_ANDROID_H_
      7 
      8 #include <jni.h>
      9 #include <vector>
     10 
     11 #include "base/android/jni_string.h"
     12 #include "base/android/scoped_java_ref.h"
     13 #include "base/basictypes.h"
     14 #include "base/callback_forward.h"
     15 #include "base/command_line.h"
     16 #include "base/macros.h"
     17 #include "base/memory/scoped_ptr.h"
     18 #include "base/memory/weak_ptr.h"
     19 #include "build/build_config.h"
     20 #include "content/public/browser/web_contents.h"
     21 #include "content/public/browser/web_contents_delegate.h"
     22 #include "content/public/browser/web_contents_observer.h"
     23 #include "content/public/common/content_switches.h"
     24 #include "ui/gfx/native_widget_types.h"
     25 #include "ui/gfx/size.h"
     26 
     27 class GURL;
     28 
     29 namespace content {
     30 class BrowserContext;
     31 class SiteInstance;
     32 class WebContents;
     33 }  // namespace content
     34 
     35 namespace chromecast {
     36 namespace shell {
     37 
     38 class CastWindowAndroid : public content::WebContentsDelegate,
     39                           public content::WebContentsObserver {
     40  public:
     41   // Creates a new window and immediately loads the given URL.
     42   static CastWindowAndroid* CreateNewWindow(
     43       content::BrowserContext* browser_context,
     44       const GURL& url);
     45 
     46   virtual ~CastWindowAndroid();
     47 
     48   void LoadURL(const GURL& url);
     49   // Calls RVH::ClosePage() and waits for acknowledgement before closing/
     50   // deleting the window.
     51   void Close();
     52   // Destroys this window immediately.
     53   void Destroy();
     54 
     55   // Registers the JNI methods for CastWindowAndroid.
     56   static bool RegisterJni(JNIEnv* env);
     57 
     58   // content::WebContentsDelegate implementation:
     59   virtual void AddNewContents(content::WebContents* source,
     60                               content::WebContents* new_contents,
     61                               WindowOpenDisposition disposition,
     62                               const gfx::Rect& initial_pos,
     63                               bool user_gesture,
     64                               bool* was_blocked) OVERRIDE;
     65   virtual void CloseContents(content::WebContents* source) OVERRIDE;
     66   virtual bool CanOverscrollContent() const OVERRIDE;
     67   virtual bool AddMessageToConsole(content::WebContents* source,
     68                                    int32 level,
     69                                    const base::string16& message,
     70                                    int32 line_no,
     71                                    const base::string16& source_id) OVERRIDE;
     72   virtual void ActivateContents(content::WebContents* contents) OVERRIDE;
     73   virtual void DeactivateContents(content::WebContents* contents) OVERRIDE;
     74 
     75   // content::WebContentsObserver implementation:
     76   virtual void RenderProcessGone(base::TerminationStatus status) OVERRIDE;
     77 
     78  private:
     79   explicit CastWindowAndroid(content::WebContents* web_contents);
     80 
     81   // Helper to create a new CastWindowAndroid given a newly created WebContents.
     82   static CastWindowAndroid* CreateCastWindowAndroid(
     83       content::WebContents* web_contents,
     84       const gfx::Size& initial_size);
     85 
     86   base::android::ScopedJavaGlobalRef<jobject> java_object_;
     87   scoped_ptr<content::WebContents> web_contents_;
     88 
     89   base::WeakPtrFactory<CastWindowAndroid> weak_factory_;
     90 
     91   DISALLOW_COPY_AND_ASSIGN(CastWindowAndroid);
     92 };
     93 
     94 }  // namespace shell
     95 }  // namespace chromecast
     96 
     97 #endif  // CHROMECAST_SHELL_BROWSER_ANDROID_CAST_WINDOW_ANDROID_H_
     98