12a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// Copyright (c) 2013 The Chromium Authors. All rights reserved.
22a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be
32a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// found in the LICENSE file.
42a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
52a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#ifndef ANDROID_WEBVIEW_NATIVE_AW_SETTINGS_H_
62a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#define ANDROID_WEBVIEW_NATIVE_AW_SETTINGS_H_
72a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
82a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include <jni.h>
92a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
100529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch#include "base/android/jni_weak_ref.h"
112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "base/android/scoped_java_ref.h"
12c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "base/memory/scoped_ptr.h"
132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "content/public/browser/web_contents_observer.h"
142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
15116680a4aac90f2aa7413d9095a592090648e557Ben Murdochnamespace content{
164e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)struct WebPreferences;
17116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch}
184e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)
192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)namespace android_webview {
202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)class AwRenderViewHostExt;
222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
232a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)class AwSettings : public content::WebContentsObserver {
242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) public:
254e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  static AwSettings* FromWebContents(content::WebContents* web_contents);
264e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)
27a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)  AwSettings(JNIEnv* env, jobject obj, jlong web_contents);
282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  virtual ~AwSettings();
292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
30b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)  // Called from Java. Methods with "Locked" suffix require that the settings
31b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)  // access lock is held during their execution.
322a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  void Destroy(JNIEnv* env, jobject obj);
335d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  void PopulateWebPreferencesLocked(JNIEnv* env, jobject obj, jlong web_prefs);
342a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  void ResetScrollAndScaleState(JNIEnv* env, jobject obj);
35b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)  void UpdateEverythingLocked(JNIEnv* env, jobject obj);
36b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)  void UpdateInitialPageScaleLocked(JNIEnv* env, jobject obj);
37b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)  void UpdateUserAgentLocked(JNIEnv* env, jobject obj);
38b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)  void UpdateWebkitPreferencesLocked(JNIEnv* env, jobject obj);
3990dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)  void UpdateFormDataPreferencesLocked(JNIEnv* env, jobject obj);
405c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu  void UpdateRendererPreferencesLocked(JNIEnv* env, jobject obj);
412a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
42116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  void PopulateWebPreferences(content::WebPreferences* web_prefs);
434e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)
442a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) private:
452a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  AwRenderViewHostExt* GetAwRenderViewHostExt();
46c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  void UpdateEverything();
472a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
482a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // WebContentsObserver overrides:
492a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  virtual void RenderViewCreated(
502a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      content::RenderViewHost* render_view_host) OVERRIDE;
51010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  virtual void WebContentsDestroyed() OVERRIDE;
522a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
535c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu  bool renderer_prefs_initialized_;
545c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu
55c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  JavaObjectWeakGlobalRef aw_settings_;
562a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)};
572a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
582a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)bool RegisterAwSettings(JNIEnv* env);
592a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
602a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}  // namespace android_webview
612a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
622a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#endif  // ANDROID_WEBVIEW_NATIVE_AW_SETTINGS_H_
63