1// Copyright (c) 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 ANDROID_WEBVIEW_NATIVE_AW_SETTINGS_H_
6#define ANDROID_WEBVIEW_NATIVE_AW_SETTINGS_H_
7
8#include <jni.h>
9
10#include "base/android/jni_weak_ref.h"
11#include "base/android/scoped_java_ref.h"
12#include "base/memory/scoped_ptr.h"
13#include "content/public/browser/web_contents_observer.h"
14
15namespace content{
16struct WebPreferences;
17}
18
19namespace android_webview {
20
21class AwRenderViewHostExt;
22
23class AwSettings : public content::WebContentsObserver {
24 public:
25  static AwSettings* FromWebContents(content::WebContents* web_contents);
26
27  AwSettings(JNIEnv* env, jobject obj, jlong web_contents);
28  virtual ~AwSettings();
29
30  // Called from Java. Methods with "Locked" suffix require that the settings
31  // access lock is held during their execution.
32  void Destroy(JNIEnv* env, jobject obj);
33  void PopulateWebPreferencesLocked(JNIEnv* env, jobject obj, jlong web_prefs);
34  void ResetScrollAndScaleState(JNIEnv* env, jobject obj);
35  void UpdateEverythingLocked(JNIEnv* env, jobject obj);
36  void UpdateInitialPageScaleLocked(JNIEnv* env, jobject obj);
37  void UpdateUserAgentLocked(JNIEnv* env, jobject obj);
38  void UpdateWebkitPreferencesLocked(JNIEnv* env, jobject obj);
39  void UpdateFormDataPreferencesLocked(JNIEnv* env, jobject obj);
40  void UpdateRendererPreferencesLocked(JNIEnv* env, jobject obj);
41
42  void PopulateWebPreferences(content::WebPreferences* web_prefs);
43
44 private:
45  AwRenderViewHostExt* GetAwRenderViewHostExt();
46  void UpdateEverything();
47
48  // WebContentsObserver overrides:
49  virtual void RenderViewCreated(
50      content::RenderViewHost* render_view_host) OVERRIDE;
51  virtual void WebContentsDestroyed() OVERRIDE;
52
53  bool renderer_prefs_initialized_;
54
55  JavaObjectWeakGlobalRef aw_settings_;
56};
57
58bool RegisterAwSettings(JNIEnv* env);
59
60}  // namespace android_webview
61
62#endif  // ANDROID_WEBVIEW_NATIVE_AW_SETTINGS_H_
63