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