15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Copyright (c) 2012 The Chromium Authors. All rights reserved.
25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be
35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// found in the LICENSE file.
45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
52a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#ifndef COMPONENTS_WEB_CONTENTS_DELEGATE_ANDROID_WEB_CONTENTS_DELEGATE_ANDROID_H_
62a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#define COMPONENTS_WEB_CONTENTS_DELEGATE_ANDROID_WEB_CONTENTS_DELEGATE_ANDROID_H_
75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
80529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch#include "base/android/jni_weak_ref.h"
95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/android/scoped_java_ref.h"
105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/compiler_specific.h"
115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/memory/scoped_ptr.h"
125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/public/browser/web_contents_delegate.h"
132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)class GURL;
155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace content {
175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class WebContents;
182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)class WebContentsDelegate;
195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)struct NativeWebKeyboardEvent;
202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)struct OpenURLParams;
21868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)}
225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
23868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)namespace web_contents_delegate_android {
245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
255d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)class ValidationMessageBubbleAndroid;
265d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)enum WebContentsDelegateLogLevel {
282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // Equivalent of WebCore::WebConsoleMessage::LevelDebug.
292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  WEB_CONTENTS_DELEGATE_LOG_LEVEL_DEBUG = 0,
305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Equivalent of WebCore::WebConsoleMessage::LevelLog.
315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  WEB_CONTENTS_DELEGATE_LOG_LEVEL_LOG = 1,
325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Equivalent of WebCore::WebConsoleMessage::LevelWarning.
335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  WEB_CONTENTS_DELEGATE_LOG_LEVEL_WARNING = 2,
345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Equivalent of WebCore::WebConsoleMessage::LevelError.
355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  WEB_CONTENTS_DELEGATE_LOG_LEVEL_ERROR = 3,
365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)};
375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Native underpinnings of WebContentsDelegateAndroid.java. Provides a default
405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// delegate for WebContents to forward calls to the java peer. The embedding
415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// application may subclass and override methods on either the C++ or Java side
425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// as required.
435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class WebContentsDelegateAndroid : public content::WebContentsDelegate {
445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public:
455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  WebContentsDelegateAndroid(JNIEnv* env, jobject obj);
465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual ~WebContentsDelegateAndroid();
475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Binds this WebContentsDelegateAndroid to the passed WebContents instance,
495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // such that when that WebContents is destroyed, this
505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // WebContentsDelegateAndroid instance will be destroyed too.
515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  void SetOwnerWebContents(content::WebContents* contents);
525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Overridden from WebContentsDelegate:
545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual content::WebContents* OpenURLFromTab(
555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      content::WebContents* source,
565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      const content::OpenURLParams& params) OVERRIDE;
57a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)  virtual content::ColorChooser* OpenColorChooser(
58a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)      content::WebContents* source,
59a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)      SkColor color,
60a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)      const std::vector<content::ColorSuggestion>& suggestions) OVERRIDE;
616e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  virtual void NavigationStateChanged(
626e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)      const content::WebContents* source,
636e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)      content::InvalidateTypes changed_flags) OVERRIDE;
6446d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)  virtual void VisibleSSLStateChanged(
6546d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)      const content::WebContents* source) OVERRIDE;
665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual void ActivateContents(content::WebContents* contents) OVERRIDE;
675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual void DeactivateContents(content::WebContents* contents) OVERRIDE;
68effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch  virtual void LoadingStateChanged(content::WebContents* source,
69effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch                                   bool to_different_document) OVERRIDE;
705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual void LoadProgressChanged(content::WebContents* source,
715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                                   double load_progress) OVERRIDE;
72c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  virtual void RendererUnresponsive(content::WebContents* source) OVERRIDE;
73c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  virtual void RendererResponsive(content::WebContents* source) OVERRIDE;
745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual void CloseContents(content::WebContents* source) OVERRIDE;
755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual void MoveContents(content::WebContents* source,
765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                            const gfx::Rect& pos) OVERRIDE;
775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual bool AddMessageToConsole(content::WebContents* source,
785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                                   int32 level,
79c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)                                   const base::string16& message,
805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                                   int32 line_no,
81c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)                                   const base::string16& source_id) OVERRIDE;
825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual void UpdateTargetURL(content::WebContents* source,
835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                               const GURL& url) OVERRIDE;
845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual void HandleKeyboardEvent(
855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      content::WebContents* source,
865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      const content::NativeWebKeyboardEvent& event) OVERRIDE;
875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual bool TakeFocus(content::WebContents* source, bool reverse) OVERRIDE;
885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual void ShowRepostFormWarningDialog(
895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      content::WebContents* source) OVERRIDE;
902a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  virtual void ToggleFullscreenModeForTab(content::WebContents* web_contents,
912a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)                                          bool enter_fullscreen) OVERRIDE;
922a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  virtual bool IsFullscreenForTabOrPending(
932a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      const content::WebContents* web_contents) const OVERRIDE;
945d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  virtual void ShowValidationMessage(content::WebContents* web_contents,
955d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)                                     const gfx::Rect& anchor_in_root_view,
965d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)                                     const base::string16& main_text,
975d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)                                     const base::string16& sub_text) OVERRIDE;
985d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  virtual void HideValidationMessage(
995d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)      content::WebContents* web_contents) OVERRIDE;
1005d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  virtual void MoveValidationMessage(
1015d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)      content::WebContents* web_contents,
1025d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)      const gfx::Rect& anchor_in_root_view) OVERRIDE;
1032a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
1045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) protected:
1055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  base::android::ScopedJavaLocalRef<jobject> GetJavaDelegate(JNIEnv* env) const;
1065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) private:
1085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // We depend on the java side user of WebContentDelegateAndroid to hold a
1095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // strong reference to that object as long as they want to receive callbacks
1105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // on it. Using a weak ref here allows it to be correctly GCed.
1115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  JavaObjectWeakGlobalRef weak_java_delegate_;
1125d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
1135d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  scoped_ptr<ValidationMessageBubbleAndroid> validation_message_bubble_;
1145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)};
1155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)bool RegisterWebContentsDelegateAndroid(JNIEnv* env);
1175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
118868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)}  // namespace web_contents_delegate_android
1195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#endif  // COMPONENTS_WEB_CONTENTS_DELEGATE_ANDROID_WEB_CONTENTS_DELEGATE_ANDROID_H_
121