- add sources.
[platform/framework/web/crosswalk.git] / src / content / public / browser / host_zoom_map.h
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 CONTENT_PUBLIC_BROWSER_HOST_ZOOM_MAP_H_
6 #define CONTENT_PUBLIC_BROWSER_HOST_ZOOM_MAP_H_
7
8 #include <map>
9 #include <string>
10 #include <vector>
11
12 #include "base/basictypes.h"
13 #include "base/callback.h"
14 #include "base/callback_list.h"
15 #include "content/common/content_export.h"
16
17 namespace content {
18
19 class BrowserContext;
20 class ResourceContext;
21
22 // Maps hostnames to custom zoom levels.  Written on the UI thread and read on
23 // any thread.  One instance per browser context. Must be created on the UI
24 // thread, and it'll delete itself on the UI thread as well.
25 // Zoom can be defined at three levels: default zoom, zoom for host, and zoom
26 // for host with specific scheme. Setting any of the levels leaves settings
27 // for other settings intact. Getting the zoom level starts at the most
28 // specific setting and progresses to the less specific: first the zoom for the
29 // host and scheme pair is checked, secondly the zoom for the host only and
30 // lastly default zoom.
31
32 class HostZoomMap {
33  public:
34   // Enum that indicates what was the scope of zoom level change.
35   enum ZoomLevelChangeMode {
36     ZOOM_CHANGED_FOR_HOST,            // Zoom level changed for host.
37     ZOOM_CHANGED_FOR_SCHEME_AND_HOST, // Zoom level changed for scheme/host
38                                       // pair.
39     ZOOM_CHANGED_TEMPORARY_ZOOM,      // Temporary zoom change for specific
40                                       // renderer, no scheme/host is specified.
41   };
42
43   // Structure used to notify about zoom changes. Host and/or scheme are empty
44   // if not applicable to |mode|.
45   struct ZoomLevelChange {
46     ZoomLevelChangeMode mode;
47     std::string host;
48     std::string scheme;
49     double zoom_level;
50   };
51
52   CONTENT_EXPORT static HostZoomMap* GetForBrowserContext(
53       BrowserContext* browser_context);
54
55   // Copy the zoom levels from the given map. Can only be called on the UI
56   // thread.
57   virtual void CopyFrom(HostZoomMap* copy) = 0;
58
59   // Here |host| is the host portion of URL, or (in the absence of a host)
60   // the complete spec of the URL.
61   // Returns the zoom for the specified |scheme| and |host|. See class
62   // description for details.
63   //
64   // This may be called on any thread.
65   virtual double GetZoomLevelForHostAndScheme(
66       const std::string& scheme,
67       const std::string& host) const = 0;
68
69   // Here |host| is the host portion of URL, or (in the absence of a host)
70   // the complete spec of the URL.
71   // Sets the zoom level for the |host| to |level|.  If the level matches the
72   // current default zoom level, the host is erased from the saved preferences;
73   // otherwise the new value is written out.
74   // Zoom levels specified for both scheme and host are not affected.
75   //
76   // This should only be called on the UI thread.
77   virtual void SetZoomLevelForHost(const std::string& host, double level) = 0;
78
79   // Here |host| is the host portion of URL, or (in the absence of a host)
80   // the complete spec of the URL.
81   // Sets the zoom level for the |scheme|/|host| pair to |level|. No values
82   // will be erased during this operation, and this value will not be stored in
83   // the preferences.
84   //
85   // This should only be called on the UI thread.
86   virtual void SetZoomLevelForHostAndScheme(const std::string& scheme,
87                                             const std::string& host,
88                                             double level) = 0;
89
90   // Get/Set the default zoom level for pages that don't override it.
91   virtual double GetDefaultZoomLevel() const = 0;
92   virtual void SetDefaultZoomLevel(double level) = 0;;
93
94   typedef base::Callback<void(const ZoomLevelChange&)> ZoomLevelChangedCallback;
95   typedef base::CallbackList<void(const ZoomLevelChange&)>::Subscription
96       Subscription;
97   // Add and remove zoom level changed callbacks.
98   virtual scoped_ptr<Subscription> AddZoomLevelChangedCallback(
99       const ZoomLevelChangedCallback& callback) = 0;
100
101  protected:
102   virtual ~HostZoomMap() {}
103 };
104
105 }  // namespace content
106
107 #endif  // CONTENT_PUBLIC_BROWSER_HOST_ZOOM_MAP_H_