diff options
author | slightlyoff@chromium.org <slightlyoff@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2010-03-26 04:16:20 +0000 |
---|---|---|
committer | slightlyoff@chromium.org <slightlyoff@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2010-03-26 04:16:20 +0000 |
commit | bc73b4e541f57b44ac4c53df2589d91549f27eaf (patch) | |
tree | 47cf0721b0f9d9cd0a9c83196d4091120300f3a4 /chrome_frame/delete_chrome_history.cc | |
parent | 46215d5ef32784db5544fc5f7ba06b6617935fec (diff) | |
download | chromium_src-bc73b4e541f57b44ac4c53df2589d91549f27eaf.zip chromium_src-bc73b4e541f57b44ac4c53df2589d91549f27eaf.tar.gz chromium_src-bc73b4e541f57b44ac4c53df2589d91549f27eaf.tar.bz2 |
3rd try. *sigh*
See: http://codereview.chromium.org/858003
TBR=tommi
BUG=22846
TEST=On IE 8, clear the cache entirely, watch GCF launch (via task manager)
Review URL: http://codereview.chromium.org/1343004
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@42732 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'chrome_frame/delete_chrome_history.cc')
-rw-r--r-- | chrome_frame/delete_chrome_history.cc | 82 |
1 files changed, 82 insertions, 0 deletions
diff --git a/chrome_frame/delete_chrome_history.cc b/chrome_frame/delete_chrome_history.cc new file mode 100644 index 0000000..994d609 --- /dev/null +++ b/chrome_frame/delete_chrome_history.cc @@ -0,0 +1,82 @@ +// 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. + +// Implementation of DeleteChromeHistory +#include "chrome_frame/delete_chrome_history.h" + +#include "chrome_frame/chrome_frame_activex.h" +#include "chrome/browser/browsing_data_remover.h" +#include "utils.h" + +// Below other header to avoid symbol pollution. +#define INITGUID +#include <deletebrowsinghistory.h> + +DeleteChromeHistory::DeleteChromeHistory() + : remove_mask_(0) { + DLOG(INFO) << __FUNCTION__; +} + +DeleteChromeHistory::~DeleteChromeHistory() { +} + + +HRESULT DeleteChromeHistory::FinalConstruct() { + DLOG(INFO) << __FUNCTION__; + Initialize(); + return S_OK; +} + +void DeleteChromeHistory::OnAutomationServerReady() { + DLOG(INFO) << __FUNCTION__; + automation_client_->RemoveBrowsingData(remove_mask_); + loop_.Quit(); +} + +void DeleteChromeHistory::OnAutomationServerLaunchFailed( + AutomationLaunchResult reason, const std::string& server_version) { + DLOG(WARNING) << __FUNCTION__; + loop_.Quit(); +} + +void DeleteChromeHistory::GetProfilePath(const std::wstring& profile_name, + FilePath* profile_path) { + ChromeFramePlugin::GetProfilePath(kIexploreProfileName, profile_path); +} + +STDMETHODIMP DeleteChromeHistory::DeleteBrowsingHistory(DWORD flags) { + DLOG(INFO) << __FUNCTION__; + // Usually called inside a quick startup/tear-down routine by RunDLL32. You + // can simulate the process by calling: + // RunDll32.exe InetCpl.cpl,ClearMyTracksByProcess 255 + // Since automation setup isn't synchronous, we can be tearing down while + // being only partially set-up, causing even synchronous IPCs to be dropped. + // Since the *Chrome* startup/tear-down occurs synchronously from the + // perspective of automation, we can add a flag to the chrome.exe invocation + // in lieu of sending an IPC when it seems appropriate. Since we assume this + // happens in one-off fashion, don't attempt to pack REMOVE_* arguments. + // Instead, have the browser process clobber all history. + if (!InitializeAutomation(GetHostProcessName(false), L"", false)) { + return E_UNEXPECTED; + } + + if (flags & DELETE_BROWSING_HISTORY_COOKIES) + remove_mask_ |= BrowsingDataRemover::REMOVE_COOKIES; + if (flags & DELETE_BROWSING_HISTORY_TIF) + remove_mask_ |= BrowsingDataRemover::REMOVE_CACHE; + if (flags & DELETE_BROWSING_HISTORY_FORMDATA) + remove_mask_ |= BrowsingDataRemover::REMOVE_FORM_DATA; + if (flags & DELETE_BROWSING_HISTORY_PASSWORDS) + remove_mask_ |= BrowsingDataRemover::REMOVE_PASSWORDS; + if (flags & DELETE_BROWSING_HISTORY_HISTORY) + remove_mask_ |= BrowsingDataRemover::REMOVE_HISTORY; + + loop_.PostDelayedTask(FROM_HERE, + new MessageLoop::QuitTask, 1000 * 600); + loop_.MessageLoop::Run(); + + return S_OK; +} + + |