Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(313)

Unified Diff: content/browser/web_contents/web_contents_impl.cc

Issue 224733018: Changes to content/ to facilitate new zoom extension API (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 6 years, 8 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: content/browser/web_contents/web_contents_impl.cc
diff --git a/content/browser/web_contents/web_contents_impl.cc b/content/browser/web_contents/web_contents_impl.cc
index a19fcd9921d563c334e361a83b4689aad1dc658e..2cc3f4ad846d5b0cd8bf7c21fdaba052fc4d8e80 100644
--- a/content/browser/web_contents/web_contents_impl.cc
+++ b/content/browser/web_contents/web_contents_impl.cc
@@ -338,7 +338,9 @@ WebContentsImpl::WebContentsImpl(
color_chooser_identifier_(0),
render_view_message_source_(NULL),
fullscreen_widget_routing_id_(MSG_ROUTING_NONE),
- is_subframe_(false) {
+ is_subframe_(false),
+ current_zoom_mode_(kZoomModeDefault),
+ current_zoom_id_(0) {
for (size_t i = 0; i < g_created_callbacks.Get().size(); i++)
g_created_callbacks.Get().at(i).Run(this);
frame_tree_.SetFrameRemoveListener(
@@ -1986,7 +1988,14 @@ bool WebContentsImpl::GetClosedByUserGesture() const {
return closed_by_user_gesture_;
}
+content::ZoomMode WebContentsImpl::GetZoomMode() const {
+ return current_zoom_mode_;
+}
+
double WebContentsImpl::GetZoomLevel() const {
+ if (current_zoom_mode_ == kZoomModeDisabled)
+ return 0;
+
HostZoomMapImpl* zoom_map = static_cast<HostZoomMapImpl*>(
HostZoomMap::GetForBrowserContext(GetBrowserContext()));
if (!zoom_map)
@@ -2085,11 +2094,65 @@ bool WebContentsImpl::IsSubframe() const {
return is_subframe_;
}
-void WebContentsImpl::SetZoomLevel(double level) {
- Send(new ViewMsg_SetZoomLevel(GetRoutingID(), level));
+int WebContentsImpl::SetZoomLevel(double level) {
+ if (current_zoom_mode_ == kZoomModeDisabled)
+ return 0;
+
+ ++current_zoom_id_;
+
+ ZoomChangeDetails zoom_change_details;
+ zoom_change_details.old_zoom_level = GetZoomLevel();
+ zoom_change_details.new_zoom_level = level;
+ zoom_change_details.zoom_mode = current_zoom_mode_;
+ NotificationService::current()->Notify(
+ content::NOTIFICATION_WEB_CONTENTS_ZOOM_CHANGE,
+ Source<WebContents>(this),
+ content::Details<ZoomChangeDetails>(
+ &zoom_change_details));
+
+ Send(new ViewMsg_SetZoomLevel(GetRoutingID(), current_zoom_id_, level,
+ current_zoom_mode_));
BrowserPluginEmbedder* embedder = GetBrowserPluginEmbedder();
if (embedder)
embedder->SetZoomLevel(level);
+
+ return current_zoom_id_;
+}
+
+void WebContentsImpl::SetZoomMode(ZoomMode mode) {
+ if (mode == current_zoom_mode_)
+ return;
+
+ double original_zoom_level = GetZoomLevel();
+
+ if (mode == kZoomModeDefault) {
+ Send(new ViewMsg_SetZoomLevel(GetRoutingID(), 0, original_zoom_level,
+ kZoomModeDefault));
+ NotificationService::current()->Notify(
+ NOTIFICATION_WEB_CONTENTS_NO_TEMPORARY_ZOOM_LEVEL,
+ Source<WebContents>(this),
+ NotificationService::NoDetails());
+ } else if (mode == kZoomModeIsolated) {
+ if (current_zoom_mode_ != kZoomModeDisabled) {
+ Send(new ViewMsg_SetZoomLevel(GetRoutingID(), 0, original_zoom_level,
+ kZoomModeIsolated));
+ }
+ } else if (mode == kZoomModeManual) {
+ if (current_zoom_mode_ != kZoomModeDisabled) {
+ Send(new ViewMsg_SetZoomLevel(GetRoutingID(), 0, 0, kZoomModeIsolated));
+ current_zoom_mode_ = mode;
+ SetZoomLevel(original_zoom_level);
+ }
+ } else if (mode == kZoomModeDisabled) {
+ if (current_zoom_mode_ != kZoomModeManual) {
+ Send(new ViewMsg_SetZoomLevel(GetRoutingID(), 0, 0, kZoomModeIsolated));
+ }
+ } else {
+ NOTREACHED();
+ }
+
+ current_zoom_mode_ = mode;
+ temporary_zoom_settings_ = mode != kZoomModeDefault;
}
void WebContentsImpl::Find(int request_id,
@@ -2426,7 +2489,8 @@ void WebContentsImpl::OnUpdateZoomLimits(int minimum_percent,
bool remember) {
minimum_zoom_percent_ = minimum_percent;
maximum_zoom_percent_ = maximum_percent;
- temporary_zoom_settings_ = !remember;
+ temporary_zoom_settings_ = !remember ||
+ current_zoom_mode_ != kZoomModeDefault;
}
void WebContentsImpl::OnEnumerateDirectory(int request_id,
@@ -2826,6 +2890,11 @@ void WebContentsImpl::NotifyDisconnected() {
void WebContentsImpl::NotifyNavigationEntryCommitted(
const LoadCommittedDetails& load_details) {
+ if (load_details.is_navigation_to_different_page()) {
+ temporary_zoom_settings_ = false;
+ SetZoomMode(kZoomModeDefault);
+ }
+
FOR_EACH_OBSERVER(
WebContentsObserver, observers_, NavigationEntryCommitted(load_details));
}

Powered by Google App Engine
This is Rietveld 408576698