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

Unified Diff: rlz/lib/financial_ping.cc

Issue 10642009: Add a regenerate button to regenerate the password in Windows. (Closed) Base URL: http://git.chromium.org/chromium/src.git@master
Patch Set: Sync and Merge. Created 8 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « rlz/lib/financial_ping.h ('k') | rlz/lib/financial_ping_test.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: rlz/lib/financial_ping.cc
diff --git a/rlz/lib/financial_ping.cc b/rlz/lib/financial_ping.cc
deleted file mode 100644
index aad3db33b8ca0b6ff104abc00b8c9171231b7bad..0000000000000000000000000000000000000000
--- a/rlz/lib/financial_ping.cc
+++ /dev/null
@@ -1,354 +0,0 @@
-// Copyright (c) 2012 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.
-//
-// Library functions related to the Financial Server ping.
-
-#include "rlz/lib/financial_ping.h"
-
-#include "base/basictypes.h"
-#include "base/memory/scoped_ptr.h"
-#include "base/string_util.h"
-#include "base/stringprintf.h"
-#include "base/utf_string_conversions.h"
-#include "rlz/lib/assert.h"
-#include "rlz/lib/lib_values.h"
-#include "rlz/lib/machine_id.h"
-#include "rlz/lib/rlz_lib.h"
-#include "rlz/lib/rlz_value_store.h"
-#include "rlz/lib/string_utils.h"
-
-#if !defined(OS_WIN)
-#include "base/time.h"
-#endif
-
-#if defined(RLZ_NETWORK_IMPLEMENTATION_WIN_INET)
-
-#include <windows.h>
-#include <wininet.h>
-
-namespace {
-
-class InternetHandle {
- public:
- InternetHandle(HINTERNET handle) { handle_ = handle; }
- ~InternetHandle() { if (handle_) InternetCloseHandle(handle_); }
- operator HINTERNET() const { return handle_; }
- bool operator!() const { return (handle_ == NULL); }
-
- private:
- HINTERNET handle_;
-};
-
-} // namespace
-
-#else
-
-#include "base/bind.h"
-#include "base/message_loop.h"
-#include "base/time.h"
-#include "googleurl/src/gurl.h"
-#include "net/base/load_flags.h"
-#include "net/url_request/url_fetcher.h"
-#include "net/url_request/url_fetcher_delegate.h"
-#include "net/url_request/url_request_context.h"
-#include "net/url_request/url_request_context_getter.h"
-
-#endif
-
-namespace {
-
-// Returns the time relative to a fixed point in the past in multiples of
-// 100 ns stepts. The point in the past is arbitrary but can't change, as the
-// result of this value is stored on disk.
-int64 GetSystemTimeAsInt64() {
-#if defined(OS_WIN)
- FILETIME now_as_file_time;
- // Relative to Jan 1, 1601 (UTC).
- GetSystemTimeAsFileTime(&now_as_file_time);
-
- LARGE_INTEGER integer;
- integer.HighPart = now_as_file_time.dwHighDateTime;
- integer.LowPart = now_as_file_time.dwLowDateTime;
- return integer.QuadPart;
-#else
- // Seconds since epoch (Jan 1, 1970).
- double now_seconds = base::Time::Now().ToDoubleT();
- return static_cast<int64>(now_seconds * 1000 * 1000 * 10);
-#endif
-}
-
-} // namespace
-
-
-namespace rlz_lib {
-
-bool FinancialPing::FormRequest(Product product,
- const AccessPoint* access_points, const char* product_signature,
- const char* product_brand, const char* product_id,
- const char* product_lang, bool exclude_machine_id,
- std::string* request) {
- if (!request) {
- ASSERT_STRING("FinancialPing::FormRequest: request is NULL");
- return false;
- }
-
- request->clear();
-
- ScopedRlzValueStoreLock lock;
- RlzValueStore* store = lock.GetStore();
- if (!store || !store->HasAccess(RlzValueStore::kReadAccess))
- return false;
-
- if (!access_points) {
- ASSERT_STRING("FinancialPing::FormRequest: access_points is NULL");
- return false;
- }
-
- if (!product_signature) {
- ASSERT_STRING("FinancialPing::FormRequest: product_signature is NULL");
- return false;
- }
-
- if (!SupplementaryBranding::GetBrand().empty()) {
- if (SupplementaryBranding::GetBrand() != product_brand) {
- ASSERT_STRING("FinancialPing::FormRequest: supplementary branding bad");
- return false;
- }
- }
-
- base::StringAppendF(request, "%s?", kFinancialPingPath);
-
- // Add the signature, brand, product id and language.
- base::StringAppendF(request, "%s=%s", kProductSignatureCgiVariable,
- product_signature);
- if (product_brand)
- base::StringAppendF(request, "&%s=%s", kProductBrandCgiVariable,
- product_brand);
-
- if (product_id)
- base::StringAppendF(request, "&%s=%s", kProductIdCgiVariable, product_id);
-
- if (product_lang)
- base::StringAppendF(request, "&%s=%s", kProductLanguageCgiVariable,
- product_lang);
-
- // Add the product events.
- char cgi[kMaxCgiLength + 1];
- cgi[0] = 0;
- bool has_events = GetProductEventsAsCgi(product, cgi, arraysize(cgi));
- if (has_events)
- base::StringAppendF(request, "&%s", cgi);
-
- // If we don't have any events, we should ping all the AP's on the system
- // that we know about and have a current RLZ value, even if they are not
- // used by this product.
- AccessPoint all_points[LAST_ACCESS_POINT];
- if (!has_events) {
- char rlz[kMaxRlzLength + 1];
- int idx = 0;
- for (int ap = NO_ACCESS_POINT + 1; ap < LAST_ACCESS_POINT; ap++) {
- rlz[0] = 0;
- AccessPoint point = static_cast<AccessPoint>(ap);
- if (GetAccessPointRlz(point, rlz, arraysize(rlz)) &&
- rlz[0] != '\0')
- all_points[idx++] = point;
- }
- all_points[idx] = NO_ACCESS_POINT;
- }
-
- // Add the RLZ's and the DCC if needed. This is the same as get PingParams.
- // This will also include the RLZ Exchange Protocol CGI Argument.
- cgi[0] = 0;
- if (GetPingParams(product, has_events ? access_points : all_points,
- cgi, arraysize(cgi)))
- base::StringAppendF(request, "&%s", cgi);
-
- if (has_events && !exclude_machine_id) {
- std::string machine_id;
- if (GetMachineId(&machine_id)) {
- base::StringAppendF(request, "&%s=%s", kMachineIdCgiVariable,
- machine_id.c_str());
- }
- }
-
- return true;
-}
-
-#if defined(RLZ_NETWORK_IMPLEMENTATION_CHROME_NET)
-// The URLRequestContextGetter used by FinancialPing::PingServer().
-net::URLRequestContextGetter* g_context;
-
-bool FinancialPing::SetURLRequestContext(
- net::URLRequestContextGetter* context) {
- ScopedRlzValueStoreLock lock;
- RlzValueStore* store = lock.GetStore();
- if (!store)
- return false;
-
- g_context = context;
- return true;
-}
-
-namespace {
-
-class FinancialPingUrlFetcherDelegate : public net::URLFetcherDelegate {
- public:
- FinancialPingUrlFetcherDelegate(MessageLoop* loop) : loop_(loop) { }
- virtual void OnURLFetchComplete(const net::URLFetcher* source);
- private:
- MessageLoop* loop_;
-};
-
-void FinancialPingUrlFetcherDelegate::OnURLFetchComplete(
- const net::URLFetcher* source) {
- loop_->Quit();
-}
-
-} // namespace
-
-#endif
-
-bool FinancialPing::PingServer(const char* request, std::string* response) {
- if (!response)
- return false;
-
- response->clear();
-
-#if defined(RLZ_NETWORK_IMPLEMENTATION_WIN_INET)
- // Initialize WinInet.
- InternetHandle inet_handle = InternetOpenA(kFinancialPingUserAgent,
- INTERNET_OPEN_TYPE_PRECONFIG,
- NULL, NULL, 0);
- if (!inet_handle)
- return false;
-
- // Open network connection.
- InternetHandle connection_handle = InternetConnectA(inet_handle,
- kFinancialServer, kFinancialPort, "", "", INTERNET_SERVICE_HTTP,
- INTERNET_FLAG_NO_CACHE_WRITE, 0);
- if (!connection_handle)
- return false;
-
- // Prepare the HTTP request.
- InternetHandle http_handle = HttpOpenRequestA(connection_handle,
- "GET", request, NULL, NULL, kFinancialPingResponseObjects,
- INTERNET_FLAG_NO_CACHE_WRITE | INTERNET_FLAG_NO_COOKIES, NULL);
- if (!http_handle)
- return false;
-
- // Timeouts are probably:
- // INTERNET_OPTION_SEND_TIMEOUT, INTERNET_OPTION_RECEIVE_TIMEOUT
-
- // Send the HTTP request. Note: Fails if user is working in off-line mode.
- if (!HttpSendRequest(http_handle, NULL, 0, NULL, 0))
- return false;
-
- // Check the response status.
- DWORD status;
- DWORD status_size = sizeof(status);
- if (!HttpQueryInfo(http_handle, HTTP_QUERY_STATUS_CODE |
- HTTP_QUERY_FLAG_NUMBER, &status, &status_size, NULL) ||
- 200 != status)
- return false;
-
- // Get the response text.
- scoped_array<char> buffer(new char[kMaxPingResponseLength]);
- if (buffer.get() == NULL)
- return false;
-
- DWORD bytes_read = 0;
- while (InternetReadFile(http_handle, buffer.get(), kMaxPingResponseLength,
- &bytes_read) && bytes_read > 0) {
- response->append(buffer.get(), bytes_read);
- bytes_read = 0;
- };
-
- return true;
-#else
- // Run a blocking event loop to match the win inet implementation.
- MessageLoop loop;
- FinancialPingUrlFetcherDelegate delegate(&loop);
-
- std::string url = base::StringPrintf("http://%s:%d%s",
- kFinancialServer, kFinancialPort,
- request);
-
- scoped_ptr<net::URLFetcher> fetcher(net::URLFetcher::Create(
- GURL(url), net::URLFetcher::GET, &delegate));
-
- fetcher->SetLoadFlags(net::LOAD_DISABLE_CACHE |
- net::LOAD_DO_NOT_SEND_AUTH_DATA |
- net::LOAD_DO_NOT_PROMPT_FOR_LOGIN |
- net::LOAD_DO_NOT_SEND_COOKIES |
- net::LOAD_DO_NOT_SAVE_COOKIES);
-
- // Ensure rlz_lib::SetURLRequestContext() has been called before sending
- // pings.
- CHECK(g_context);
- fetcher->SetRequestContext(g_context);
-
- const base::TimeDelta kTimeout = base::TimeDelta::FromMinutes(5);
- loop.PostTask(
- FROM_HERE,
- base::Bind(&net::URLFetcher::Start, base::Unretained(fetcher.get())));
- loop.PostNonNestableDelayedTask(
- FROM_HERE, MessageLoop::QuitClosure(), kTimeout);
-
- loop.Run();
-
- if (fetcher->GetResponseCode() != 200)
- return false;
-
- return fetcher->GetResponseAsString(response);
-#endif
-}
-
-bool FinancialPing::IsPingTime(Product product, bool no_delay) {
- ScopedRlzValueStoreLock lock;
- RlzValueStore* store = lock.GetStore();
- if (!store || !store->HasAccess(RlzValueStore::kReadAccess))
- return false;
-
- int64 last_ping = 0;
- if (!store->ReadPingTime(product, &last_ping))
- return true;
-
- uint64 now = GetSystemTimeAsInt64();
- int64 interval = now - last_ping;
-
- // If interval is negative, clock was probably reset. So ping.
- if (interval < 0)
- return true;
-
- // Check if this product has any unreported events.
- char cgi[kMaxCgiLength + 1];
- cgi[0] = 0;
- bool has_events = GetProductEventsAsCgi(product, cgi, arraysize(cgi));
- if (no_delay && has_events)
- return true;
-
- return interval >= (has_events ? kEventsPingInterval : kNoEventsPingInterval);
-}
-
-
-bool FinancialPing::UpdateLastPingTime(Product product) {
- ScopedRlzValueStoreLock lock;
- RlzValueStore* store = lock.GetStore();
- if (!store || !store->HasAccess(RlzValueStore::kWriteAccess))
- return false;
-
- uint64 now = GetSystemTimeAsInt64();
- return store->WritePingTime(product, now);
-}
-
-
-bool FinancialPing::ClearLastPingTime(Product product) {
- ScopedRlzValueStoreLock lock;
- RlzValueStore* store = lock.GetStore();
- if (!store || !store->HasAccess(RlzValueStore::kWriteAccess))
- return false;
- return store->ClearPingTime(product);
-}
-
-} // namespace
« no previous file with comments | « rlz/lib/financial_ping.h ('k') | rlz/lib/financial_ping_test.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698