Home | History | Annotate | Download | only in web_contents_delegate_android
      1 // Copyright (c) 2012 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 COMPONENTS_WEB_CONTENTS_DELEGATE_ANDROID_WEB_CONTENTS_DELEGATE_ANDROID_H_
      6 #define COMPONENTS_WEB_CONTENTS_DELEGATE_ANDROID_WEB_CONTENTS_DELEGATE_ANDROID_H_
      7 
      8 #include "base/android/jni_weak_ref.h"
      9 #include "base/android/scoped_java_ref.h"
     10 #include "base/compiler_specific.h"
     11 #include "base/memory/scoped_ptr.h"
     12 #include "content/public/browser/web_contents_delegate.h"
     13 
     14 class GURL;
     15 
     16 namespace content {
     17 class WebContents;
     18 class WebContentsDelegate;
     19 struct NativeWebKeyboardEvent;
     20 struct OpenURLParams;
     21 }
     22 
     23 namespace web_contents_delegate_android {
     24 
     25 class ValidationMessageBubbleAndroid;
     26 
     27 enum WebContentsDelegateLogLevel {
     28   // Equivalent of WebCore::WebConsoleMessage::LevelDebug.
     29   WEB_CONTENTS_DELEGATE_LOG_LEVEL_DEBUG = 0,
     30   // Equivalent of WebCore::WebConsoleMessage::LevelLog.
     31   WEB_CONTENTS_DELEGATE_LOG_LEVEL_LOG = 1,
     32   // Equivalent of WebCore::WebConsoleMessage::LevelWarning.
     33   WEB_CONTENTS_DELEGATE_LOG_LEVEL_WARNING = 2,
     34   // Equivalent of WebCore::WebConsoleMessage::LevelError.
     35   WEB_CONTENTS_DELEGATE_LOG_LEVEL_ERROR = 3,
     36 };
     37 
     38 
     39 // Native underpinnings of WebContentsDelegateAndroid.java. Provides a default
     40 // delegate for WebContents to forward calls to the java peer. The embedding
     41 // application may subclass and override methods on either the C++ or Java side
     42 // as required.
     43 class WebContentsDelegateAndroid : public content::WebContentsDelegate {
     44  public:
     45   WebContentsDelegateAndroid(JNIEnv* env, jobject obj);
     46   virtual ~WebContentsDelegateAndroid();
     47 
     48   // Binds this WebContentsDelegateAndroid to the passed WebContents instance,
     49   // such that when that WebContents is destroyed, this
     50   // WebContentsDelegateAndroid instance will be destroyed too.
     51   void SetOwnerWebContents(content::WebContents* contents);
     52 
     53   // Overridden from WebContentsDelegate:
     54   virtual content::WebContents* OpenURLFromTab(
     55       content::WebContents* source,
     56       const content::OpenURLParams& params) OVERRIDE;
     57   virtual content::ColorChooser* OpenColorChooser(
     58       content::WebContents* source,
     59       SkColor color,
     60       const std::vector<content::ColorSuggestion>& suggestions) OVERRIDE;
     61   virtual void NavigationStateChanged(const content::WebContents* source,
     62                                       unsigned changed_flags) OVERRIDE;
     63   virtual void VisibleSSLStateChanged(
     64       const content::WebContents* source) OVERRIDE;
     65   virtual void ActivateContents(content::WebContents* contents) OVERRIDE;
     66   virtual void DeactivateContents(content::WebContents* contents) OVERRIDE;
     67   virtual void LoadingStateChanged(content::WebContents* source,
     68                                    bool to_different_document) OVERRIDE;
     69   virtual void LoadProgressChanged(content::WebContents* source,
     70                                    double load_progress) OVERRIDE;
     71   virtual void RendererUnresponsive(content::WebContents* source) OVERRIDE;
     72   virtual void RendererResponsive(content::WebContents* source) OVERRIDE;
     73   virtual void CloseContents(content::WebContents* source) OVERRIDE;
     74   virtual void MoveContents(content::WebContents* source,
     75                             const gfx::Rect& pos) OVERRIDE;
     76   virtual bool AddMessageToConsole(content::WebContents* source,
     77                                    int32 level,
     78                                    const base::string16& message,
     79                                    int32 line_no,
     80                                    const base::string16& source_id) OVERRIDE;
     81   virtual void UpdateTargetURL(content::WebContents* source,
     82                                int32 page_id,
     83                                const GURL& url) OVERRIDE;
     84   virtual void HandleKeyboardEvent(
     85       content::WebContents* source,
     86       const content::NativeWebKeyboardEvent& event) OVERRIDE;
     87   virtual bool TakeFocus(content::WebContents* source, bool reverse) OVERRIDE;
     88   virtual void ShowRepostFormWarningDialog(
     89       content::WebContents* source) OVERRIDE;
     90   virtual void ToggleFullscreenModeForTab(content::WebContents* web_contents,
     91                                           bool enter_fullscreen) OVERRIDE;
     92   virtual bool IsFullscreenForTabOrPending(
     93       const content::WebContents* web_contents) const OVERRIDE;
     94   virtual void ShowValidationMessage(content::WebContents* web_contents,
     95                                      const gfx::Rect& anchor_in_root_view,
     96                                      const base::string16& main_text,
     97                                      const base::string16& sub_text) OVERRIDE;
     98   virtual void HideValidationMessage(
     99       content::WebContents* web_contents) OVERRIDE;
    100   virtual void MoveValidationMessage(
    101       content::WebContents* web_contents,
    102       const gfx::Rect& anchor_in_root_view) OVERRIDE;
    103 
    104  protected:
    105   base::android::ScopedJavaLocalRef<jobject> GetJavaDelegate(JNIEnv* env) const;
    106 
    107  private:
    108   // We depend on the java side user of WebContentDelegateAndroid to hold a
    109   // strong reference to that object as long as they want to receive callbacks
    110   // on it. Using a weak ref here allows it to be correctly GCed.
    111   JavaObjectWeakGlobalRef weak_java_delegate_;
    112 
    113   scoped_ptr<ValidationMessageBubbleAndroid> validation_message_bubble_;
    114 };
    115 
    116 bool RegisterWebContentsDelegateAndroid(JNIEnv* env);
    117 
    118 }  // namespace web_contents_delegate_android
    119 
    120 #endif  // COMPONENTS_WEB_CONTENTS_DELEGATE_ANDROID_WEB_CONTENTS_DELEGATE_ANDROID_H_
    121