web_contents_android.h revision 6e8cce623b6e4fe0c9e4af605d675dd9d0338c38
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 PauseVideo(); 68 void AddStyleSheetByURL( 69 JNIEnv* env, jobject obj, jstring url); 70 void ShowInterstitialPage( 71 JNIEnv* env, jobject obj, jstring jurl, jlong delegate_ptr); 72 jboolean IsShowingInterstitialPage(JNIEnv* env, jobject obj); 73 jboolean IsRenderWidgetHostViewReady(JNIEnv* env, jobject obj); 74 void ExitFullscreen(JNIEnv* env, jobject obj); 75 void UpdateTopControlsState( 76 JNIEnv* env, 77 jobject obj, 78 bool enable_hiding, 79 bool enable_showing, 80 bool animate); 81 void ShowImeIfNeeded(JNIEnv* env, jobject obj); 82 void ScrollFocusedEditableNodeIntoView(JNIEnv* env, jobject obj); 83 void SelectWordAroundCaret(JNIEnv* env, jobject obj); 84 85 void InsertCSS(JNIEnv* env, jobject jobj, jstring jcss); 86 void EvaluateJavaScript(JNIEnv* env, 87 jobject obj, 88 jstring script, 89 jobject callback, 90 jboolean start_renderer); 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