Refactor to convert vector to scoped_ptr in ZoomController.

A scoped_ptr has less overhead than a vector. This CL refactors to
store ZoomChangedEventData structs via a scoped_ptr since there will
be (at most) one of these at a time.

BUG=none

Review URL: https://codereview.chromium.org/373603007

git-svn-id: svn://svn.chromium.org/chrome/trunk/src@281726 0039d316-1c4b-4281-b951-d872f2087c98
parent f48cf698
......@@ -125,8 +125,8 @@ bool ZoomController::SetZoomLevelByExtension(
content::HostZoomMap* zoom_map =
content::HostZoomMap::GetForBrowserContext(browser_context_);
DCHECK(zoom_map);
DCHECK(event_data_.empty());
event_data_.push_back(ZoomChangedEventData(web_contents(),
DCHECK(!event_data_);
event_data_.reset(new ZoomChangedEventData(web_contents(),
GetZoomLevel(),
zoom_level,
zoom_mode_,
......@@ -149,7 +149,7 @@ bool ZoomController::SetZoomLevelByExtension(
zoom_map->SetZoomLevelForHost(host, zoom_level);
}
DCHECK(event_data_.empty());
DCHECK(!event_data_);
last_extension_ = NULL;
return true;
}
......@@ -165,13 +165,12 @@ void ZoomController::SetZoomMode(ZoomMode new_mode) {
int render_view_id = web_contents()->GetRenderViewHost()->GetRoutingID();
double original_zoom_level = GetZoomLevel();
ZoomChangedEventData zoom_change_data(web_contents(),
original_zoom_level,
original_zoom_level,
new_mode,
new_mode != ZOOM_MODE_DEFAULT);
DCHECK(event_data_.empty());
event_data_.push_back(zoom_change_data);
DCHECK(!event_data_);
event_data_.reset(new ZoomChangedEventData(web_contents(),
original_zoom_level,
original_zoom_level,
new_mode,
new_mode != ZOOM_MODE_DEFAULT));
switch (new_mode) {
case ZOOM_MODE_DEFAULT: {
......@@ -189,7 +188,7 @@ void ZoomController::SetZoomMode(ZoomMode new_mode) {
// the correct zoom level.
double origin_zoom_level =
zoom_map->GetZoomLevelForHostAndScheme(url.scheme(), host);
event_data_.back().new_zoom_level = origin_zoom_level;
event_data_->new_zoom_level = origin_zoom_level;
zoom_map->SetTemporaryZoomLevel(
render_process_id, render_view_id, origin_zoom_level);
} else {
......@@ -214,8 +213,8 @@ void ZoomController::SetZoomMode(ZoomMode new_mode) {
// When we don't call any HostZoomMap set functions, we send the event
// manually.
FOR_EACH_OBSERVER(
ZoomObserver, observers_, OnZoomChanged(event_data_.back()));
event_data_.pop_back();
ZoomObserver, observers_, OnZoomChanged(*event_data_));
event_data_.reset();
}
break;
}
......@@ -231,8 +230,8 @@ void ZoomController::SetZoomMode(ZoomMode new_mode) {
// When we don't call any HostZoomMap set functions, we send the event
// manually.
FOR_EACH_OBSERVER(
ZoomObserver, observers_, OnZoomChanged(event_data_.back()));
event_data_.pop_back();
ZoomObserver, observers_, OnZoomChanged(*event_data_));
event_data_.reset();
}
break;
}
......@@ -244,7 +243,7 @@ void ZoomController::SetZoomMode(ZoomMode new_mode) {
}
}
// Any event data we've stored should have been consumed by this point.
DCHECK(event_data_.empty());
DCHECK(!event_data_);
zoom_mode_ = new_mode;
}
......@@ -288,11 +287,11 @@ void ZoomController::UpdateStateIncludingTemporary(const std::string& host,
bool can_show_bubble =
zoom_mode_ != ZOOM_MODE_DEFAULT || (!host.empty() && !is_temporary_zoom);
if (!event_data_.empty()) {
if (event_data_) {
// For state changes initiated within the ZoomController, information about
// the change should be sent.
ZoomChangedEventData zoom_change_data = event_data_.back();
event_data_.pop_back();
ZoomChangedEventData zoom_change_data = *event_data_;
event_data_.reset();
zoom_change_data.can_show_bubble |= can_show_bubble;
FOR_EACH_OBSERVER(
ZoomObserver, observers_, OnZoomChanged(zoom_change_data));
......@@ -300,7 +299,7 @@ void ZoomController::UpdateStateIncludingTemporary(const std::string& host,
// TODO(wjmaclean) Should we consider having HostZoomMap send both old and
// new zoom levels here?
double zoom_level = GetZoomLevel();
ZoomChangedEventData zoom_change_data = ZoomChangedEventData(
ZoomChangedEventData zoom_change_data(
web_contents(), zoom_level, zoom_level, zoom_mode_, can_show_bubble);
FOR_EACH_OBSERVER(
ZoomObserver, observers_, OnZoomChanged(zoom_change_data));
......
......@@ -5,10 +5,9 @@
#ifndef CHROME_BROWSER_UI_ZOOM_ZOOM_CONTROLLER_H_
#define CHROME_BROWSER_UI_ZOOM_ZOOM_CONTROLLER_H_
#include <vector>
#include "base/basictypes.h"
#include "base/compiler_specific.h"
#include "base/memory/scoped_ptr.h"
#include "base/observer_list.h"
#include "base/prefs/pref_member.h"
#include "content/public/browser/host_zoom_map.h"
......@@ -136,7 +135,7 @@ class ZoomController : public content::WebContentsObserver,
// Used to access the default zoom level preference.
DoublePrefMember default_zoom_level_;
std::vector<ZoomChangedEventData> event_data_;
scoped_ptr<ZoomChangedEventData> event_data_;
// Keeps track of the extension (if any) that initiated the last zoom change
// that took effect.
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment