web_contents_android.h revision 1320f92c476a1ad9d19dba2a48c72b75566198e9
1// Copyright 2013 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 CONTENT_BROWSER_WEB_CONTENTS_WEB_CONTENTS_ANDROID_H_
6#define CONTENT_BROWSER_WEB_CONTENTS_WEB_CONTENTS_ANDROID_H_
7
8#include <jni.h>
9
10#include "base/android/scoped_java_ref.h"
11#include "base/basictypes.h"
12#include "base/compiler_specific.h"
13#include "base/supports_user_data.h"
14#include "content/browser/frame_host/navigation_controller_android.h"
15#include "content/browser/renderer_host/render_widget_host_view_android.h"
16#include "content/browser/transition_request_manager.h"
17#include "content/common/content_export.h"
18
19namespace content {
20
21class WebContents;
22struct TransitionLayerData;
23
24// Android wrapper around WebContents that provides safer passage from java and
25// back to native and provides java with a means of communicating with its
26// native counterpart.
27class CONTENT_EXPORT WebContentsAndroid
28    : public base::SupportsUserData::Data {
29 public:
30  static bool Register(JNIEnv* env);
31
32  explicit WebContentsAndroid(WebContents* web_contents);
33  virtual ~WebContentsAndroid();
34
35  WebContents* web_contents() const { return web_contents_; }
36
37  base::android::ScopedJavaLocalRef<jobject> GetJavaObject();
38
39  // Methods called from Java
40  base::android::ScopedJavaLocalRef<jstring> GetTitle(JNIEnv* env,
41                                                      jobject obj) const;
42  base::android::ScopedJavaLocalRef<jstring> GetVisibleURL(JNIEnv* env,
43                                                           jobject obj) const;
44  void Stop(JNIEnv* env, jobject obj);
45  jint GetBackgroundColor(JNIEnv* env, jobject obj);
46  base::android::ScopedJavaLocalRef<jstring> GetURL(JNIEnv* env, jobject) const;
47  jboolean IsIncognito(JNIEnv* env, jobject obj);
48
49  void ResumeResponseDeferredAtStart(JNIEnv* env, jobject obj);
50  void SetHasPendingNavigationTransitionForTesting(JNIEnv* env, jobject obj);
51  void SetupTransitionView(JNIEnv* env, jobject jobj, jstring markup);
52  void BeginExitTransition(JNIEnv* env, jobject jobj, jstring css_selector);
53
54  // This method is invoked when the request is deferred immediately after
55  // receiving response headers.
56  void DidDeferAfterResponseStarted(const TransitionLayerData& transition_data);
57
58  // This method is invoked when a navigation transition is detected, to
59  // determine if the embedder intends to handle it.
60  bool WillHandleDeferAfterResponseStarted();
61
62  // This method is invoked when a navigation transition has started.
63  void DidStartNavigationTransitionForFrame(int64 frame_id);
64
65  void OnHide(JNIEnv* env, jobject obj);
66  void OnShow(JNIEnv* env, jobject obj);
67  void ReleaseMediaPlayers(JNIEnv* env, jobject jobj);
68
69  void AddStyleSheetByURL(
70      JNIEnv* env, jobject obj, jstring url);
71  void ShowInterstitialPage(
72      JNIEnv* env, jobject obj, jstring jurl, jlong delegate_ptr);
73  jboolean IsShowingInterstitialPage(JNIEnv* env, jobject obj);
74  jboolean IsRenderWidgetHostViewReady(JNIEnv* env, jobject obj);
75  void ExitFullscreen(JNIEnv* env, jobject obj);
76  void UpdateTopControlsState(
77      JNIEnv* env,
78      jobject obj,
79      bool enable_hiding,
80      bool enable_showing,
81      bool animate);
82  void ShowImeIfNeeded(JNIEnv* env, jobject obj);
83  void ScrollFocusedEditableNodeIntoView(JNIEnv* env, jobject obj);
84  void SelectWordAroundCaret(JNIEnv* env, jobject obj);
85
86  void InsertCSS(JNIEnv* env, jobject jobj, jstring jcss);
87  void EvaluateJavaScript(JNIEnv* env,
88                          jobject obj,
89                          jstring script,
90                          jobject callback);
91
92 private:
93  RenderWidgetHostViewAndroid* GetRenderWidgetHostViewAndroid();
94
95  WebContents* web_contents_;
96  NavigationControllerAndroid navigation_controller_;
97  base::android::ScopedJavaGlobalRef<jobject> obj_;
98
99  DISALLOW_COPY_AND_ASSIGN(WebContentsAndroid);
100};
101
102}  // namespace content
103
104#endif  // CONTENT_BROWSER_WEB_CONTENTS_WEB_CONTENTS_ANDROID_H_
105