| Index: chrome/browser/history/history_publisher_win.cc
|
| diff --git a/chrome/browser/history/history_publisher_win.cc b/chrome/browser/history/history_publisher_win.cc
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..72c0f1d1cd40b70e6fa41c51b5891bc6ed121485
|
| --- /dev/null
|
| +++ b/chrome/browser/history/history_publisher_win.cc
|
| @@ -0,0 +1,107 @@
|
| +// Copyright (c) 2008-2009 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/history/history_publisher.h"
|
| +
|
| +#include <atlsafe.h>
|
| +#include <objbase.h>
|
| +#include <oleauto.h>
|
| +#include <wtypes.h>
|
| +
|
| +#include "base/registry.h"
|
| +
|
| +namespace history {
|
| +
|
| +const wchar_t* HistoryPublisher::kRegKeyRegisteredIndexersInfo =
|
| + L"Software\\Google\\Google Chrome\\IndexerPlugins";
|
| +
|
| +// static
|
| +double HistoryPublisher::TimeToUTCVariantTime(const base::Time& time) {
|
| + double var_time = 0;
|
| + if (!time.is_null()) {
|
| + base::Time::Exploded exploded;
|
| + time.UTCExplode(&exploded);
|
| +
|
| + // Create the system time struct representing our exploded time.
|
| + SYSTEMTIME system_time;
|
| + system_time.wYear = exploded.year;
|
| + system_time.wMonth = exploded.month;
|
| + system_time.wDayOfWeek = exploded.day_of_week;
|
| + system_time.wDay = exploded.day_of_month;
|
| + system_time.wHour = exploded.hour;
|
| + system_time.wMinute = exploded.minute;
|
| + system_time.wSecond = exploded.second;
|
| + system_time.wMilliseconds = exploded.millisecond;
|
| + SystemTimeToVariantTime(&system_time, &var_time);
|
| + }
|
| +
|
| + return var_time;
|
| +}
|
| +
|
| +HistoryPublisher::HistoryPublisher() {
|
| + CoInitialize(NULL);
|
| +}
|
| +
|
| +HistoryPublisher::~HistoryPublisher() {
|
| + CoUninitialize();
|
| +}
|
| +
|
| +bool HistoryPublisher::Init() {
|
| + return ReadRegisteredIndexersFromRegistry();
|
| +}
|
| +
|
| +bool HistoryPublisher::ReadRegisteredIndexersFromRegistry() {
|
| + RegistryKeyIterator iter(HKEY_CURRENT_USER, kRegKeyRegisteredIndexersInfo);
|
| + while (iter.Valid()) {
|
| + // The subkey name is the GUID of the Indexer COM object which implements
|
| + // the IChromeHistoryIndexer interface. We shall store that and use it to
|
| + // send historical data to the indexer.
|
| + CLSID clsid;
|
| + CLSIDFromString(static_cast<LPOLESTR>(
|
| + const_cast<TCHAR*>(iter.Name())), &clsid);
|
| + CComPtr<IChromeHistoryIndexer> indexer;
|
| + HRESULT hr = CoCreateInstance(clsid, NULL, CLSCTX_INPROC,
|
| + __uuidof(IChromeHistoryIndexer),
|
| + reinterpret_cast<void**>(&indexer));
|
| + if (SUCCEEDED(hr) && indexer != NULL)
|
| + indexers_.push_back(indexer);
|
| + ++iter;
|
| + }
|
| + return indexers_.size() > 0;
|
| +}
|
| +
|
| +void HistoryPublisher::PublishDataToIndexers(const PageData& page_data)
|
| + const {
|
| + double var_time = TimeToUTCVariantTime(page_data.time);
|
| +
|
| + CComSafeArray<unsigned char> thumbnail_arr;
|
| + if (page_data.thumbnail) {
|
| + for(size_t i = 0; i < page_data.thumbnail->size(); ++i)
|
| + thumbnail_arr.Add((*page_data.thumbnail)[i]);
|
| + }
|
| +
|
| + // Send data to registered indexers.
|
| + for(size_t i = 0; i < indexers_.size(); ++i) {
|
| + indexers_[i]->SendPageData(
|
| + CComVariant(var_time, VT_DATE),
|
| + CComBSTR(page_data.url.spec().c_str()),
|
| + CComBSTR(page_data.html),
|
| + CComBSTR(page_data.title),
|
| + CComBSTR(page_data.thumbnail_format),
|
| + CComVariant(thumbnail_arr.m_psa));
|
| + }
|
| +}
|
| +
|
| +void HistoryPublisher::DeleteUserHistoryBetween(const base::Time& begin_time,
|
| + const base::Time& end_time)
|
| + const {
|
| + double var_begin_time = TimeToUTCVariantTime(begin_time);
|
| + double var_end_time = TimeToUTCVariantTime(end_time);
|
| + for(size_t i = 0; i < indexers_.size(); ++i) {
|
| + indexers_[i]->DeleteUserHistoryBetween(CComVariant(var_begin_time, VT_DATE),
|
| + CComVariant(var_end_time, VT_DATE));
|
| + }
|
| +}
|
| +
|
| +} // namespace history
|
|
|