FBTF: More dtor deinlining. (Can almost see the end!)

BUG=none
TEST=compiles

Review URL: http://codereview.chromium.org/3962004

git-svn-id: svn://svn.chromium.org/chrome/trunk/src@63527 0039d316-1c4b-4281-b951-d872f2087c98
diff --git a/chrome/browser/content_setting_bubble_model.cc b/chrome/browser/content_setting_bubble_model.cc
index 65f1baa..2cc5d911 100644
--- a/chrome/browser/content_setting_bubble_model.cc
+++ b/chrome/browser/content_setting_bubble_model.cc
@@ -474,6 +474,21 @@
 ContentSettingBubbleModel::~ContentSettingBubbleModel() {
 }
 
+ContentSettingBubbleModel::RadioGroup::RadioGroup() : default_item(0) {}
+
+ContentSettingBubbleModel::RadioGroup::~RadioGroup() {}
+
+ContentSettingBubbleModel::DomainList::DomainList() {}
+
+ContentSettingBubbleModel::DomainList::~DomainList() {}
+
+ContentSettingBubbleModel::BubbleContent::BubbleContent()
+    : load_plugins_link_enabled(false) {
+}
+
+ContentSettingBubbleModel::BubbleContent::~BubbleContent() {}
+
+
 void ContentSettingBubbleModel::AddBlockedResource(
     const std::string& resource_identifier) {
   bubble_content_.resource_identifiers.insert(resource_identifier);
diff --git a/chrome/browser/content_setting_bubble_model.h b/chrome/browser/content_setting_bubble_model.h
index 97664d89..49af1b2 100644
--- a/chrome/browser/content_setting_bubble_model.h
+++ b/chrome/browser/content_setting_bubble_model.h
@@ -42,6 +42,9 @@
 
   typedef std::vector<std::string> RadioItems;
   struct RadioGroup {
+    RadioGroup();
+    ~RadioGroup();
+
     GURL url;
     std::string title;
     RadioItems radio_items;
@@ -49,11 +52,17 @@
   };
 
   struct DomainList {
+    DomainList();
+    ~DomainList();
+
     std::string title;
     std::set<std::string> hosts;
   };
 
   struct BubbleContent {
+    BubbleContent();
+    ~BubbleContent();
+
     std::string title;
     PopupItems popup_items;
     RadioGroup radio_group;
@@ -64,6 +73,9 @@
     std::string info_link;
     std::string load_plugins_link_title;
     bool load_plugins_link_enabled;
+
+   private:
+    DISALLOW_COPY_AND_ASSIGN(BubbleContent);
   };
 
   const BubbleContent& bubble_content() const { return bubble_content_; }
diff --git a/chrome/browser/file_path_watcher.cc b/chrome/browser/file_path_watcher.cc
new file mode 100644
index 0000000..19aff7a
--- /dev/null
+++ b/chrome/browser/file_path_watcher.cc
@@ -0,0 +1,19 @@
+// Copyright (c) 2010 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// Cross platform methods for FilePathWatcher. See the various platform
+// specific implementaiton files, too.
+
+#include "chrome/browser/file_path_watcher.h"
+
+FilePathWatcher::~FilePathWatcher() {
+  impl_->Cancel();
+}
+
+bool FilePathWatcher::Watch(const FilePath& path,
+                            Delegate* delegate) {
+  DCHECK(BrowserThread::CurrentlyOn(BrowserThread::FILE));
+  DCHECK(path.IsAbsolute());
+  return impl_->Watch(path, delegate);
+}
diff --git a/chrome/browser/file_path_watcher.h b/chrome/browser/file_path_watcher.h
index da123c6..51d25cff6 100644
--- a/chrome/browser/file_path_watcher.h
+++ b/chrome/browser/file_path_watcher.h
@@ -33,17 +33,11 @@
   };
 
   FilePathWatcher();
-  ~FilePathWatcher() {
-    impl_->Cancel();
-  }
+  ~FilePathWatcher();
 
   // Register interest in any changes on |path|. OnPathChanged will be called
   // back for each change. Returns true on success.
-  bool Watch(const FilePath& path, Delegate* delegate) WARN_UNUSED_RESULT {
-    DCHECK(BrowserThread::CurrentlyOn(BrowserThread::FILE));
-    DCHECK(path.IsAbsolute());
-    return impl_->Watch(path, delegate);
-  }
+  bool Watch(const FilePath& path, Delegate* delegate) WARN_UNUSED_RESULT;
 
   // Used internally to encapsulate different members on different platforms.
   class PlatformDelegate
diff --git a/chrome/browser/geolocation/device_data_provider.cc b/chrome/browser/geolocation/device_data_provider.cc
new file mode 100644
index 0000000..9fe592a
--- /dev/null
+++ b/chrome/browser/geolocation/device_data_provider.cc
@@ -0,0 +1,105 @@
+// Copyright (c) 2010 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "chrome/browser/geolocation/device_data_provider.h"
+
+namespace {
+
+bool CellDataMatches(const CellData &data1, const CellData &data2) {
+  return data1.Matches(data2);
+}
+
+}  // namespace
+
+CellData::CellData()
+    : cell_id(kint32min),
+      location_area_code(kint32min),
+      mobile_network_code(kint32min),
+      mobile_country_code(kint32min),
+      radio_signal_strength(kint32min),
+      timing_advance(kint32min) {
+}
+
+RadioData::RadioData()
+    : home_mobile_network_code(kint32min),
+      home_mobile_country_code(kint32min),
+      radio_type(RADIO_TYPE_UNKNOWN) {
+}
+
+RadioData::~RadioData() {}
+
+bool RadioData::Matches(const RadioData &other) const {
+  if (cell_data.size() != other.cell_data.size()) {
+    return false;
+  }
+  if (!std::equal(cell_data.begin(), cell_data.end(), other.cell_data.begin(),
+                  CellDataMatches)) {
+    return false;
+  }
+  return device_id == other.device_id &&
+         home_mobile_network_code == other.home_mobile_network_code &&
+         home_mobile_country_code == other.home_mobile_country_code &&
+         radio_type == other.radio_type &&
+         carrier == other.carrier;
+}
+
+AccessPointData::AccessPointData()
+    : radio_signal_strength(kint32min),
+      channel(kint32min),
+      signal_to_noise(kint32min) {
+}
+
+AccessPointData::~AccessPointData() {}
+
+WifiData::WifiData() {}
+
+WifiData::~WifiData() {}
+
+bool WifiData::DiffersSignificantly(const WifiData& other) const {
+  // More than 4 or 50% of access points added or removed is significant.
+  static const size_t kMinChangedAccessPoints = 4;
+  const size_t min_ap_count =
+      std::min(access_point_data.size(), other.access_point_data.size());
+  const size_t max_ap_count =
+      std::max(access_point_data.size(), other.access_point_data.size());
+  const size_t difference_threadhold = std::min(kMinChangedAccessPoints,
+                                                min_ap_count / 2);
+  if (max_ap_count > min_ap_count + difference_threadhold)
+    return true;
+  // Compute size of interesction of old and new sets.
+  size_t num_common = 0;
+  for (AccessPointDataSet::const_iterator iter = access_point_data.begin();
+       iter != access_point_data.end();
+       iter++) {
+    if (other.access_point_data.find(*iter) !=
+        other.access_point_data.end()) {
+      ++num_common;
+    }
+  }
+  DCHECK(num_common <= min_ap_count);
+
+  // Test how many have changed.
+  return max_ap_count > num_common + difference_threadhold;
+}
+
+GatewayData::GatewayData() {}
+
+GatewayData::~GatewayData() {}
+
+bool GatewayData::DiffersSignificantly(const GatewayData& other) const {
+  // Any change is significant.
+  if (this->router_data.size() != other.router_data.size())
+    return true;
+  RouterDataSet::const_iterator iter1 = router_data.begin();
+  RouterDataSet::const_iterator iter2 = other.router_data.begin();
+  while (iter1 != router_data.end()) {
+    if (iter1->mac_address != iter2->mac_address) {
+      // There is a difference between the sets of routers.
+      return true;
+    }
+    ++iter1;
+    ++iter2;
+  }
+  return false;
+}
diff --git a/chrome/browser/geolocation/device_data_provider.h b/chrome/browser/geolocation/device_data_provider.h
index 9cd4390fe..b6a3882e 100644
--- a/chrome/browser/geolocation/device_data_provider.h
+++ b/chrome/browser/geolocation/device_data_provider.h
@@ -44,13 +44,7 @@
 
 // Cell radio data relating to a single cell tower.
 struct CellData {
-  CellData()
-      : cell_id(kint32min),
-        location_area_code(kint32min),
-        mobile_network_code(kint32min),
-        mobile_country_code(kint32min),
-        radio_signal_strength(kint32min),
-        timing_advance(kint32min) {}
+  CellData();
   bool Matches(const CellData &other) const {
     // Ignore radio_signal_strength when matching.
     return cell_id == other.cell_id &&
@@ -70,10 +64,6 @@
                               // meters.
 };
 
-static bool CellDataMatches(const CellData &data1, const CellData &data2) {
-  return data1.Matches(data2);
-}
-
 enum RadioType {
   RADIO_TYPE_UNKNOWN,
   RADIO_TYPE_GSM,
@@ -83,24 +73,11 @@
 
 // All data for the cell radio.
 struct RadioData {
-  RadioData()
-      : home_mobile_network_code(kint32min),
-        home_mobile_country_code(kint32min),
-        radio_type(RADIO_TYPE_UNKNOWN) {}
-  bool Matches(const RadioData &other) const {
-    if (cell_data.size() != other.cell_data.size()) {
-      return false;
-    }
-    if (!std::equal(cell_data.begin(), cell_data.end(), other.cell_data.begin(),
-                    CellDataMatches)) {
-      return false;
-    }
-    return device_id == other.device_id &&
-           home_mobile_network_code == other.home_mobile_network_code &&
-           home_mobile_country_code == other.home_mobile_country_code &&
-           radio_type == other.radio_type &&
-           carrier == other.carrier;
-  }
+  RadioData();
+  ~RadioData();
+
+  bool Matches(const RadioData &other) const;
+
   // Determines whether a new set of radio data differs significantly from this.
   bool DiffersSignificantly(const RadioData &other) const {
     // This is required by MockDeviceDataProviderImpl.
@@ -113,15 +90,14 @@
   int home_mobile_network_code;  // For the device's home network.
   int home_mobile_country_code;  // For the device's home network.
   RadioType radio_type;          // Mobile radio type.
-  string16 carrier;         // Carrier name.
+  string16 carrier;              // Carrier name.
 };
 
 // Wifi data relating to a single access point.
 struct AccessPointData {
-  AccessPointData()
-      : radio_signal_strength(kint32min),
-        channel(kint32min),
-        signal_to_noise(kint32min) {}
+  AccessPointData();
+  ~AccessPointData();
+
   // MAC address, formatted as per MacAddressAsString16.
   string16 mac_address;
   int radio_signal_strength;  // Measured in dBm
@@ -141,33 +117,11 @@
 
 // All data for wifi.
 struct WifiData {
-  // Determines whether a new set of WiFi data differs significantly from this.
-  bool DiffersSignificantly(const WifiData& other) const {
-    // More than 4 or 50% of access points added or removed is significant.
-    static const size_t kMinChangedAccessPoints = 4;
-    const size_t min_ap_count =
-        std::min(access_point_data.size(), other.access_point_data.size());
-    const size_t max_ap_count =
-        std::max(access_point_data.size(), other.access_point_data.size());
-    const size_t difference_threadhold = std::min(kMinChangedAccessPoints,
-                                                  min_ap_count / 2);
-    if (max_ap_count > min_ap_count + difference_threadhold)
-      return true;
-    // Compute size of interesction of old and new sets.
-    size_t num_common = 0;
-    for (AccessPointDataSet::const_iterator iter = access_point_data.begin();
-         iter != access_point_data.end();
-         iter++) {
-      if (other.access_point_data.find(*iter) !=
-          other.access_point_data.end()) {
-        ++num_common;
-      }
-    }
-    DCHECK(num_common <= min_ap_count);
+  WifiData();
+  ~WifiData();
 
-    // Test how many have changed.
-    return max_ap_count > num_common + difference_threadhold;
-  }
+  // Determines whether a new set of WiFi data differs significantly from this.
+  bool DiffersSignificantly(const WifiData& other) const;
 
   // Store access points as a set, sorted by MAC address. This allows quick
   // comparison of sets for detecting changes and for caching.
@@ -177,7 +131,6 @@
 
 // Gateway data relating to a single router.
 struct RouterData {
-  RouterData() {}
   // MAC address, formatted as per MacAddressAsString16.
   string16 mac_address;
 };
@@ -193,24 +146,12 @@
 
 // All gateway data for routers.
 struct GatewayData {
+  GatewayData();
+  ~GatewayData();
+
   // Determines whether a new set of gateway data differs significantly
   // from this.
-  bool DiffersSignificantly(const GatewayData& other) const {
-    // Any change is significant.
-    if (this->router_data.size() != other.router_data.size())
-      return true;
-    RouterDataSet::const_iterator iter1 = router_data.begin();
-    RouterDataSet::const_iterator iter2 = other.router_data.begin();
-    while (iter1 != router_data.end()) {
-      if (iter1->mac_address != iter2->mac_address) {
-        // There is a difference between the sets of routers.
-        return true;
-      }
-      ++iter1;
-      ++iter2;
-    }
-    return false;
-  }
+  bool DiffersSignificantly(const GatewayData& other) const;
 
   // Store routers as a set, sorted by MAC address. This allows quick
   // comparison of sets for detecting changes and for caching.
diff --git a/chrome/browser/gtk/options/simple_content_exceptions_window.cc b/chrome/browser/gtk/options/simple_content_exceptions_window.cc
index 68c211a..682cca15 100644
--- a/chrome/browser/gtk/options/simple_content_exceptions_window.cc
+++ b/chrome/browser/gtk/options/simple_content_exceptions_window.cc
@@ -153,6 +153,8 @@
   g_signal_connect(dialog_, "destroy", G_CALLBACK(OnWindowDestroyThunk), this);
 }
 
+SimpleContentExceptionsWindow::~SimpleContentExceptionsWindow() {}
+
 void SimpleContentExceptionsWindow::SetColumnValues(int row,
                                                     GtkTreeIter* iter) {
   std::wstring hostname = model_->GetText(row, IDS_EXCEPTIONS_HOSTNAME_HEADER);
diff --git a/chrome/browser/gtk/options/simple_content_exceptions_window.h b/chrome/browser/gtk/options/simple_content_exceptions_window.h
index c18dab1..2d3b068d 100644
--- a/chrome/browser/gtk/options/simple_content_exceptions_window.h
+++ b/chrome/browser/gtk/options/simple_content_exceptions_window.h
@@ -23,6 +23,8 @@
                                    RemoveRowsTableModel* model,
                                    int tile_message_id);
 
+  virtual ~SimpleContentExceptionsWindow();
+
   // gtk_tree::TableAdapter::Delegate implementation:
   virtual void SetColumnValues(int row, GtkTreeIter* iter);
   virtual void OnAnyModelUpdateStart();
diff --git a/chrome/browser/icon_manager.cc b/chrome/browser/icon_manager.cc
index 98ff322..8f74ce4 100644
--- a/chrome/browser/icon_manager.cc
+++ b/chrome/browser/icon_manager.cc
@@ -10,6 +10,12 @@
 #include "third_party/skia/include/core/SkBitmap.h"
 #include "third_party/skia/include/core/SkCanvas.h"
 
+struct IconManager::ClientRequest {
+  scoped_refptr<IconRequest> request;
+  IconGroupID group;
+  IconLoader::IconSize size;
+};
+
 IconManager::IconManager() {
 }
 
diff --git a/chrome/browser/icon_manager.h b/chrome/browser/icon_manager.h
index 7ccd55a0..210fa282 100644
--- a/chrome/browser/icon_manager.h
+++ b/chrome/browser/icon_manager.h
@@ -106,13 +106,9 @@
   IconMap icon_cache_;
 
   typedef CancelableRequest<IconRequestCallback> IconRequest;
-  typedef struct {
-    scoped_refptr<IconRequest> request;
-    IconGroupID group;
-    IconLoader::IconSize size;
-  } ClientRequest;
 
   // Asynchronous requests that have not yet been completed.
+  struct ClientRequest;
   typedef std::map<IconLoader*, ClientRequest> ClientRequests;
   ClientRequests requests_;
 
diff --git a/chrome/browser/in_process_webkit/indexed_db_callbacks.cc b/chrome/browser/in_process_webkit/indexed_db_callbacks.cc
new file mode 100644
index 0000000..faaa933
--- /dev/null
+++ b/chrome/browser/in_process_webkit/indexed_db_callbacks.cc
@@ -0,0 +1,43 @@
+// Copyright (c) 2010 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "chrome/browser/in_process_webkit/indexed_db_callbacks.h"
+
+IndexedDBCallbacksBase::IndexedDBCallbacksBase(
+    IndexedDBDispatcherHost* dispatcher_host,
+    int32 response_id)
+    : dispatcher_host_(dispatcher_host),
+      response_id_(response_id) {
+}
+
+IndexedDBCallbacksBase::~IndexedDBCallbacksBase() {}
+
+IndexedDBTransactionCallbacks::IndexedDBTransactionCallbacks(
+    IndexedDBDispatcherHost* dispatcher_host,
+    int transaction_id)
+    : dispatcher_host_(dispatcher_host),
+      transaction_id_(transaction_id) {
+}
+
+IndexedDBTransactionCallbacks::~IndexedDBTransactionCallbacks() {}
+
+void IndexedDBCallbacksBase::onError(const WebKit::WebIDBDatabaseError& error) {
+  dispatcher_host_->Send(new ViewMsg_IDBCallbacksError(
+      response_id_, error.code(), error.message()));
+}
+
+void IndexedDBTransactionCallbacks::onAbort() {
+  dispatcher_host_->Send(
+      new ViewMsg_IDBTransactionCallbacksAbort(transaction_id_));
+}
+
+void IndexedDBTransactionCallbacks::onComplete() {
+  dispatcher_host_->Send(
+      new ViewMsg_IDBTransactionCallbacksComplete(transaction_id_));
+}
+
+void IndexedDBTransactionCallbacks::onTimeout() {
+  dispatcher_host_->Send(
+      new ViewMsg_IDBTransactionCallbacksTimeout(transaction_id_));
+}
diff --git a/chrome/browser/in_process_webkit/indexed_db_callbacks.h b/chrome/browser/in_process_webkit/indexed_db_callbacks.h
index 1c6ed37..653e211e6 100644
--- a/chrome/browser/in_process_webkit/indexed_db_callbacks.h
+++ b/chrome/browser/in_process_webkit/indexed_db_callbacks.h
@@ -37,14 +37,12 @@
 // The code the following two classes share.
 class IndexedDBCallbacksBase : public WebKit::WebIDBCallbacks {
  public:
-  IndexedDBCallbacksBase(
-      IndexedDBDispatcherHost* dispatcher_host, int32 response_id)
-      : dispatcher_host_(dispatcher_host), response_id_(response_id) { }
+  IndexedDBCallbacksBase(IndexedDBDispatcherHost* dispatcher_host,
+                         int32 response_id);
 
-  virtual void onError(const WebKit::WebIDBDatabaseError& error) {
-    dispatcher_host_->Send(new ViewMsg_IDBCallbacksError(
-        response_id_, error.code(), error.message()));
-  }
+  virtual ~IndexedDBCallbacksBase();
+
+  virtual void onError(const WebKit::WebIDBDatabaseError& error);
 
  protected:
   IndexedDBDispatcherHost* dispatcher_host() const {
@@ -166,25 +164,15 @@
     : public WebKit::WebIDBTransactionCallbacks {
  public:
   IndexedDBTransactionCallbacks(IndexedDBDispatcherHost* dispatcher_host,
-                                int transaction_id)
-      : dispatcher_host_(dispatcher_host),
-        transaction_id_(transaction_id) {
-  }
+                                int transaction_id);
 
-  virtual void onAbort() {
-    dispatcher_host_->Send(
-        new ViewMsg_IDBTransactionCallbacksAbort(transaction_id_));
-  }
+  virtual ~IndexedDBTransactionCallbacks();
 
-  virtual void onComplete() {
-    dispatcher_host_->Send(
-        new ViewMsg_IDBTransactionCallbacksComplete(transaction_id_));
-  }
+  virtual void onAbort();
 
-  virtual void onTimeout() {
-    dispatcher_host_->Send(
-        new ViewMsg_IDBTransactionCallbacksTimeout(transaction_id_));
-  }
+  virtual void onComplete();
+
+  virtual void onTimeout();
 
  private:
   scoped_refptr<IndexedDBDispatcherHost> dispatcher_host_;
diff --git a/chrome/browser/language_order_table_model.cc b/chrome/browser/language_order_table_model.cc
index 0f3680b..c1a4103 100644
--- a/chrome/browser/language_order_table_model.cc
+++ b/chrome/browser/language_order_table_model.cc
@@ -16,6 +16,8 @@
     : observer_(NULL) {
 }
 
+LanguageOrderTableModel::~LanguageOrderTableModel() {}
+
 void LanguageOrderTableModel::SetAcceptLanguagesString(
     const std::string& language_list) {
   std::vector<std::string> languages_vector;
diff --git a/chrome/browser/language_order_table_model.h b/chrome/browser/language_order_table_model.h
index 4b11748..9cfdf4c 100644
--- a/chrome/browser/language_order_table_model.h
+++ b/chrome/browser/language_order_table_model.h
@@ -18,6 +18,8 @@
  public:
   LanguageOrderTableModel();
 
+  virtual ~LanguageOrderTableModel();
+
   // Set Language List.
   void SetAcceptLanguagesString(const std::string& language_list);
 
diff --git a/chrome/browser/parsers/metadata_parser_filebase.cc b/chrome/browser/parsers/metadata_parser_filebase.cc
index 0146f3f..123cb6f 100644
--- a/chrome/browser/parsers/metadata_parser_filebase.cc
+++ b/chrome/browser/parsers/metadata_parser_filebase.cc
@@ -9,10 +9,12 @@
 #include "base/utf_string_conversions.h"
 
 FileMetadataParser::FileMetadataParser(const FilePath& path)
-    : MetadataParser(path) {
-  path_ = path;
+    : MetadataParser(path),
+      path_(path) {
 }
 
+FileMetadataParser::~FileMetadataParser() {}
+
 bool FileMetadataParser::Parse() {
   std::string value;
   int64 size;
@@ -48,6 +50,8 @@
   it = properties_.begin();
 }
 
+FileMetadataPropertyIterator::~FileMetadataPropertyIterator() {}
+
 bool FileMetadataPropertyIterator::GetNext(std::string* key,
                                            std::string* value) {
   if (it == properties_.end()) {
diff --git a/chrome/browser/parsers/metadata_parser_filebase.h b/chrome/browser/parsers/metadata_parser_filebase.h
index 8b232a29..9ed57750 100644
--- a/chrome/browser/parsers/metadata_parser_filebase.h
+++ b/chrome/browser/parsers/metadata_parser_filebase.h
@@ -21,6 +21,8 @@
  public:
   explicit FileMetadataParser(const FilePath& path);
 
+  virtual ~FileMetadataParser();
+
   // Implementation of MetadataParser
   virtual bool Parse();
   virtual bool GetProperty(const std::string& key, std::string* value);
@@ -39,6 +41,8 @@
  public:
   explicit FileMetadataPropertyIterator(PropertyMap& properties);
 
+  virtual ~FileMetadataPropertyIterator();
+
   // Implementation of MetadataPropertyIterator
   virtual bool GetNext(std::string* key, std::string* value);
   virtual int Length();
diff --git a/chrome/browser/policy/config_dir_policy_provider.cc b/chrome/browser/policy/config_dir_policy_provider.cc
index 6fe7630..a3f3e04 100644
--- a/chrome/browser/policy/config_dir_policy_provider.cc
+++ b/chrome/browser/policy/config_dir_policy_provider.cc
@@ -44,6 +44,8 @@
   DCHECK(policy_.get());
 }
 
+PolicyDirLoader::~PolicyDirLoader() {}
+
 void PolicyDirLoader::Stop() {
   if (!BrowserThread::CurrentlyOn(BrowserThread::FILE)) {
     BrowserThread::PostTask(BrowserThread::FILE, FROM_HERE,
@@ -205,6 +207,8 @@
 
 // PolicyDirWatcher implementation:
 
+PolicyDirWatcher::PolicyDirWatcher() {}
+
 void PolicyDirWatcher::Init(PolicyDirLoader* loader) {
   // Initialization can happen early when the file thread is not yet available.
   // So post a task to ourselves on the UI thread which will run after threading
@@ -215,6 +219,8 @@
                         scoped_refptr<PolicyDirLoader>(loader)));
 }
 
+PolicyDirWatcher::~PolicyDirWatcher() {}
+
 void PolicyDirWatcher::InitWatcher(
     const scoped_refptr<PolicyDirLoader>& loader) {
   if (!BrowserThread::CurrentlyOn(BrowserThread::FILE)) {
diff --git a/chrome/browser/policy/config_dir_policy_provider.h b/chrome/browser/policy/config_dir_policy_provider.h
index 3657944..055ce06 100644
--- a/chrome/browser/policy/config_dir_policy_provider.h
+++ b/chrome/browser/policy/config_dir_policy_provider.h
@@ -38,6 +38,8 @@
                   int settle_interval_seconds,
                   int reload_interval_minutes);
 
+  virtual ~PolicyDirLoader();
+
   // Stops any pending reload tasks.
   void Stop();
 
@@ -118,7 +120,7 @@
 // initializing the watcher object on the file thread.
 class PolicyDirWatcher : public base::RefCountedThreadSafe<PolicyDirWatcher> {
  public:
-  PolicyDirWatcher() {}
+  PolicyDirWatcher();
 
   // Runs initialization. This is in a separate method since we need to post a
   // task (which cannot be done from the constructor).
@@ -127,7 +129,7 @@
  private:
   // PolicyDirWatcher objects should only be deleted by RefCountedThreadSafe.
   friend class base::RefCountedThreadSafe<PolicyDirWatcher>;
-  ~PolicyDirWatcher() {}
+  virtual ~PolicyDirWatcher();
 
   // Actually sets up the watch with the FilePathWatcher code.
   void InitWatcher(const scoped_refptr<PolicyDirLoader>& loader);
diff --git a/chrome/browser/policy/configuration_policy_pref_store.cc b/chrome/browser/policy/configuration_policy_pref_store.cc
index 74c4e51..8ebd74c 100644
--- a/chrome/browser/policy/configuration_policy_pref_store.cc
+++ b/chrome/browser/policy/configuration_policy_pref_store.cc
@@ -271,6 +271,8 @@
       use_system_proxy_(false) {
 }
 
+ConfigurationPolicyPrefStore::~ConfigurationPolicyPrefStore() {}
+
 PrefStore::PrefReadError ConfigurationPolicyPrefStore::ReadPrefs() {
   proxy_disabled_ = false;
   proxy_configuration_specified_ = false;
diff --git a/chrome/browser/policy/configuration_policy_pref_store.h b/chrome/browser/policy/configuration_policy_pref_store.h
index 8f8167d..83ab847 100644
--- a/chrome/browser/policy/configuration_policy_pref_store.h
+++ b/chrome/browser/policy/configuration_policy_pref_store.h
@@ -26,7 +26,7 @@
   // The ConfigurationPolicyPrefStore does not take ownership of the
   // passed-in |provider|.
   explicit ConfigurationPolicyPrefStore(ConfigurationPolicyProvider* provider);
-  virtual ~ConfigurationPolicyPrefStore() { }
+  virtual ~ConfigurationPolicyPrefStore();
 
   // PrefStore methods:
   virtual PrefReadError ReadPrefs();
diff --git a/chrome/browser/printing/print_dialog_cloud.cc b/chrome/browser/printing/print_dialog_cloud.cc
index 6fd43f4..3fdad4bc 100644
--- a/chrome/browser/printing/print_dialog_cloud.cc
+++ b/chrome/browser/printing/print_dialog_cloud.cc
@@ -152,6 +152,14 @@
   helper_ = NULL;
 }
 
+CloudPrintDataSender::CloudPrintDataSender(CloudPrintDataSenderHelper* helper,
+                                           const string16& print_job_title)
+    : helper_(helper),
+      print_job_title_(print_job_title) {
+}
+
+CloudPrintDataSender::~CloudPrintDataSender() {}
+
 // Grab the raw PDF file contents and massage them into shape for
 // sending to the dialog contents (and up to the cloud print server)
 // by encoding it and prefixing it with the appropriate mime type.
@@ -205,6 +213,18 @@
 }
 
 
+CloudPrintFlowHandler::CloudPrintFlowHandler(const FilePath& path_to_pdf,
+                                             const string16& print_job_title)
+    : path_to_pdf_(path_to_pdf),
+      print_job_title_(print_job_title) {
+}
+
+CloudPrintFlowHandler::~CloudPrintFlowHandler() {
+  // This will also cancel any task in flight.
+  CancelAnyRunningTask();
+}
+
+
 void CloudPrintFlowHandler::SetDialogDelegate(
     CloudPrintHtmlDialogDelegate* delegate) {
   // Even if setting a new dom_ui, it means any previous task needs
diff --git a/chrome/browser/printing/print_dialog_cloud_internal.h b/chrome/browser/printing/print_dialog_cloud_internal.h
index c40f3010..4148623b 100644
--- a/chrome/browser/printing/print_dialog_cloud_internal.h
+++ b/chrome/browser/printing/print_dialog_cloud_internal.h
@@ -53,8 +53,7 @@
   // The owner of this object is also expected to own and control the
   // lifetime of the helper.
   CloudPrintDataSender(CloudPrintDataSenderHelper* helper,
-                       const string16& print_job_title)
-      : helper_(helper), print_job_title_(print_job_title) {}
+                       const string16& print_job_title);
 
   // Calls to read in the PDF file (on the FILE thread) then send that
   // information to the dialog renderer (on the IO thread).  We know
@@ -69,7 +68,7 @@
 
  private:
   friend class base::RefCountedThreadSafe<CloudPrintDataSender>;
-  ~CloudPrintDataSender() {}
+  virtual ~CloudPrintDataSender();
 
   Lock lock_;
   CloudPrintDataSenderHelper* volatile helper_;
@@ -92,13 +91,8 @@
                               public NotificationObserver {
  public:
   explicit CloudPrintFlowHandler(const FilePath& path_to_pdf,
-                                 const string16& print_job_title)
-      : path_to_pdf_(path_to_pdf),
-        print_job_title_(print_job_title) {}
-  virtual ~CloudPrintFlowHandler() {
-    // This will also cancel any task in flight.
-    CancelAnyRunningTask();
-  }
+                                 const string16& print_job_title);
+  virtual ~CloudPrintFlowHandler();
 
   // DOMMessageHandler implementation.
   virtual void RegisterMessages();
diff --git a/chrome/browser/renderer_host/audio_renderer_host.cc b/chrome/browser/renderer_host/audio_renderer_host.cc
index 0b594a0..e5b9b2b0 100644
--- a/chrome/browser/renderer_host/audio_renderer_host.cc
+++ b/chrome/browser/renderer_host/audio_renderer_host.cc
@@ -67,6 +67,15 @@
   return params.channels * samples * params.bits_per_sample / 8;
 }
 
+AudioRendererHost::AudioEntry::AudioEntry()
+    : render_view_id(0),
+      stream_id(0),
+      pending_buffer_request(false),
+      pending_close(false) {
+}
+
+AudioRendererHost::AudioEntry::~AudioEntry() {}
+
 ///////////////////////////////////////////////////////////////////////////////
 // AudioRendererHost implementations.
 AudioRendererHost::AudioRendererHost()
diff --git a/chrome/browser/renderer_host/audio_renderer_host.h b/chrome/browser/renderer_host/audio_renderer_host.h
index 8ec3cd1..d2dfd59 100644
--- a/chrome/browser/renderer_host/audio_renderer_host.h
+++ b/chrome/browser/renderer_host/audio_renderer_host.h
@@ -83,12 +83,8 @@
   typedef std::pair<int32, int> AudioEntryId;
 
   struct AudioEntry {
-    AudioEntry()
-        : render_view_id(0),
-          stream_id(0),
-          pending_buffer_request(false),
-          pending_close(false) {
-    }
+    AudioEntry();
+    ~AudioEntry();
 
     // The AudioOutputController that manages the audio stream.
     scoped_refptr<media::AudioOutputController> controller;
diff --git a/chrome/browser/renderer_host/buffered_resource_handler.cc b/chrome/browser/renderer_host/buffered_resource_handler.cc
index a19d3c3a..d534042 100644
--- a/chrome/browser/renderer_host/buffered_resource_handler.cc
+++ b/chrome/browser/renderer_host/buffered_resource_handler.cc
@@ -149,6 +149,8 @@
   return real_handler_->OnReadCompleted(request_id, bytes_read);
 }
 
+BufferedResourceHandler::~BufferedResourceHandler() {}
+
 bool BufferedResourceHandler::DelayResponse() {
   std::string mime_type;
   request_->GetMimeType(&mime_type);
diff --git a/chrome/browser/renderer_host/buffered_resource_handler.h b/chrome/browser/renderer_host/buffered_resource_handler.h
index 26bd7f8..69e64c5b 100644
--- a/chrome/browser/renderer_host/buffered_resource_handler.h
+++ b/chrome/browser/renderer_host/buffered_resource_handler.h
@@ -22,21 +22,21 @@
                           URLRequest* request);
 
   // ResourceHandler implementation:
-  bool OnUploadProgress(int request_id, uint64 position, uint64 size);
-  bool OnRequestRedirected(int request_id, const GURL& new_url,
-                           ResourceResponse* response, bool* defer);
-  bool OnResponseStarted(int request_id, ResourceResponse* response);
-  bool OnWillStart(int request_id, const GURL& url, bool* defer);
-  bool OnWillRead(int request_id, net::IOBuffer** buf, int* buf_size,
-                  int min_size);
-  bool OnReadCompleted(int request_id, int* bytes_read);
-  bool OnResponseCompleted(int request_id,
-                           const URLRequestStatus& status,
-                           const std::string& security_info);
-  void OnRequestClosed();
+  virtual bool OnUploadProgress(int request_id, uint64 position, uint64 size);
+  virtual bool OnRequestRedirected(int request_id, const GURL& new_url,
+                                   ResourceResponse* response, bool* defer);
+  virtual bool OnResponseStarted(int request_id, ResourceResponse* response);
+  virtual bool OnWillStart(int request_id, const GURL& url, bool* defer);
+  virtual bool OnWillRead(int request_id, net::IOBuffer** buf, int* buf_size,
+                          int min_size);
+  virtual bool OnReadCompleted(int request_id, int* bytes_read);
+  virtual bool OnResponseCompleted(int request_id,
+                                   const URLRequestStatus& status,
+                                   const std::string& security_info);
+  virtual void OnRequestClosed();
 
  private:
-  ~BufferedResourceHandler() {}
+  virtual ~BufferedResourceHandler();
 
   // Returns true if we should delay OnResponseStarted forwarding.
   bool DelayResponse();
diff --git a/chrome/browser/renderer_host/cross_site_resource_handler.cc b/chrome/browser/renderer_host/cross_site_resource_handler.cc
index 3198e76..ddab0e7 100644
--- a/chrome/browser/renderer_host/cross_site_resource_handler.cc
+++ b/chrome/browser/renderer_host/cross_site_resource_handler.cc
@@ -175,6 +175,8 @@
   }
 }
 
+CrossSiteResourceHandler::~CrossSiteResourceHandler() {}
+
 // Prepare to render the cross-site response in a new RenderViewHost, by
 // telling the old RenderViewHost to run its onunload handler.
 void CrossSiteResourceHandler::StartCrossSiteTransition(
diff --git a/chrome/browser/renderer_host/cross_site_resource_handler.h b/chrome/browser/renderer_host/cross_site_resource_handler.h
index aa731caf..33c1109 100644
--- a/chrome/browser/renderer_host/cross_site_resource_handler.h
+++ b/chrome/browser/renderer_host/cross_site_resource_handler.h
@@ -25,26 +25,26 @@
                            ResourceDispatcherHost* resource_dispatcher_host);
 
   // ResourceHandler implementation:
-  bool OnUploadProgress(int request_id, uint64 position, uint64 size);
-  bool OnRequestRedirected(int request_id, const GURL& new_url,
-                           ResourceResponse* response, bool* defer);
-  bool OnResponseStarted(int request_id,
-                         ResourceResponse* response);
-  bool OnWillStart(int request_id, const GURL& url, bool* defer);
-  bool OnWillRead(int request_id, net::IOBuffer** buf, int* buf_size,
-                  int min_size);
-  bool OnReadCompleted(int request_id, int* bytes_read);
-  bool OnResponseCompleted(int request_id,
-                           const URLRequestStatus& status,
-                           const std::string& security_info);
-  void OnRequestClosed();
+  virtual bool OnUploadProgress(int request_id, uint64 position, uint64 size);
+  virtual bool OnRequestRedirected(int request_id, const GURL& new_url,
+                                   ResourceResponse* response, bool* defer);
+  virtual bool OnResponseStarted(int request_id,
+                                 ResourceResponse* response);
+  virtual bool OnWillStart(int request_id, const GURL& url, bool* defer);
+  virtual bool OnWillRead(int request_id, net::IOBuffer** buf, int* buf_size,
+                          int min_size);
+  virtual bool OnReadCompleted(int request_id, int* bytes_read);
+  virtual bool OnResponseCompleted(int request_id,
+                                   const URLRequestStatus& status,
+                                   const std::string& security_info);
+  virtual void OnRequestClosed();
 
   // We can now send the response to the new renderer, which will cause
   // TabContents to swap in the new renderer and destroy the old one.
   void ResumeResponse();
 
  private:
-  ~CrossSiteResourceHandler() {}
+  virtual ~CrossSiteResourceHandler();
 
   // Prepare to render the cross-site response in a new RenderViewHost, by
   // telling the old RenderViewHost to run its onunload handler.
diff --git a/chrome/browser/renderer_host/database_dispatcher_host.cc b/chrome/browser/renderer_host/database_dispatcher_host.cc
index 276ba75..11c5125a 100644
--- a/chrome/browser/renderer_host/database_dispatcher_host.cc
+++ b/chrome/browser/renderer_host/database_dispatcher_host.cc
@@ -124,6 +124,8 @@
     delete message;
 }
 
+DatabaseDispatcherHost::~DatabaseDispatcherHost() {}
+
 void DatabaseDispatcherHost::OnDatabaseOpenFile(const string16& vfs_file_name,
                                                 int desired_flags,
                                                 IPC::Message* reply_msg) {
diff --git a/chrome/browser/renderer_host/database_dispatcher_host.h b/chrome/browser/renderer_host/database_dispatcher_host.h
index 58b9b6e..000c0632 100644
--- a/chrome/browser/renderer_host/database_dispatcher_host.h
+++ b/chrome/browser/renderer_host/database_dispatcher_host.h
@@ -74,6 +74,9 @@
   void Send(IPC::Message* message);
 
  private:
+  friend class base::RefCountedThreadSafe<DatabaseDispatcherHost>;
+  virtual ~DatabaseDispatcherHost();
+
   class PromptDelegate;
 
   void AddObserver();
diff --git a/chrome/browser/renderer_host/resource_request_details.cc b/chrome/browser/renderer_host/resource_request_details.cc
new file mode 100644
index 0000000..20a255d
--- /dev/null
+++ b/chrome/browser/renderer_host/resource_request_details.cc
@@ -0,0 +1,54 @@
+// Copyright (c) 2010 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "chrome/browser/renderer_host/resource_request_details.h"
+
+
+ResourceRequestDetails::ResourceRequestDetails(const URLRequest* request,
+                                               int cert_id)
+    : url_(request->url()),
+      original_url_(request->original_url()),
+      method_(request->method()),
+      referrer_(request->referrer()),
+      has_upload_(request->has_upload()),
+      load_flags_(request->load_flags()),
+      status_(request->status()),
+      ssl_cert_id_(cert_id),
+      ssl_cert_status_(request->ssl_info().cert_status) {
+  const ResourceDispatcherHostRequestInfo* info =
+      ResourceDispatcherHost::InfoForRequest(request);
+  DCHECK(info);
+  resource_type_ = info->resource_type();
+  frame_origin_ = info->frame_origin();
+  main_frame_origin_ = info->main_frame_origin();
+
+  // If request is from the worker process on behalf of a renderer, use
+  // the renderer process id, since it consumes the notification response
+  // such as ssl state etc.
+  const WorkerProcessHost::WorkerInstance* worker_instance =
+      WorkerService::GetInstance()->FindWorkerInstance(info->child_id());
+  if (worker_instance) {
+    DCHECK(!worker_instance->worker_document_set()->IsEmpty());
+    const WorkerDocumentSet::DocumentInfoSet& parents =
+        worker_instance->worker_document_set()->documents();
+    // TODO(atwilson): need to notify all associated renderers in the case
+    // of ssl state change (http://crbug.com/25357). For now, just notify
+    // the first one (works for dedicated workers and shared workers with
+    // a single process).
+    origin_child_id_ = parents.begin()->renderer_id();
+  } else {
+    origin_child_id_ = info->child_id();
+  }
+}
+
+ResourceRequestDetails::~ResourceRequestDetails() {}
+
+ResourceRedirectDetails::ResourceRedirectDetails(const URLRequest* request,
+                                                 int cert_id,
+                                                 const GURL& new_url)
+    : ResourceRequestDetails(request, cert_id),
+      new_url_(new_url) {
+}
+
+ResourceRedirectDetails::~ResourceRedirectDetails() {}
diff --git a/chrome/browser/renderer_host/resource_request_details.h b/chrome/browser/renderer_host/resource_request_details.h
index 6af9f85..36f3456 100644
--- a/chrome/browser/renderer_host/resource_request_details.h
+++ b/chrome/browser/renderer_host/resource_request_details.h
@@ -24,43 +24,9 @@
 // Details about a resource request notification.
 class ResourceRequestDetails {
  public:
-  ResourceRequestDetails(const URLRequest* request, int cert_id)
-      : url_(request->url()),
-        original_url_(request->original_url()),
-        method_(request->method()),
-        referrer_(request->referrer()),
-        has_upload_(request->has_upload()),
-        load_flags_(request->load_flags()),
-        status_(request->status()),
-        ssl_cert_id_(cert_id),
-        ssl_cert_status_(request->ssl_info().cert_status) {
-    const ResourceDispatcherHostRequestInfo* info =
-        ResourceDispatcherHost::InfoForRequest(request);
-    DCHECK(info);
-    resource_type_ = info->resource_type();
-    frame_origin_ = info->frame_origin();
-    main_frame_origin_ = info->main_frame_origin();
+  ResourceRequestDetails(const URLRequest* request, int cert_id);
 
-    // If request is from the worker process on behalf of a renderer, use
-    // the renderer process id, since it consumes the notification response
-    // such as ssl state etc.
-    const WorkerProcessHost::WorkerInstance* worker_instance =
-        WorkerService::GetInstance()->FindWorkerInstance(info->child_id());
-    if (worker_instance) {
-      DCHECK(!worker_instance->worker_document_set()->IsEmpty());
-      const WorkerDocumentSet::DocumentInfoSet& parents =
-          worker_instance->worker_document_set()->documents();
-      // TODO(atwilson): need to notify all associated renderers in the case
-      // of ssl state change (http://crbug.com/25357). For now, just notify
-      // the first one (works for dedicated workers and shared workers with
-      // a single process).
-      origin_child_id_ = parents.begin()->renderer_id();
-    } else {
-      origin_child_id_ = info->child_id();
-    }
-  }
-
-  virtual ~ResourceRequestDetails() {}
+  virtual ~ResourceRequestDetails();
 
   const GURL& url() const { return url_; }
   const GURL& original_url() const { return original_url_; }
@@ -97,9 +63,8 @@
  public:
   ResourceRedirectDetails(const URLRequest* request,
                           int cert_id,
-                          const GURL& new_url)
-      : ResourceRequestDetails(request, cert_id),
-        new_url_(new_url) {}
+                          const GURL& new_url);
+  virtual ~ResourceRedirectDetails();
 
   // The URL to which we are being redirected.
   const GURL& new_url() const { return new_url_; }
diff --git a/chrome/browser/renderer_host/save_file_resource_handler.cc b/chrome/browser/renderer_host/save_file_resource_handler.cc
index 38f83bd05..bc26ba5 100644
--- a/chrome/browser/renderer_host/save_file_resource_handler.cc
+++ b/chrome/browser/renderer_host/save_file_resource_handler.cc
@@ -115,3 +115,5 @@
     const std::string& content_length) {
   base::StringToInt64(content_length, &content_length_);
 }
+
+SaveFileResourceHandler::~SaveFileResourceHandler() {}
diff --git a/chrome/browser/renderer_host/save_file_resource_handler.h b/chrome/browser/renderer_host/save_file_resource_handler.h
index ecd8a93..7475bef6 100644
--- a/chrome/browser/renderer_host/save_file_resource_handler.h
+++ b/chrome/browser/renderer_host/save_file_resource_handler.h
@@ -21,32 +21,33 @@
                           const GURL& url,
                           SaveFileManager* manager);
 
-  bool OnUploadProgress(int request_id, uint64 position, uint64 size);
+  // ResourceHandler Implementation:
+  virtual bool OnUploadProgress(int request_id, uint64 position, uint64 size);
 
   // Saves the redirected URL to final_url_, we need to use the original
   // URL to match original request.
-  bool OnRequestRedirected(int request_id, const GURL& url,
-                           ResourceResponse* response, bool* defer);
+  virtual bool OnRequestRedirected(int request_id, const GURL& url,
+                                   ResourceResponse* response, bool* defer);
 
   // Sends the download creation information to the download thread.
-  bool OnResponseStarted(int request_id, ResourceResponse* response);
+  virtual bool OnResponseStarted(int request_id, ResourceResponse* response);
 
   // Pass-through implementation.
-  bool OnWillStart(int request_id, const GURL& url, bool* defer);
+  virtual bool OnWillStart(int request_id, const GURL& url, bool* defer);
 
   // Creates a new buffer, which will be handed to the download thread for file
   // writing and deletion.
-  bool OnWillRead(int request_id, net::IOBuffer** buf, int* buf_size,
-                  int min_size);
+  virtual bool OnWillRead(int request_id, net::IOBuffer** buf, int* buf_size,
+                          int min_size);
 
   // Passes the buffer to the download file writer.
-  bool OnReadCompleted(int request_id, int* bytes_read);
+  virtual bool OnReadCompleted(int request_id, int* bytes_read);
 
-  bool OnResponseCompleted(int request_id,
-                           const URLRequestStatus& status,
-                           const std::string& security_info);
+  virtual bool OnResponseCompleted(int request_id,
+                                   const URLRequestStatus& status,
+                                   const std::string& security_info);
 
-  void OnRequestClosed();
+  virtual void OnRequestClosed();
 
   // If the content-length header is not present (or contains something other
   // than numbers), StringToInt64 returns 0, which indicates 'unknown size' and
@@ -58,7 +59,7 @@
   }
 
  private:
-  ~SaveFileResourceHandler() {}
+  virtual ~SaveFileResourceHandler();
 
   int save_id_;
   int render_process_id_;
diff --git a/chrome/browser/safe_browsing/safe_browsing_service.cc b/chrome/browser/safe_browsing/safe_browsing_service.cc
index 6f8619c..24f458c 100644
--- a/chrome/browser/safe_browsing/safe_browsing_service.cc
+++ b/chrome/browser/safe_browsing/safe_browsing_service.cc
@@ -57,6 +57,22 @@
   UrlCheckResult result;
 };
 
+SafeBrowsingService::UnsafeResource::UnsafeResource()
+    : resource_type(ResourceType::MAIN_FRAME),
+      client(NULL),
+      render_process_host_id(-1),
+      render_view_id(-1) {
+}
+
+SafeBrowsingService::UnsafeResource::~UnsafeResource() {}
+
+SafeBrowsingService::SafeBrowsingCheck::SafeBrowsingCheck()
+    : client(NULL),
+      need_get_hash(false) {
+}
+
+SafeBrowsingService::SafeBrowsingCheck::~SafeBrowsingCheck() {}
+
 SafeBrowsingService::SafeBrowsingService()
     : database_(NULL),
       protocol_manager_(NULL),
diff --git a/chrome/browser/safe_browsing/safe_browsing_service.h b/chrome/browser/safe_browsing/safe_browsing_service.h
index 050437a..acecf4e 100644
--- a/chrome/browser/safe_browsing/safe_browsing_service.h
+++ b/chrome/browser/safe_browsing/safe_browsing_service.h
@@ -59,6 +59,9 @@
   // Structure used to pass parameters between the IO and UI thread when
   // interacting with the blocking page.
   struct UnsafeResource {
+    UnsafeResource();
+    ~UnsafeResource();
+
     GURL url;
     GURL original_url;
     ResourceType::Type resource_type;
@@ -70,6 +73,9 @@
 
   // Bundle of SafeBrowsing state for one URL check.
   struct SafeBrowsingCheck {
+    SafeBrowsingCheck();
+    ~SafeBrowsingCheck();
+
     GURL url;
     Client* client;
     bool need_get_hash;
@@ -77,6 +83,9 @@
     UrlCheckResult result;
     std::vector<SBPrefix> prefix_hits;
     std::vector<SBFullHashResult> full_hits;
+
+   private:
+    DISALLOW_COPY_AND_ASSIGN(SafeBrowsingCheck);
   };
 
   // Creates the safe browsing service.  Need to initialize before using.
diff --git a/chrome/browser/sidebar/sidebar_manager.cc b/chrome/browser/sidebar/sidebar_manager.cc
index 62c46c14..e77041c8 100644
--- a/chrome/browser/sidebar/sidebar_manager.cc
+++ b/chrome/browser/sidebar/sidebar_manager.cc
@@ -18,6 +18,13 @@
 #include "chrome/common/pref_names.h"
 #include "googleurl/src/gurl.h"
 
+struct SidebarManager::SidebarStateForTab {
+  // Sidebars linked to this tab.
+  ContentIdToSidebarHostMap content_id_to_sidebar_host;
+  // Content id of the currently active (expanded and visible) sidebar.
+  std::string active_content_id;
+};
+
 // static
 SidebarManager* SidebarManager::GetInstance() {
   return g_browser_process->sidebar_manager();
diff --git a/chrome/browser/sidebar/sidebar_manager.h b/chrome/browser/sidebar/sidebar_manager.h
index a7fe8b17..6f2d20b 100644
--- a/chrome/browser/sidebar/sidebar_manager.h
+++ b/chrome/browser/sidebar/sidebar_manager.h
@@ -127,25 +127,18 @@
 
   // This map stores sidebars linked to a particular tab. Sidebars are
   // identified by their unique content id (string).
-  typedef std::map<std::string, SidebarContainer*>
-      ContentIdToSidebarHostMap;
+  typedef std::map<std::string, SidebarContainer*> ContentIdToSidebarHostMap;
+
   // These two maps are for tracking dependencies between tabs and
   // their SidebarContainers.
   //
   // SidebarManager start listening to SidebarContainers when they are put
   // into these maps and removes them when they are closing.
-  typedef struct {
-    // Sidebars linked to this tab.
-    ContentIdToSidebarHostMap content_id_to_sidebar_host;
-    // Content id of the currently active (expanded and visible) sidebar.
-    std::string active_content_id;
-  } SidebarStateForTab;
-  typedef std::map<TabContents*, SidebarStateForTab>
-      TabToSidebarHostMap;
+  struct SidebarStateForTab;
+  typedef std::map<TabContents*, SidebarStateForTab> TabToSidebarHostMap;
   TabToSidebarHostMap tab_to_sidebar_host_;
 
-  typedef std::map<SidebarContainer*, TabContents*>
-      SidebarHostToTabMap;
+  typedef std::map<SidebarContainer*, TabContents*> SidebarHostToTabMap;
   SidebarHostToTabMap sidebar_host_to_tab_;
 
   DISALLOW_COPY_AND_ASSIGN(SidebarManager);
diff --git a/chrome/browser/speech/endpointer/energy_endpointer_params.cc b/chrome/browser/speech/endpointer/energy_endpointer_params.cc
new file mode 100644
index 0000000..1ab044a
--- /dev/null
+++ b/chrome/browser/speech/endpointer/energy_endpointer_params.cc
@@ -0,0 +1,53 @@
+// Copyright (c) 2010 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "chrome/browser/speech/endpointer/energy_endpointer_params.h"
+
+namespace speech_input {
+
+EnergyEndpointerParams::EnergyEndpointerParams() {
+  SetDefaults();
+}
+
+void EnergyEndpointerParams::SetDefaults() {
+  frame_period_ = 0.01f;
+  frame_duration_ = 0.01f;
+  endpoint_margin_ = 0.2f;
+  onset_window_ = 0.15f;
+  speech_on_window_ = 0.4f;
+  offset_window_ = 0.15f;
+  onset_detect_dur_ = 0.09f;
+  onset_confirm_dur_ = 0.075f;
+  on_maintain_dur_ = 0.10f;
+  offset_confirm_dur_ = 0.12f;
+  decision_threshold_ = 150.0f;
+  min_decision_threshold_ = 50.0f;
+  fast_update_dur_ = 0.2f;
+  sample_rate_ = 8000.0f;
+  min_fundamental_frequency_ = 57.143f;
+  max_fundamental_frequency_ = 400.0f;
+  contamination_rejection_period_ = 0.25f;
+}
+
+void EnergyEndpointerParams::operator=(const EnergyEndpointerParams& source) {
+  frame_period_ = source.frame_period();
+  frame_duration_ = source.frame_duration();
+  endpoint_margin_ = source.endpoint_margin();
+  onset_window_ = source.onset_window();
+  speech_on_window_ = source.speech_on_window();
+  offset_window_ = source.offset_window();
+  onset_detect_dur_ = source.onset_detect_dur();
+  onset_confirm_dur_ = source.onset_confirm_dur();
+  on_maintain_dur_ = source.on_maintain_dur();
+  offset_confirm_dur_ = source.offset_confirm_dur();
+  decision_threshold_ = source.decision_threshold();
+  min_decision_threshold_ = source.min_decision_threshold();
+  fast_update_dur_ = source.fast_update_dur();
+  sample_rate_ = source.sample_rate();
+  min_fundamental_frequency_ = source.min_fundamental_frequency();
+  max_fundamental_frequency_ = source.max_fundamental_frequency();
+  contamination_rejection_period_ = source.contamination_rejection_period();
+}
+
+}  //  namespace speech_input
diff --git a/chrome/browser/speech/endpointer/energy_endpointer_params.h b/chrome/browser/speech/endpointer/energy_endpointer_params.h
index c99ff99..86e44c991 100644
--- a/chrome/browser/speech/endpointer/energy_endpointer_params.h
+++ b/chrome/browser/speech/endpointer/energy_endpointer_params.h
@@ -12,49 +12,11 @@
 // Input parameters for the EnergyEndpointer class.
 class EnergyEndpointerParams {
  public:
-  EnergyEndpointerParams() {
-    SetDefaults();
-  }
+  EnergyEndpointerParams();
 
-  void SetDefaults() {
-    frame_period_ = 0.01f;
-    frame_duration_ = 0.01f;
-    endpoint_margin_ = 0.2f;
-    onset_window_ = 0.15f;
-    speech_on_window_ = 0.4f;
-    offset_window_ = 0.15f;
-    onset_detect_dur_ = 0.09f;
-    onset_confirm_dur_ = 0.075f;
-    on_maintain_dur_ = 0.10f;
-    offset_confirm_dur_ = 0.12f;
-    decision_threshold_ = 150.0f;
-    min_decision_threshold_ = 50.0f;
-    fast_update_dur_ = 0.2f;
-    sample_rate_ = 8000.0f;
-    min_fundamental_frequency_ = 57.143f;
-    max_fundamental_frequency_ = 400.0f;
-    contamination_rejection_period_ = 0.25f;
-  }
+  void SetDefaults();
 
-  void operator=(const EnergyEndpointerParams& source) {
-    frame_period_ = source.frame_period();
-    frame_duration_ = source.frame_duration();
-    endpoint_margin_ = source.endpoint_margin();
-    onset_window_ = source.onset_window();
-    speech_on_window_ = source.speech_on_window();
-    offset_window_ = source.offset_window();
-    onset_detect_dur_ = source.onset_detect_dur();
-    onset_confirm_dur_ = source.onset_confirm_dur();
-    on_maintain_dur_ = source.on_maintain_dur();
-    offset_confirm_dur_ = source.offset_confirm_dur();
-    decision_threshold_ = source.decision_threshold();
-    min_decision_threshold_ = source.min_decision_threshold();
-    fast_update_dur_ = source.fast_update_dur();
-    sample_rate_ = source.sample_rate();
-    min_fundamental_frequency_ = source.min_fundamental_frequency();
-    max_fundamental_frequency_ = source.max_fundamental_frequency();
-    contamination_rejection_period_ = source.contamination_rejection_period();
-  }
+  void operator=(const EnergyEndpointerParams& source);
 
   // Accessors and mutators
   float frame_period() const { return frame_period_; }
diff --git a/chrome/browser/speech/speech_recognition_request.cc b/chrome/browser/speech/speech_recognition_request.cc
index 4da62ef..adf473f 100644
--- a/chrome/browser/speech/speech_recognition_request.cc
+++ b/chrome/browser/speech/speech_recognition_request.cc
@@ -96,6 +96,8 @@
   DCHECK(delegate);
 }
 
+SpeechRecognitionRequest::~SpeechRecognitionRequest() {}
+
 bool SpeechRecognitionRequest::Send(const std::string& content_type,
                                     const std::string& audio_data) {
   DCHECK(!url_fetcher_.get());
diff --git a/chrome/browser/speech/speech_recognition_request.h b/chrome/browser/speech/speech_recognition_request.h
index a8ffe2f..6c01983 100644
--- a/chrome/browser/speech/speech_recognition_request.h
+++ b/chrome/browser/speech/speech_recognition_request.h
@@ -38,6 +38,8 @@
                            const GURL& url,
                            Delegate* delegate);
 
+  virtual ~SpeechRecognitionRequest();
+
   // Sends a new request with the given audio data, returns true if successful.
   // The same object can be used to send multiple requests but only after the
   // previous request has completed.
diff --git a/chrome/browser/ssl/ssl_request_info.cc b/chrome/browser/ssl/ssl_request_info.cc
new file mode 100644
index 0000000..7ba88b0
--- /dev/null
+++ b/chrome/browser/ssl/ssl_request_info.cc
@@ -0,0 +1,23 @@
+// Copyright (c) 2010 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "chrome/browser/ssl/ssl_request_info.h"
+
+SSLRequestInfo::SSLRequestInfo(const GURL& url,
+                               ResourceType::Type resource_type,
+                               const std::string& frame_origin,
+                               const std::string& main_frame_origin,
+                               int child_id,
+                               int ssl_cert_id,
+                               int ssl_cert_status)
+    : url_(url),
+      resource_type_(resource_type),
+      frame_origin_(frame_origin),
+      main_frame_origin_(main_frame_origin),
+      child_id_(child_id),
+      ssl_cert_id_(ssl_cert_id),
+      ssl_cert_status_(ssl_cert_status) {
+}
+
+SSLRequestInfo::~SSLRequestInfo() {}
diff --git a/chrome/browser/ssl/ssl_request_info.h b/chrome/browser/ssl/ssl_request_info.h
index 2ce3e88..dc919cd1 100644
--- a/chrome/browser/ssl/ssl_request_info.h
+++ b/chrome/browser/ssl/ssl_request_info.h
@@ -8,6 +8,7 @@
 
 #include <string>
 
+#include "base/ref_counted.h"
 #include "googleurl/src/gurl.h"
 #include "webkit/glue/resource_type.h"
 
@@ -22,15 +23,7 @@
                  const std::string& main_frame_origin,
                  int child_id,
                  int ssl_cert_id,
-                 int ssl_cert_status)
-      : url_(url),
-        resource_type_(resource_type),
-        frame_origin_(frame_origin),
-        main_frame_origin_(main_frame_origin),
-        child_id_(child_id),
-        ssl_cert_id_(ssl_cert_id),
-        ssl_cert_status_(ssl_cert_status) {
-  }
+                 int ssl_cert_status);
 
   const GURL& url() const { return url_; }
   ResourceType::Type resource_type() const { return resource_type_; }
@@ -43,7 +36,7 @@
  private:
   friend class base::RefCounted<SSLRequestInfo>;
 
-  ~SSLRequestInfo() {}
+  virtual ~SSLRequestInfo();
 
   GURL url_;
   ResourceType::Type resource_type_;
diff --git a/chrome/browser/sync/glue/autofill_change_processor.cc b/chrome/browser/sync/glue/autofill_change_processor.cc
index c025e84..a2a8db4 100644
--- a/chrome/browser/sync/glue/autofill_change_processor.cc
+++ b/chrome/browser/sync/glue/autofill_change_processor.cc
@@ -20,6 +20,17 @@
 
 namespace browser_sync {
 
+struct AutofillChangeProcessor::AutofillChangeRecord {
+  sync_api::SyncManager::ChangeRecord::Action action_;
+  int64 id_;
+  sync_pb::AutofillSpecifics autofill_;
+  AutofillChangeRecord(sync_api::SyncManager::ChangeRecord::Action action,
+                       int64 id, const sync_pb::AutofillSpecifics& autofill)
+      : action_(action),
+        id_(id),
+        autofill_(autofill) { }
+};
+
 AutofillChangeProcessor::AutofillChangeProcessor(
     AutofillModelAssociator* model_associator,
     WebDatabase* web_database,
@@ -38,6 +49,8 @@
   StartObserving();
 }
 
+AutofillChangeProcessor::~AutofillChangeProcessor() {}
+
 void AutofillChangeProcessor::Observe(NotificationType type,
                                       const NotificationSource& source,
                                       const NotificationDetails& details) {
diff --git a/chrome/browser/sync/glue/autofill_change_processor.h b/chrome/browser/sync/glue/autofill_change_processor.h
index 0680d0c63..7a845206 100644
--- a/chrome/browser/sync/glue/autofill_change_processor.h
+++ b/chrome/browser/sync/glue/autofill_change_processor.h
@@ -40,7 +40,7 @@
                           WebDatabase* web_database,
                           PersonalDataManager* personal_data,
                           UnrecoverableErrorHandler* error_handler);
-  virtual ~AutofillChangeProcessor() {}
+  virtual ~AutofillChangeProcessor();
 
   // NotificationObserver implementation.
   // WebDataService -> sync_api model change application.
@@ -73,17 +73,6 @@
   virtual void StopImpl();
 
  private:
-  struct AutofillChangeRecord {
-    sync_api::SyncManager::ChangeRecord::Action action_;
-    int64 id_;
-    sync_pb::AutofillSpecifics autofill_;
-    AutofillChangeRecord(sync_api::SyncManager::ChangeRecord::Action action,
-                         int64 id, const sync_pb::AutofillSpecifics& autofill)
-        : action_(action),
-          id_(id),
-          autofill_(autofill) { }
-  };
-
   void StartObserving();
   void StopObserving();
 
@@ -170,6 +159,7 @@
 
   // Record of changes from ApplyChangesFromSyncModel. These are then processed
   // in CommitChangesFromSyncModel.
+  struct AutofillChangeRecord;
   std::vector<AutofillChangeRecord> autofill_changes_;
 
   DISALLOW_COPY_AND_ASSIGN(AutofillChangeProcessor);
diff --git a/chrome/browser/sync/glue/autofill_model_associator.cc b/chrome/browser/sync/glue/autofill_model_associator.cc
index 43914c2a..b550ab5 100644
--- a/chrome/browser/sync/glue/autofill_model_associator.cc
+++ b/chrome/browser/sync/glue/autofill_model_associator.cc
@@ -30,6 +30,25 @@
 
 static const int kMaxNumAttemptsToFindUniqueLabel = 100;
 
+struct AutofillModelAssociator::DataBundle {
+  std::set<AutofillKey> current_entries;
+  std::vector<AutofillEntry> new_entries;
+  std::set<string16> current_profiles;
+  std::vector<AutoFillProfile*> updated_profiles;
+  std::vector<AutoFillProfile*> new_profiles;  // We own these pointers.
+  ~DataBundle() { STLDeleteElements(&new_profiles); }
+};
+
+AutofillModelAssociator::DoOptimisticRefreshTask::DoOptimisticRefreshTask(
+    PersonalDataManager* pdm) : pdm_(pdm) {}
+
+AutofillModelAssociator::DoOptimisticRefreshTask::~DoOptimisticRefreshTask() {}
+
+void AutofillModelAssociator::DoOptimisticRefreshTask::Run() {
+  DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
+  pdm_->Refresh();
+}
+
 AutofillModelAssociator::AutofillModelAssociator(
     ProfileSyncService* sync_service,
     WebDatabase* web_database,
@@ -396,6 +415,17 @@
   abort_association_pending_ = true;
 }
 
+const std::string*
+AutofillModelAssociator::GetChromeNodeFromSyncId(int64 sync_id) {
+  return NULL;
+}
+
+bool AutofillModelAssociator::InitSyncNodeFromChromeId(
+    std::string node_id,
+    sync_api::BaseNode* sync_node) {
+  return false;
+}
+
 int64 AutofillModelAssociator::GetSyncIdFromChromeId(
     const std::string autofill) {
   AutofillToSyncIdMap::const_iterator iter = id_map_.find(autofill);
diff --git a/chrome/browser/sync/glue/autofill_model_associator.h b/chrome/browser/sync/glue/autofill_model_associator.h
index f0dbe1a..d4e5363 100644
--- a/chrome/browser/sync/glue/autofill_model_associator.h
+++ b/chrome/browser/sync/glue/autofill_model_associator.h
@@ -15,7 +15,6 @@
 #include "base/lock.h"
 #include "base/ref_counted.h"
 #include "chrome/browser/autofill/personal_data_manager.h"
-#include "chrome/browser/browser_thread.h"
 #include "chrome/browser/sync/engine/syncapi.h"
 #include "chrome/browser/sync/glue/model_associator.h"
 #include "chrome/browser/sync/protocol/autofill_specifics.pb.h"
@@ -56,11 +55,9 @@
   // PersonalDataManager living on the UI thread that it needs to refresh.
   class DoOptimisticRefreshTask : public Task {
    public:
-    explicit DoOptimisticRefreshTask(PersonalDataManager* pdm) : pdm_(pdm) {}
-    virtual void Run() {
-      DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
-      pdm_->Refresh();
-    }
+    explicit DoOptimisticRefreshTask(PersonalDataManager* pdm);
+    virtual ~DoOptimisticRefreshTask();
+    virtual void Run();
    private:
     scoped_refptr<PersonalDataManager> pdm_;
   };
@@ -81,15 +78,11 @@
   virtual void AbortAssociation();
 
   // Not implemented.
-  virtual const std::string* GetChromeNodeFromSyncId(int64 sync_id) {
-    return NULL;
-  }
+  virtual const std::string* GetChromeNodeFromSyncId(int64 sync_id);
 
   // Not implemented.
   virtual bool InitSyncNodeFromChromeId(std::string node_id,
-                                        sync_api::BaseNode* sync_node) {
-    return false;
-  }
+                                        sync_api::BaseNode* sync_node);
 
   // Returns the sync id for the given autofill name, or sync_api::kInvalidId
   // if the autofill name is not associated to any sync id.
@@ -137,14 +130,7 @@
 
   // A convenience wrapper of a bunch of state we pass around while associating
   // models, and send to the WebDatabase for persistence.
-  struct DataBundle {
-    std::set<AutofillKey> current_entries;
-    std::vector<AutofillEntry> new_entries;
-    std::set<string16> current_profiles;
-    std::vector<AutoFillProfile*> updated_profiles;
-    std::vector<AutoFillProfile*> new_profiles;  // We own these pointers.
-    ~DataBundle() { STLDeleteElements(&new_profiles); }
-  };
+  struct DataBundle;
 
   // Helper to query WebDatabase for the current autofill state.
   bool LoadAutofillData(std::vector<AutofillEntry>* entries,
diff --git a/chrome/browser/sync/glue/extension_data.cc b/chrome/browser/sync/glue/extension_data.cc
index eb4fea6..c62c362 100644
--- a/chrome/browser/sync/glue/extension_data.cc
+++ b/chrome/browser/sync/glue/extension_data.cc
@@ -19,6 +19,8 @@
   return extension_data;
 }
 
+ExtensionData::~ExtensionData() {}
+
 const sync_pb::ExtensionSpecifics& ExtensionData::merged_data() const {
   DcheckIsExtensionSpecificsValid(merged_data_);
   return merged_data_;
diff --git a/chrome/browser/sync/glue/extension_data.h b/chrome/browser/sync/glue/extension_data.h
index 67951b9..73316de 100644
--- a/chrome/browser/sync/glue/extension_data.h
+++ b/chrome/browser/sync/glue/extension_data.h
@@ -28,6 +28,8 @@
   static ExtensionData FromData(
       Source source, const sync_pb::ExtensionSpecifics& data);
 
+  ~ExtensionData();
+
   // Implicit copy constructor and assignment operator welcome.
 
   // Returns the version of the data that all sources should
diff --git a/chrome/browser/sync/glue/password_model_associator.cc b/chrome/browser/sync/glue/password_model_associator.cc
index 7d33a0e6..f9ab890 100644
--- a/chrome/browser/sync/glue/password_model_associator.cc
+++ b/chrome/browser/sync/glue/password_model_associator.cc
@@ -37,6 +37,8 @@
 #endif
 }
 
+PasswordModelAssociator::~PasswordModelAssociator() {}
+
 bool PasswordModelAssociator::AssociateModels() {
   DCHECK(expected_loop_ == MessageLoop::current());
   {
diff --git a/chrome/browser/sync/glue/password_model_associator.h b/chrome/browser/sync/glue/password_model_associator.h
index 096c3af..22c81bab 100644
--- a/chrome/browser/sync/glue/password_model_associator.h
+++ b/chrome/browser/sync/glue/password_model_associator.h
@@ -52,7 +52,7 @@
   static syncable::ModelType model_type() { return syncable::PASSWORDS; }
   PasswordModelAssociator(ProfileSyncService* sync_service,
                           PasswordStore* password_store);
-  virtual ~PasswordModelAssociator() { }
+  virtual ~PasswordModelAssociator();
 
   // PerDataTypeAssociatorInterface implementation.
   //
diff --git a/chrome/browser/sync/glue/password_model_worker.cc b/chrome/browser/sync/glue/password_model_worker.cc
index 9c5b0d6..f832ac1 100644
--- a/chrome/browser/sync/glue/password_model_worker.cc
+++ b/chrome/browser/sync/glue/password_model_worker.cc
@@ -19,6 +19,8 @@
   DCHECK(password_store);
 }
 
+PasswordModelWorker::~PasswordModelWorker() {}
+
 void PasswordModelWorker::DoWorkAndWaitUntilDone(Callback0::Type* work) {
   WaitableEvent done(false, false);
   password_store_->ScheduleTask(
diff --git a/chrome/browser/sync/glue/password_model_worker.h b/chrome/browser/sync/glue/password_model_worker.h
index cd55c79..cd16874 100644
--- a/chrome/browser/sync/glue/password_model_worker.h
+++ b/chrome/browser/sync/glue/password_model_worker.h
@@ -26,6 +26,7 @@
 class PasswordModelWorker : public browser_sync::ModelSafeWorker {
  public:
   explicit PasswordModelWorker(PasswordStore* password_store);
+  virtual ~PasswordModelWorker();
 
   // ModelSafeWorker implementation. Called on syncapi SyncerThread.
   void DoWorkAndWaitUntilDone(Callback0::Type* work);
diff --git a/chrome/browser/sync/glue/typed_url_model_associator.cc b/chrome/browser/sync/glue/typed_url_model_associator.cc
index dc9cc3a..ad156295 100644
--- a/chrome/browser/sync/glue/typed_url_model_associator.cc
+++ b/chrome/browser/sync/glue/typed_url_model_associator.cc
@@ -29,6 +29,8 @@
   DCHECK(!BrowserThread::CurrentlyOn(BrowserThread::UI));
 }
 
+TypedUrlModelAssociator::~TypedUrlModelAssociator() {}
+
 bool TypedUrlModelAssociator::AssociateModels() {
   VLOG(1) << "Associating TypedUrl Models";
   DCHECK(expected_loop_ == MessageLoop::current());
diff --git a/chrome/browser/sync/glue/typed_url_model_associator.h b/chrome/browser/sync/glue/typed_url_model_associator.h
index e894100..a07bae91 100644
--- a/chrome/browser/sync/glue/typed_url_model_associator.h
+++ b/chrome/browser/sync/glue/typed_url_model_associator.h
@@ -57,7 +57,7 @@
   static syncable::ModelType model_type() { return syncable::TYPED_URLS; }
   TypedUrlModelAssociator(ProfileSyncService* sync_service,
                           history::HistoryBackend* history_backend);
-  virtual ~TypedUrlModelAssociator() { }
+  virtual ~TypedUrlModelAssociator();
 
   // PerDataTypeAssociatorInterface implementation.
   //
diff --git a/chrome/browser/webdata/autofill_change.cc b/chrome/browser/webdata/autofill_change.cc
new file mode 100644
index 0000000..7d51c0e
--- /dev/null
+++ b/chrome/browser/webdata/autofill_change.cc
@@ -0,0 +1,36 @@
+// Copyright (c) 2010 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "chrome/browser/webdata/autofill_change.h"
+
+AutofillProfileChange::AutofillProfileChange(Type t,
+                                             string16 k,
+                                             const AutoFillProfile* p,
+                                             const string16& pre_update_label)
+    : GenericAutofillChange<string16>(t, k),
+      profile_(p),
+      pre_update_label_(pre_update_label) {
+}
+
+AutofillProfileChange::~AutofillProfileChange() {}
+
+bool AutofillProfileChange::operator==(
+    const AutofillProfileChange& change) const {
+  if (type() != change.type() || key() != change.key())
+    return false;
+  if (type() == REMOVE)
+    return true;
+  // TODO(dhollowa): Replace with |AutoFillProfile::Compare|.
+  // http://crbug.com/58813
+  if (*profile() != *change.profile())
+    return false;
+  return type() == ADD || pre_update_label_ == change.pre_update_label();
+}
+
+AutofillCreditCardChange::AutofillCreditCardChange(Type t,
+                                                   string16 k,
+                                                   const CreditCard* card)
+    : GenericAutofillChange<string16>(t, k), credit_card_(card) {}
+
+AutofillCreditCardChange::~AutofillCreditCardChange() {}
diff --git a/chrome/browser/webdata/autofill_change.h b/chrome/browser/webdata/autofill_change.h
index 11723d3..73c9c79 100644
--- a/chrome/browser/webdata/autofill_change.h
+++ b/chrome/browser/webdata/autofill_change.h
@@ -52,23 +52,13 @@
   // If t == REMOVE, |p| should be NULL. |pre_update_label| only applies to
   // UPDATE changes.
   AutofillProfileChange(Type t, string16 k, const AutoFillProfile* p,
-      const string16& pre_update_label)
-      : GenericAutofillChange<string16>(t, k), profile_(p),
-        pre_update_label_(pre_update_label) {}
+                        const string16& pre_update_label);
+  virtual ~AutofillProfileChange();
 
   const AutoFillProfile* profile() const { return profile_; }
   const string16& pre_update_label() const { return pre_update_label_; }
-  bool operator==(const AutofillProfileChange& change) const {
-    if (type() != change.type() || key() != change.key())
-      return false;
-    if (type() == REMOVE)
-      return true;
-    // TODO(dhollowa): Replace with |AutoFillProfile::Compare|.
-    // http://crbug.com/58813
-    if (*profile() != *change.profile())
-      return false;
-    return type() == ADD || pre_update_label_ == change.pre_update_label();
-  }
+  bool operator==(const AutofillProfileChange& change) const;
+
  private:
   const AutoFillProfile* profile_;  // Unowned pointer, can be NULL.
   const string16 pre_update_label_;
@@ -77,8 +67,8 @@
 class AutofillCreditCardChange : public GenericAutofillChange<string16> {
  public:
   // If t == REMOVE, |card| should be NULL.
-  AutofillCreditCardChange(Type t, string16 k, const CreditCard* card)
-      : GenericAutofillChange<string16>(t, k), credit_card_(card) {}
+  AutofillCreditCardChange(Type t, string16 k, const CreditCard* card);
+  virtual ~AutofillCreditCardChange();
 
   const CreditCard* credit_card() const { return credit_card_; }
   bool operator==(const AutofillCreditCardChange& change) const {
diff --git a/chrome/browser/webdata/autofill_entry.cc b/chrome/browser/webdata/autofill_entry.cc
index d0f8913d..31bc406f 100644
--- a/chrome/browser/webdata/autofill_entry.cc
+++ b/chrome/browser/webdata/autofill_entry.cc
@@ -4,6 +4,26 @@
 
 #include <set>
 #include "chrome/browser/webdata/autofill_entry.h"
+#include "base/utf_string_conversions.h"
+
+AutofillKey::AutofillKey() {}
+
+AutofillKey::AutofillKey(const string16& name, const string16& value)
+    : name_(name),
+      value_(value) {
+}
+
+AutofillKey::AutofillKey(const char* name, const char* value)
+    : name_(UTF8ToUTF16(name)),
+      value_(UTF8ToUTF16(value)) {
+}
+
+AutofillKey::AutofillKey(const AutofillKey& key)
+    : name_(key.name()),
+      value_(key.value()) {
+}
+
+AutofillKey::~AutofillKey() {}
 
 bool AutofillKey::operator==(const AutofillKey& key) const {
   return name_ == key.name() && value_ == key.value();
@@ -20,6 +40,14 @@
   }
 }
 
+AutofillEntry::AutofillEntry(const AutofillKey& key,
+                             const std::vector<base::Time>& timestamps)
+    : key_(key),
+      timestamps_(timestamps) {
+}
+
+AutofillEntry::~AutofillEntry() {}
+
 bool AutofillEntry::operator==(const AutofillEntry& entry) const {
   if (!(key_ == entry.key()))
     return false;
diff --git a/chrome/browser/webdata/autofill_entry.h b/chrome/browser/webdata/autofill_entry.h
index 4917b292..7aa9139 100644
--- a/chrome/browser/webdata/autofill_entry.h
+++ b/chrome/browser/webdata/autofill_entry.h
@@ -9,21 +9,15 @@
 #include <vector>
 #include "base/string16.h"
 #include "base/time.h"
-#include "base/utf_string_conversions.h"
 
 class AutofillKey {
  public:
-  AutofillKey() {}
-  AutofillKey(const string16& name, const string16& value)
-      : name_(name),
-        value_(value) {}
-  AutofillKey(const char* name, const char* value)
-      : name_(UTF8ToUTF16(name)),
-        value_(UTF8ToUTF16(value)) {}
-  AutofillKey(const AutofillKey& key)
-      : name_(key.name()),
-        value_(key.value()) {}
-  virtual ~AutofillKey() {}
+  AutofillKey();
+  AutofillKey(const string16& name, const string16& value);
+  AutofillKey(const char* name, const char* value);
+  AutofillKey(const AutofillKey& key);
+  virtual ~AutofillKey();
+
   const string16& name() const { return name_; }
   const string16& value() const { return value_; }
 
@@ -38,9 +32,8 @@
 class AutofillEntry {
  public:
   AutofillEntry(const AutofillKey& key,
-                const std::vector<base::Time>& timestamps)
-      : key_(key),
-        timestamps_(timestamps) {}
+                const std::vector<base::Time>& timestamps);
+  ~AutofillEntry();
 
   const AutofillKey& key() const { return key_; }
   const std::vector<base::Time>& timestamps() const { return timestamps_; }
diff --git a/chrome/browser/worker_host/message_port_dispatcher.cc b/chrome/browser/worker_host/message_port_dispatcher.cc
index edd4a94..49c87a09 100644
--- a/chrome/browser/worker_host/message_port_dispatcher.cc
+++ b/chrome/browser/worker_host/message_port_dispatcher.cc
@@ -12,6 +12,21 @@
 #include "chrome/common/notification_service.h"
 #include "chrome/common/worker_messages.h"
 
+struct MessagePortDispatcher::MessagePort {
+  // sender and route_id are what we need to send messages to the port.
+  IPC::Message::Sender* sender;
+  int route_id;
+  // A function pointer to generate a new route id for the sender above.
+  // Owned by "sender" above, so don't delete.
+  CallbackWithReturnValue<int>::Type* next_routing_id;
+  // A globally unique id for this message port.
+  int message_port_id;
+  // The globally unique id of the entangled message port.
+  int entangled_message_port_id;
+  // If true, all messages to this message port are queued and not delivered.
+  bool queue_messages;
+  QueuedMessages queued_messages;
+};
 
 MessagePortDispatcher* MessagePortDispatcher::GetInstance() {
   return Singleton<MessagePortDispatcher>::get();
diff --git a/chrome/browser/worker_host/message_port_dispatcher.h b/chrome/browser/worker_host/message_port_dispatcher.h
index b8f7021..566416b 100644
--- a/chrome/browser/worker_host/message_port_dispatcher.h
+++ b/chrome/browser/worker_host/message_port_dispatcher.h
@@ -74,22 +74,7 @@
   // verify that the message port id exists.
   void Erase(int message_port_id);
 
-  struct MessagePort {
-    // sender and route_id are what we need to send messages to the port.
-    IPC::Message::Sender* sender;
-    int route_id;
-    // A function pointer to generate a new route id for the sender above.
-    // Owned by "sender" above, so don't delete.
-    CallbackWithReturnValue<int>::Type* next_routing_id;
-    // A globally unique id for this message port.
-    int message_port_id;
-    // The globally unique id of the entangled message port.
-    int entangled_message_port_id;
-    // If true, all messages to this message port are queued and not delivered.
-    bool queue_messages;
-    QueuedMessages queued_messages;
-  };
-
+  struct MessagePort;
   typedef std::map<int, MessagePort> MessagePorts;
   MessagePorts message_ports_;
 
diff --git a/chrome/chrome.gyp b/chrome/chrome.gyp
index 91a4636..b9a30e8 100644
--- a/chrome/chrome.gyp
+++ b/chrome/chrome.gyp
@@ -1134,6 +1134,7 @@
         'service/cloud_print/job_status_updater.cc',
         'service/cloud_print/job_status_updater.h',
         'service/cloud_print/print_system_dummy.cc',
+        'service/cloud_print/print_system.cc',
         'service/cloud_print/print_system.h',
         'service/cloud_print/printer_job_handler.cc',
         'service/cloud_print/printer_job_handler.h',
diff --git a/chrome/chrome_browser.gypi b/chrome/chrome_browser.gypi
index 20e50d67..d9f8e78 100644
--- a/chrome/chrome_browser.gypi
+++ b/chrome/chrome_browser.gypi
@@ -1619,6 +1619,7 @@
         'browser/fav_icon_helper.h',
         'browser/favicon_service.cc',
         'browser/favicon_service.h',
+        'browser/file_path_watcher.cc',
         'browser/file_path_watcher.h',
         'browser/file_path_watcher_inotify.cc',
         'browser/file_path_watcher_mac.cc',
@@ -1651,6 +1652,7 @@
         'browser/geolocation/core_location_data_provider_mac.mm',
         'browser/geolocation/core_location_provider_mac.h',
         'browser/geolocation/core_location_provider_mac.mm',
+        'browser/geolocation/device_data_provider.cc',
         'browser/geolocation/device_data_provider.h',
         'browser/geolocation/empty_device_data_provider.cc',
         'browser/geolocation/empty_device_data_provider.h',
@@ -2094,6 +2096,7 @@
         'browser/in_process_webkit/dom_storage_dispatcher_host.h',
         'browser/in_process_webkit/dom_storage_namespace.cc',
         'browser/in_process_webkit/dom_storage_namespace.h',
+        'browser/in_process_webkit/indexed_db_callbacks.cc',
         'browser/in_process_webkit/indexed_db_callbacks.h',
         'browser/in_process_webkit/indexed_db_context.cc',
         'browser/in_process_webkit/indexed_db_context.h',
@@ -2535,6 +2538,7 @@
         'browser/renderer_host/resource_message_filter_win.cc',
         'browser/renderer_host/resource_queue.cc',
         'browser/renderer_host/resource_queue.h',
+        'browser/renderer_host/resource_request_details.cc',
         'browser/renderer_host/resource_request_details.h',
         'browser/renderer_host/safe_browsing_resource_handler.cc',
         'browser/renderer_host/safe_browsing_resource_handler.h',
@@ -2656,6 +2660,7 @@
         'browser/speech/endpointer/endpointer.h',
         'browser/speech/endpointer/energy_endpointer.cc',
         'browser/speech/endpointer/energy_endpointer.h',
+        'browser/speech/endpointer/energy_endpointer_params.cc',
         'browser/speech/endpointer/energy_endpointer_params.h',
         'browser/speech/speech_input_bubble.h',
         'browser/speech/speech_input_bubble.cc',
@@ -2699,6 +2704,7 @@
         'browser/ssl/ssl_policy.h',
         'browser/ssl/ssl_policy_backend.cc',
         'browser/ssl/ssl_policy_backend.h',
+        'browser/ssl/ssl_request_info.cc',
         'browser/ssl/ssl_request_info.h',
         'browser/ssl_client_certificate_selector.h',
         'browser/status_bubble.h',
@@ -3271,6 +3277,7 @@
         'browser/visitedlink_master.h',
         'browser/visitedlink_event_listener.cc',
         'browser/visitedlink_event_listener.h',
+        'browser/webdata/autofill_change.cc',
         'browser/webdata/autofill_change.h',
         'browser/webdata/autofill_entry.cc',
         'browser/webdata/autofill_entry.h',
diff --git a/chrome/chrome_common.gypi b/chrome/chrome_common.gypi
index 463752c6..e7970de 100644
--- a/chrome/chrome_common.gypi
+++ b/chrome/chrome_common.gypi
@@ -53,6 +53,7 @@
           'common/devtools_messages.cc',
           'common/devtools_messages.h',
           'common/devtools_messages_internal.h',
+          'common/dx_diag_node.cc',
           'common/dx_diag_node.h',
           'common/file_system/webfilesystem_callback_dispatcher.cc',
           'common/file_system/webfilesystem_callback_dispatcher.h',
@@ -64,6 +65,8 @@
           'common/font_descriptor_mac.mm',
           'common/geoposition.cc',
           'common/geoposition.h',
+          'common/gpu_create_command_buffer_config.cc',
+          'common/gpu_create_command_buffer_config.h',
           'common/gpu_info.h',
           'common/gpu_info.cc',
           'common/gpu_messages.cc',
diff --git a/chrome/common/dx_diag_node.cc b/chrome/common/dx_diag_node.cc
new file mode 100644
index 0000000..85beb5b
--- /dev/null
+++ b/chrome/common/dx_diag_node.cc
@@ -0,0 +1,9 @@
+// Copyright (c) 2010 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "chrome/common/dx_diag_node.h"
+
+DxDiagNode::DxDiagNode() {}
+
+DxDiagNode::~DxDiagNode() {}
diff --git a/chrome/common/dx_diag_node.h b/chrome/common/dx_diag_node.h
index 9f20d92..65222135 100644
--- a/chrome/common/dx_diag_node.h
+++ b/chrome/common/dx_diag_node.h
@@ -12,6 +12,9 @@
 #include <string>
 
 struct DxDiagNode {
+  DxDiagNode();
+  ~DxDiagNode();
+
   std::map<std::string, std::string> values;
   std::map<std::string, DxDiagNode> children;
 };
diff --git a/chrome/common/gpu_create_command_buffer_config.cc b/chrome/common/gpu_create_command_buffer_config.cc
new file mode 100644
index 0000000..e8ab9d7
--- /dev/null
+++ b/chrome/common/gpu_create_command_buffer_config.cc
@@ -0,0 +1,16 @@
+// Copyright (c) 2010 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "chrome/common/gpu_create_command_buffer_config.h"
+
+GPUCreateCommandBufferConfig::GPUCreateCommandBufferConfig() {}
+
+GPUCreateCommandBufferConfig::GPUCreateCommandBufferConfig(
+    const std::string& _allowed_extensions,
+    const std::vector<int>& _attribs)
+    : allowed_extensions(_allowed_extensions),
+      attribs(_attribs) {
+}
+
+GPUCreateCommandBufferConfig::~GPUCreateCommandBufferConfig() {}
diff --git a/chrome/common/gpu_create_command_buffer_config.h b/chrome/common/gpu_create_command_buffer_config.h
index 8a2525f..0cb217a 100644
--- a/chrome/common/gpu_create_command_buffer_config.h
+++ b/chrome/common/gpu_create_command_buffer_config.h
@@ -11,14 +11,12 @@
 
 // Parameters passed when initializing a GPU channel.
 struct GPUCreateCommandBufferConfig {
-  GPUCreateCommandBufferConfig() { }
+  GPUCreateCommandBufferConfig();
 
-  GPUCreateCommandBufferConfig(
-      const std::string& _allowed_extensions,
-      const std::vector<int>& _attribs)
-      : allowed_extensions(_allowed_extensions),
-        attribs(_attribs) {
-  }
+  GPUCreateCommandBufferConfig(const std::string& _allowed_extensions,
+                               const std::vector<int>& _attribs);
+
+  ~GPUCreateCommandBufferConfig();
 
   std::string allowed_extensions;
   std::vector<int> attribs;
diff --git a/chrome/gpu/gpu_video_decoder.cc b/chrome/gpu/gpu_video_decoder.cc
index 6c90df54..b998149 100644
--- a/chrome/gpu/gpu_video_decoder.cc
+++ b/chrome/gpu/gpu_video_decoder.cc
@@ -20,6 +20,15 @@
 #include <d3d9.h>
 #endif
 
+struct GpuVideoDecoder::PendingAllocation {
+  size_t n;
+  size_t width;
+  size_t height;
+  media::VideoFrame::Format format;
+  std::vector<scoped_refptr<media::VideoFrame> >* frames;
+  Task* task;
+};
+
 void GpuVideoDecoder::OnChannelConnected(int32 peer_pid) {
 }
 
@@ -251,6 +260,8 @@
 #endif
 }
 
+GpuVideoDecoder::~GpuVideoDecoder() {}
+
 void GpuVideoDecoder::OnInitialize(const GpuVideoDecoderInitParam& param) {
   // TODO(jiesun): codec id should come from |param|.
   config_.codec = media::kCodecH264;
diff --git a/chrome/gpu/gpu_video_decoder.h b/chrome/gpu/gpu_video_decoder.h
index 9a339e1..25885c8 100644
--- a/chrome/gpu/gpu_video_decoder.h
+++ b/chrome/gpu/gpu_video_decoder.h
@@ -97,7 +97,7 @@
                   IPC::Message::Sender* sender,
                   base::ProcessHandle handle,
                   gpu::gles2::GLES2Decoder* decoder);
-  virtual ~GpuVideoDecoder() {}
+  virtual ~GpuVideoDecoder();
 
   // IPC::Channel::Listener implementation.
   virtual void OnChannelConnected(int32 peer_pid);
@@ -130,14 +130,7 @@
   void SetGpuVideoDevice(GpuVideoDevice* device);
 
  private:
-  struct PendingAllocation {
-    size_t n;
-    size_t width;
-    size_t height;
-    media::VideoFrame::Format format;
-    std::vector<scoped_refptr<media::VideoFrame> >* frames;
-    Task* task;
-  };
+  struct PendingAllocation;
 
   int32 decoder_host_id() { return decoder_host_id_; }
 
diff --git a/chrome/gpu/gpu_video_decoder_unittest.cc b/chrome/gpu/gpu_video_decoder_unittest.cc
index 30f1664a..b1ea751 100644
--- a/chrome/gpu/gpu_video_decoder_unittest.cc
+++ b/chrome/gpu/gpu_video_decoder_unittest.cc
@@ -2,6 +2,7 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
+#include "base/message_loop.h"
 #include "base/process.h"
 #include "chrome/common/gpu_messages.h"
 #include "chrome/gpu/gpu_video_decoder.h"
diff --git a/chrome/gpu/gpu_video_service.cc b/chrome/gpu/gpu_video_service.cc
index 2ef32e8..03025b8 100644
--- a/chrome/gpu/gpu_video_service.cc
+++ b/chrome/gpu/gpu_video_service.cc
@@ -7,10 +7,17 @@
 #include "chrome/gpu/gpu_video_decoder.h"
 #include "chrome/gpu/gpu_video_service.h"
 
+struct GpuVideoService::GpuVideoDecoderInfo {
+  scoped_refptr<GpuVideoDecoder> decoder;
+  GpuChannel* channel;
+};
+
+
 GpuVideoService::GpuVideoService() {
   // TODO(jiesun): move this time consuming stuff out of here.
   IntializeGpuVideoService();
 }
+
 GpuVideoService::~GpuVideoService() {
   // TODO(jiesun): move this time consuming stuff out of here.
   UnintializeGpuVideoService();
diff --git a/chrome/gpu/gpu_video_service.h b/chrome/gpu/gpu_video_service.h
index a2c090e0..e6af444 100644
--- a/chrome/gpu/gpu_video_service.h
+++ b/chrome/gpu/gpu_video_service.h
@@ -32,10 +32,7 @@
                            int32 decoder_id);
 
  private:
-  struct GpuVideoDecoderInfo {
-    scoped_refptr<GpuVideoDecoder> decoder;
-    GpuChannel* channel;
-  };
+  struct GpuVideoDecoderInfo;
 
   GpuVideoService();
   virtual ~GpuVideoService();
diff --git a/chrome/renderer/extensions/bindings_utils.cc b/chrome/renderer/extensions/bindings_utils.cc
index 2ddbefa..83ddeee 100644
--- a/chrome/renderer/extensions/bindings_utils.cc
+++ b/chrome/renderer/extensions/bindings_utils.cc
@@ -56,6 +56,19 @@
   return hidden;
 }
 
+ContextInfo::ContextInfo(v8::Persistent<v8::Context> context,
+                         const std::string& extension_id,
+                         WebKit::WebFrame* parent_frame,
+                         RenderView* render_view)
+    : context(context),
+      extension_id(extension_id),
+      parent_frame(parent_frame),
+      render_view(render_view),
+      num_connected_events(0) {
+}
+
+ContextInfo::~ContextInfo() {}
+
 ContextList& GetContexts() {
   return Singleton<SingletonData>::get()->contexts;
 }
@@ -87,6 +100,13 @@
     return context_iter->get();
 }
 
+PendingRequest::PendingRequest(v8::Persistent<v8::Context> context,
+                               const std::string& name)
+    : context(context), name(name) {
+}
+
+PendingRequest::~PendingRequest() {}
+
 ContextList::iterator FindContext(v8::Handle<v8::Context> context) {
   ContextList& all_contexts = GetContexts();
 
diff --git a/chrome/renderer/extensions/bindings_utils.h b/chrome/renderer/extensions/bindings_utils.h
index b269ad1..97973a9 100644
--- a/chrome/renderer/extensions/bindings_utils.h
+++ b/chrome/renderer/extensions/bindings_utils.h
@@ -67,6 +67,12 @@
 
 // Contains information about a single javascript context.
 struct ContextInfo {
+  ContextInfo(v8::Persistent<v8::Context> context,
+              const std::string& extension_id,
+              WebKit::WebFrame* parent_frame,
+              RenderView* render_view);
+  ~ContextInfo();
+
   v8::Persistent<v8::Context> context;
   std::string extension_id;  // empty if the context is not an extension
 
@@ -85,14 +91,6 @@
   // A count of the number of events that are listening in this context. When
   // this is zero, |context| will be a weak handle.
   int num_connected_events;
-
-  ContextInfo(v8::Persistent<v8::Context> context,
-              const std::string& extension_id,
-              WebKit::WebFrame* parent_frame,
-              RenderView* render_view)
-      : context(context), extension_id(extension_id),
-        parent_frame(parent_frame), render_view(render_view),
-        num_connected_events(0) {}
 };
 typedef std::list< linked_ptr<ContextInfo> > ContextList;
 
@@ -113,9 +111,9 @@
 // Contains info relevant to a pending API request.
 struct PendingRequest {
  public :
-  PendingRequest(v8::Persistent<v8::Context> context, const std::string& name)
-      : context(context), name(name) {
-  }
+  PendingRequest(v8::Persistent<v8::Context> context, const std::string& name);
+  ~PendingRequest();
+
   v8::Persistent<v8::Context> context;
   std::string name;
 };
diff --git a/chrome/renderer/form_manager.cc b/chrome/renderer/form_manager.cc
index 9c49fd6..851eea4e 100644
--- a/chrome/renderer/form_manager.cc
+++ b/chrome/renderer/form_manager.cc
@@ -237,6 +237,12 @@
 
 }  // namespace
 
+struct FormManager::FormElement {
+  WebKit::WebFormElement form_element;
+  std::vector<WebKit::WebFormControlElement> control_elements;
+  std::vector<string16> control_values;
+};
+
 FormManager::FormManager() {
 }
 
diff --git a/chrome/renderer/form_manager.h b/chrome/renderer/form_manager.h
index a8643d9..3e4b8347 100644
--- a/chrome/renderer/form_manager.h
+++ b/chrome/renderer/form_manager.h
@@ -115,11 +115,7 @@
   // Stores the WebFormElement and the form control elements for a form.
   // Original form values are stored so when we clear a form we can reset
   // "select-one" values to their original state.
-  struct FormElement {
-    WebKit::WebFormElement form_element;
-    std::vector<WebKit::WebFormControlElement> control_elements;
-    std::vector<string16> control_values;
-  };
+  struct FormElement;
 
   // Type for cache of FormElement objects.
   typedef std::vector<FormElement*> FormElementList;
diff --git a/chrome/renderer/gpu_video_decoder_host.cc b/chrome/renderer/gpu_video_decoder_host.cc
index bf6c79f..44599f3 100644
--- a/chrome/renderer/gpu_video_decoder_host.cc
+++ b/chrome/renderer/gpu_video_decoder_host.cc
@@ -26,6 +26,8 @@
   memset(&config_, 0, sizeof(config_));
 }
 
+GpuVideoDecoderHost::~GpuVideoDecoderHost() {}
+
 void GpuVideoDecoderHost::OnChannelError() {
   ipc_sender_ = NULL;
 }
diff --git a/chrome/renderer/gpu_video_decoder_host.h b/chrome/renderer/gpu_video_decoder_host.h
index baf0ffe..c32a9f0 100644
--- a/chrome/renderer/gpu_video_decoder_host.h
+++ b/chrome/renderer/gpu_video_decoder_host.h
@@ -45,7 +45,7 @@
                       IPC::Message::Sender* ipc_sender,
                       int context_route_id,
                       int32 decoder_host_id);
-  virtual ~GpuVideoDecoderHost() {}
+  virtual ~GpuVideoDecoderHost();
 
   // IPC::Channel::Listener.
   virtual void OnChannelConnected(int32 peer_pid) {}
diff --git a/chrome/renderer/paint_aggregator.cc b/chrome/renderer/paint_aggregator.cc
index 943e012..991053f 100644
--- a/chrome/renderer/paint_aggregator.cc
+++ b/chrome/renderer/paint_aggregator.cc
@@ -34,6 +34,10 @@
 // a paint rect can be significant.
 static const size_t kMaxPaintRects = 5;
 
+PaintAggregator::PendingUpdate::PendingUpdate() {}
+
+PaintAggregator::PendingUpdate::~PendingUpdate() {}
+
 gfx::Rect PaintAggregator::PendingUpdate::GetScrollDamage() const {
   // Should only be scrolling in one direction at a time.
   DCHECK(!(scroll_delta.x() && scroll_delta.y()));
diff --git a/chrome/renderer/paint_aggregator.h b/chrome/renderer/paint_aggregator.h
index 6efac35..119e0b5 100644
--- a/chrome/renderer/paint_aggregator.h
+++ b/chrome/renderer/paint_aggregator.h
@@ -8,6 +8,7 @@
 
 #include <vector>
 
+#include "base/basictypes.h"
 #include "gfx/rect.h"
 
 // This class is responsible for aggregating multiple invalidation and scroll
@@ -22,9 +23,8 @@
   // |scroll_delta| can only specify scrolling in one direction (i.e., the x
   // and y members cannot both be non-zero).
   struct PendingUpdate {
-    gfx::Point scroll_delta;
-    gfx::Rect scroll_rect;
-    std::vector<gfx::Rect> paint_rects;
+    PendingUpdate();
+    ~PendingUpdate();
 
     // Returns the rect damaged by scrolling within |scroll_rect| by
     // |scroll_delta|.  This rect must be repainted.
@@ -32,6 +32,10 @@
 
     // Returns the smallest rect containing all paint rects.
     gfx::Rect GetPaintBounds() const;
+
+    gfx::Point scroll_delta;
+    gfx::Rect scroll_rect;
+    std::vector<gfx::Rect> paint_rects;
   };
 
   // There is a PendingUpdate if InvalidateRect or ScrollRect were called and
diff --git a/chrome/renderer/pepper_devices.cc b/chrome/renderer/pepper_devices.cc
index 07da49d7..57189d4 100644
--- a/chrome/renderer/pepper_devices.cc
+++ b/chrome/renderer/pepper_devices.cc
@@ -20,11 +20,30 @@
 
 int Graphics2DDeviceContext::next_buffer_id_ = 0;
 
+struct Graphics2DDeviceContext::FlushCallbackData {
+  FlushCallbackData(NPDeviceFlushContextCallbackPtr f,
+                    NPP n,
+                    NPDeviceContext2D* c,
+                    NPUserData* u)
+      : function(f),
+        npp(n),
+        context(c),
+        user_data(u) {
+  }
+
+  NPDeviceFlushContextCallbackPtr function;
+  NPP npp;
+  NPDeviceContext2D* context;
+  NPUserData* user_data;
+};
+
 Graphics2DDeviceContext::Graphics2DDeviceContext(
     WebPluginDelegatePepper* plugin_delegate)
     : plugin_delegate_(plugin_delegate) {
 }
 
+Graphics2DDeviceContext::~Graphics2DDeviceContext() {}
+
 NPError Graphics2DDeviceContext::Initialize(
     gfx::Rect window_rect, const NPDeviceContext2DConfig* config,
     NPDeviceContext2D* context) {
@@ -153,6 +172,12 @@
   painted_flush_callbacks_.clear();
 }
 
+AudioDeviceContext::AudioDeviceContext()
+    : context_(NULL),
+      stream_id_(0),
+      shared_memory_size_(0) {
+}
+
 AudioDeviceContext::~AudioDeviceContext() {
   if (stream_id_) {
     OnDestroy();
diff --git a/chrome/renderer/pepper_devices.h b/chrome/renderer/pepper_devices.h
index 2a72f4e..912657ae 100644
--- a/chrome/renderer/pepper_devices.h
+++ b/chrome/renderer/pepper_devices.h
@@ -27,6 +27,7 @@
 class Graphics2DDeviceContext {
  public:
   explicit Graphics2DDeviceContext(WebPluginDelegatePepper* plugin_delegate);
+  ~Graphics2DDeviceContext();
 
   NPError Initialize(gfx::Rect window_rect,
                      const NPDeviceContext2DConfig* config,
@@ -45,22 +46,7 @@
   skia::PlatformCanvas* canvas() { return canvas_.get(); }
 
  private:
-  struct FlushCallbackData {
-    FlushCallbackData(NPDeviceFlushContextCallbackPtr f,
-                      NPP n,
-                      NPDeviceContext2D* c,
-                      NPUserData* u)
-        : function(f),
-          npp(n),
-          context(c),
-          user_data(u) {
-    }
-
-    NPDeviceFlushContextCallbackPtr function;
-    NPP npp;
-    NPDeviceContext2D* context;
-    NPUserData* user_data;
-  };
+  struct FlushCallbackData;
   typedef std::vector<FlushCallbackData> FlushCallbackVector;
 
   WebPluginDelegatePepper* plugin_delegate_;
@@ -97,11 +83,7 @@
 class AudioDeviceContext : public AudioMessageFilter::Delegate,
                            public base::DelegateSimpleThread::Delegate {
  public:
-  explicit AudioDeviceContext()
-      : context_(NULL),
-        stream_id_(0),
-        shared_memory_size_(0) {
-  }
+  explicit AudioDeviceContext();
   virtual ~AudioDeviceContext();
 
   NPError Initialize(AudioMessageFilter* filter,
diff --git a/chrome/renderer/pepper_plugin_delegate_impl.cc b/chrome/renderer/pepper_plugin_delegate_impl.cc
index cb37c0bd..ecaf0e4f2 100644
--- a/chrome/renderer/pepper_plugin_delegate_impl.cc
+++ b/chrome/renderer/pepper_plugin_delegate_impl.cc
@@ -495,6 +495,8 @@
       id_generator_(0) {
 }
 
+PepperPluginDelegateImpl::~PepperPluginDelegateImpl() {}
+
 void PepperPluginDelegateImpl::ViewInitiatedPaint() {
   // Notify all of our instances that we started painting. This is used for
   // internal bookkeeping only, so we know that the set can not change under
diff --git a/chrome/renderer/pepper_plugin_delegate_impl.h b/chrome/renderer/pepper_plugin_delegate_impl.h
index fc1c5b891..a1fb6a0 100644
--- a/chrome/renderer/pepper_plugin_delegate_impl.h
+++ b/chrome/renderer/pepper_plugin_delegate_impl.h
@@ -40,7 +40,7 @@
       public base::SupportsWeakPtr<PepperPluginDelegateImpl> {
  public:
   explicit PepperPluginDelegateImpl(RenderView* render_view);
-  virtual ~PepperPluginDelegateImpl() {}
+  virtual ~PepperPluginDelegateImpl();
 
   // Called by RenderView to tell us about painting events, these two functions
   // just correspond to the DidInitiatePaint and DidFlushPaint in R.V..
diff --git a/chrome/renderer/user_script_slave.cc b/chrome/renderer/user_script_slave.cc
index 8639d43..dba1dcf9 100644
--- a/chrome/renderer/user_script_slave.cc
+++ b/chrome/renderer/user_script_slave.cc
@@ -67,6 +67,8 @@
                 IDR_GREASEMONKEY_API_JS);
 }
 
+UserScriptSlave::~UserScriptSlave() {}
+
 void UserScriptSlave::GetActiveExtensions(
     std::set<std::string>* extension_ids) {
   for (size_t i = 0; i < scripts_.size(); ++i) {
diff --git a/chrome/renderer/user_script_slave.h b/chrome/renderer/user_script_slave.h
index 7df6b17..23acb4c1 100644
--- a/chrome/renderer/user_script_slave.h
+++ b/chrome/renderer/user_script_slave.h
@@ -27,6 +27,7 @@
 class UserScriptSlave {
  public:
   UserScriptSlave();
+  ~UserScriptSlave();
 
   // Returns the unique set of extension IDs this UserScriptSlave knows about.
   void GetActiveExtensions(std::set<std::string>* extension_ids);
diff --git a/chrome/renderer/websharedworkerrepository_impl.cc b/chrome/renderer/websharedworkerrepository_impl.cc
index 99f2a3b..29c9ed6 100644
--- a/chrome/renderer/websharedworkerrepository_impl.cc
+++ b/chrome/renderer/websharedworkerrepository_impl.cc
@@ -8,6 +8,10 @@
 #include "chrome/renderer/render_thread.h"
 #include "chrome/renderer/websharedworker_proxy.h"
 
+WebSharedWorkerRepositoryImpl::WebSharedWorkerRepositoryImpl() {}
+
+WebSharedWorkerRepositoryImpl::~WebSharedWorkerRepositoryImpl() {}
+
 void WebSharedWorkerRepositoryImpl::addSharedWorker(
     WebKit::WebSharedWorker* worker, DocumentID document) {
   shared_worker_parents_.insert(document);
diff --git a/chrome/renderer/websharedworkerrepository_impl.h b/chrome/renderer/websharedworkerrepository_impl.h
index b11e4a7..1bcbfa9 100644
--- a/chrome/renderer/websharedworkerrepository_impl.h
+++ b/chrome/renderer/websharedworkerrepository_impl.h
@@ -16,7 +16,8 @@
 
 class WebSharedWorkerRepositoryImpl : public WebKit::WebSharedWorkerRepository {
  public:
-  virtual ~WebSharedWorkerRepositoryImpl() {}
+  WebSharedWorkerRepositoryImpl();
+  virtual ~WebSharedWorkerRepositoryImpl();
 
   virtual void addSharedWorker(WebKit::WebSharedWorker*, DocumentID document);
   virtual void documentDetached(DocumentID document);
diff --git a/chrome/service/cloud_print/print_system.cc b/chrome/service/cloud_print/print_system.cc
new file mode 100644
index 0000000..57c1342
--- /dev/null
+++ b/chrome/service/cloud_print/print_system.cc
@@ -0,0 +1,36 @@
+// Copyright (c) 2010 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "chrome/service/cloud_print/print_system.h"
+
+namespace cloud_print {
+
+PrinterBasicInfo::PrinterBasicInfo() : printer_status(0) {}
+
+PrinterBasicInfo::~PrinterBasicInfo() {}
+
+PrintJobDetails::PrintJobDetails()
+    : status(PRINT_JOB_STATUS_INVALID),
+      platform_status_flags(0),
+      total_pages(0),
+      pages_printed(0) {
+}
+
+void PrintJobDetails::Clear() {
+  status = PRINT_JOB_STATUS_INVALID;
+  platform_status_flags = 0;
+  status_message.clear();
+  total_pages = 0;
+  pages_printed = 0;
+}
+
+PrintSystem::PrintServerWatcher::~PrintServerWatcher() {}
+
+PrintSystem::PrinterWatcher::~PrinterWatcher() {}
+
+PrintSystem::JobSpooler::~JobSpooler() {}
+
+PrintSystem::~PrintSystem() {}
+
+}  // namespace cloud_print
diff --git a/chrome/service/cloud_print/print_system.h b/chrome/service/cloud_print/print_system.h
index b0e287d..2abdcc3 100644
--- a/chrome/service/cloud_print/print_system.h
+++ b/chrome/service/cloud_print/print_system.h
@@ -21,12 +21,13 @@
 typedef int PlatformJobId;
 
 struct PrinterBasicInfo {
+  PrinterBasicInfo();
+  ~PrinterBasicInfo();
+
   std::string printer_name;
   std::string printer_description;
   int printer_status;
   std::map<std::string, std::string> options;
-  PrinterBasicInfo() : printer_status(0) {
-  }
 };
 
 typedef std::vector<PrinterBasicInfo> PrinterList;
@@ -46,22 +47,10 @@
 };
 
 struct PrintJobDetails {
-  PrintJobStatus status;
-  int platform_status_flags;
-  std::string status_message;
-  int total_pages;
-  int pages_printed;
-  PrintJobDetails() : status(PRINT_JOB_STATUS_INVALID),
-                      platform_status_flags(0), total_pages(0),
-                      pages_printed(0) {
-  }
-  void Clear() {
-    status = PRINT_JOB_STATUS_INVALID;
-    platform_status_flags = 0;
-    status_message.clear();
-    total_pages = 0;
-    pages_printed = 0;
-  }
+  PrintJobDetails();
+
+  void Clear();
+
   bool operator ==(const PrintJobDetails& other) const {
     return (status == other.status) &&
            (platform_status_flags == other.platform_status_flags) &&
@@ -69,9 +58,16 @@
            (total_pages == other.total_pages) &&
            (pages_printed == other.pages_printed);
   }
+
   bool operator !=(const PrintJobDetails& other) const {
     return !(*this == other);
   }
+
+  PrintJobStatus status;
+  int platform_status_flags;
+  std::string status_message;
+  int total_pages;
+  int pages_printed;
 };
 
 // PrintSystem class will provide interface for different printing systems
@@ -96,7 +92,7 @@
         virtual ~Delegate() {}
     };
 
-    virtual ~PrintServerWatcher() {}
+    virtual ~PrintServerWatcher();
     virtual bool StartWatching(PrintServerWatcher::Delegate* delegate) = 0;
     virtual bool StopWatching() = 0;
   };
@@ -114,7 +110,7 @@
         virtual ~Delegate() {}
     };
 
-    virtual ~PrinterWatcher() {}
+    virtual ~PrinterWatcher();
     virtual bool StartWatching(PrinterWatcher::Delegate* delegate) = 0;
     virtual bool StopWatching() = 0;
     virtual bool GetCurrentPrinterInfo(PrinterBasicInfo* printer_info) = 0;
@@ -130,7 +126,7 @@
         virtual void OnJobSpoolFailed() = 0;
     };
 
-    virtual ~JobSpooler() {}
+    virtual ~JobSpooler();
     // Spool job to the printer asynchronously. Caller will be notified via
     // |delegate|. Note that only one print job can be in progress at any given
     // time. Subsequent calls to Spool (before the Delegate::OnJobSpoolSucceeded
@@ -143,7 +139,7 @@
                        JobSpooler::Delegate* delegate) = 0;
   };
 
-  virtual ~PrintSystem() {}
+  virtual ~PrintSystem();
 
   // Enumerates the list of installed local and network printers.
   virtual void EnumeratePrinters(PrinterList* printer_list) = 0;