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

Unified Diff: goopdate/code_red_check.cc

Issue 624713003: Keep only base/extractor.[cc|h]. (Closed) Base URL: https://chromium.googlesource.com/external/omaha.git@master
Patch Set: Created 6 years, 2 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 | « goopdate/code_red_check.h ('k') | goopdate/com_forwarder.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: goopdate/code_red_check.cc
diff --git a/goopdate/code_red_check.cc b/goopdate/code_red_check.cc
deleted file mode 100644
index e591c6e7355d36ea660e291630b428ce3733e1ec..0000000000000000000000000000000000000000
--- a/goopdate/code_red_check.cc
+++ /dev/null
@@ -1,211 +0,0 @@
-// Copyright 2007-2010 Google Inc.
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-// http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-// ========================================================================
-
-#include "omaha/goopdate/code_red_check.h"
-#include "omaha/base/constants.h"
-#include "omaha/base/scoped_impersonation.h"
-#include "omaha/base/utils.h"
-#include "omaha/base/vista_utils.h"
-#include "omaha/common/goopdate_utils.h"
-#include "omaha/goopdate/goopdate_metrics.h"
-#include "omaha/net/network_request.h"
-#include "omaha/net/bits_request.h"
-#include "omaha/net/simple_request.h"
-#include "omaha/recovery/client/google_update_recovery.h"
-
-namespace omaha {
-
-namespace {
-
-bool IsThreadImpersonatingUser() {
- CAccessToken access_token;
- return access_token.GetThreadToken(TOKEN_READ);
-}
-
-HRESULT DownloadCodeRedFile(const TCHAR* url,
- const TCHAR* file_path,
- void*,
- int* http_status_code) {
- ASSERT1(url);
- ASSERT1(file_path);
- ASSERT1(http_status_code);
- *http_status_code = 0;
- NetworkConfig* network_config = NULL;
- NetworkConfigManager& network_manager = NetworkConfigManager::Instance();
- HRESULT hr = network_manager.GetUserNetworkConfig(&network_config);
- if (FAILED(hr)) {
- return hr;
- }
- NetworkRequest network_request(network_config->session());
-
- network_request.AddHttpRequest(new SimpleRequest);
-
- // BITS takes the job to BG_JOB_STATE_TRANSIENT_ERROR when the server returns
- // 204. After the "no progress time out", the BITS job errors out. Since
- // BITS follows the WinHTTP in the fallback chain, the code is expected to
- // execute only if WinHTTP fails to get a response from the server.
-
- // BITS transfers files only when the job owner is logged on.
- bool is_logged_on(false);
- if (IsThreadImpersonatingUser()) {
- // Code red download thread only impersonates to logged on user. So when
- // impersonation happens, it means the user is logged on.
- is_logged_on = true;
- } else {
- // Assumes the caller is not logged on if the function failed.
- hr = IsUserLoggedOn(&is_logged_on);
- ASSERT1(SUCCEEDED(hr) || !is_logged_on);
- }
- if (is_logged_on) {
- BitsRequest* bits_request(new BitsRequest);
- bits_request->set_minimum_retry_delay(kSecPerMin);
- bits_request->set_no_progress_timeout(5 * kSecPerMin);
- network_request.AddHttpRequest(bits_request);
- }
-
- hr = network_request.DownloadFile(CString(url), CString(file_path));
- if (FAILED(hr)) {
- return E_FAIL;
- }
-
- *http_status_code = network_request.http_status_code();
- switch (network_request.http_status_code()) {
- case HTTP_STATUS_OK:
- return S_OK;
- case HTTP_STATUS_NO_CONTENT:
- return E_FAIL;
- default:
- return E_FAIL;
- }
-}
-
-HRESULT CreateUniqueTempFileForLoggedOnUser(CString* target_file) {
- ASSERT1(target_file);
- CAccessToken access_token;
- TCHAR buffer[MAX_PATH] = {0};
- VERIFY1(access_token.GetThreadToken(TOKEN_READ));
- HRESULT hr = ::SHGetFolderPath(NULL,
- CSIDL_LOCAL_APPDATA,
- access_token.GetHandle(),
- SHGFP_TYPE_CURRENT,
- buffer);
- if (FAILED(hr)) {
- return hr;
- }
-
- return GetNewFileNameInDirectory(buffer, target_file);
-}
-
-HRESULT DownloadCodeRedFileAsLoggedOnUser(const TCHAR* url,
- const TCHAR* file_path,
- void* callback_argument,
- int* http_status_code) {
- ASSERT1(http_status_code);
- *http_status_code = 0;
- scoped_handle logged_on_user_token(
- goopdate_utils::GetImpersonationTokenForMachineProcess(true));
- if (!valid(logged_on_user_token)) {
- return E_FAIL;
- }
-
- HRESULT hr = S_OK;
- CString download_target_path;
- {
- scoped_impersonation impersonate_user(get(logged_on_user_token));
- hr = HRESULT_FROM_WIN32(impersonate_user.result());
- if (FAILED(hr)) {
- return hr;
- }
-
- hr = CreateUniqueTempFileForLoggedOnUser(&download_target_path);
- if (FAILED(hr)) {
- return hr;
- }
- if (download_target_path.IsEmpty()) {
- return E_FAIL;
- }
-
- hr = DownloadCodeRedFile(url,
- download_target_path,
- callback_argument,
- http_status_code);
- if (FAILED(hr)) {
- ::DeleteFile(download_target_path);
- return hr;
- }
- }
-
- const DWORD kMoveFlag = MOVEFILE_COPY_ALLOWED |
- MOVEFILE_REPLACE_EXISTING |
- MOVEFILE_WRITE_THROUGH;
- if (!::MoveFileEx(download_target_path,
- file_path,
- kMoveFlag)) {
- hr = HRESULT_FROM_WIN32(::GetLastError());
- }
-
- ::DeleteFile(download_target_path);
- return hr;
-}
-
-// Download Callback for Code Red.
-// Returns S_OK when the download of the Code Red file succeeds and E_FAIL
-// otherwise.
-HRESULT CodeRedDownloadCallback(const TCHAR* url,
- const TCHAR* file_path,
- void* callback_argument) {
- ++metric_cr_callback_total;
-
- int http_status_code = 0;
- HRESULT hr = DownloadCodeRedFileAsLoggedOnUser(url,
- file_path,
- callback_argument,
- &http_status_code);
- if (FAILED(hr) && (http_status_code != HTTP_STATUS_NO_CONTENT)) {
- hr = DownloadCodeRedFile(url,
- file_path,
- callback_argument,
- &http_status_code);
- }
-
- switch (http_status_code) {
- case HTTP_STATUS_OK:
- ++metric_cr_callback_status_200;
- break;
- case HTTP_STATUS_NO_CONTENT:
- ++metric_cr_callback_status_204;
- break;
- default:
- ++metric_cr_callback_status_other;
- break;
- }
-
- return hr;
-}
-
-} // namespace
-
-HRESULT CheckForCodeRed(bool is_machine, const CString& omaha_version) {
- HRESULT hr = FixGoogleUpdate(kGoogleUpdateAppId,
- omaha_version,
- _T(""), // Omaha doesn't have a language.
- is_machine,
- &CodeRedDownloadCallback,
- NULL);
- CORE_LOG(L2, (_T("[FixGoogleUpdate returned 0x%08x]"), hr));
- return hr;
-}
-
-} // namespace omaha
« no previous file with comments | « goopdate/code_red_check.h ('k') | goopdate/com_forwarder.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698