| Index: goopdate/app_state_checking_for_update.cc
|
| diff --git a/goopdate/app_state_checking_for_update.cc b/goopdate/app_state_checking_for_update.cc
|
| deleted file mode 100644
|
| index 5c936b30583570e984c979dba4b40540ee7f84eb..0000000000000000000000000000000000000000
|
| --- a/goopdate/app_state_checking_for_update.cc
|
| +++ /dev/null
|
| @@ -1,247 +0,0 @@
|
| -// Copyright 2009-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/app_state_checking_for_update.h"
|
| -#include "omaha/base/debug.h"
|
| -#include "omaha/base/error.h"
|
| -#include "omaha/base/logging.h"
|
| -#include "omaha/common/lang.h"
|
| -#include "omaha/common/update_response.h"
|
| -#include "omaha/goopdate/app_manager.h"
|
| -#include "omaha/goopdate/app_state_no_update.h"
|
| -#include "omaha/goopdate/app_state_update_available.h"
|
| -#include "omaha/goopdate/model.h"
|
| -#include "omaha/goopdate/server_resource.h"
|
| -#include "omaha/goopdate/string_formatter.h"
|
| -#include "omaha/goopdate/update_response_utils.h"
|
| -#include "omaha/goopdate/worker_metrics.h"
|
| -#include "omaha/goopdate/worker_utils.h"
|
| -
|
| -namespace omaha {
|
| -
|
| -namespace fsm {
|
| -
|
| -xml::UpdateResponseResult GetUpdateResponseResult(
|
| - const App* app,
|
| - const xml::UpdateResponse* update_response) {
|
| - ASSERT1(app);
|
| - ASSERT1(update_response);
|
| -
|
| - const CString language = app->app_bundle()->display_language();
|
| -
|
| - xml::UpdateResponseResult update_response_result =
|
| - update_response_utils::GetResult(update_response,
|
| - app->app_guid_string(),
|
| - language);
|
| -
|
| - const bool is_omaha = !!::IsEqualGUID(kGoopdateGuid, app->app_guid());
|
| - const bool has_update = update_response_result.first == S_OK &&
|
| - app->is_update();
|
| -
|
| - // Defer the update if the app is not Omaha, it has an update available, and
|
| - // an Omaha update is available at the same time.
|
| - if (!is_omaha &&
|
| - has_update &&
|
| - update_response_utils::IsOmahaUpdateAvailable(update_response)) {
|
| - StringFormatter formatter(language);
|
| - CString text;
|
| - VERIFY1(SUCCEEDED(formatter.LoadString(IDS_NO_UPDATE_RESPONSE, &text)));
|
| - update_response_result = std::make_pair(GOOPDATE_E_UPDATE_DEFERRED, text);
|
| - }
|
| -
|
| - return update_response_result;
|
| -}
|
| -
|
| -AppStateCheckingForUpdate::AppStateCheckingForUpdate()
|
| - : AppState(STATE_CHECKING_FOR_UPDATE),
|
| - update_response_(NULL) {
|
| -}
|
| -
|
| -// TODO(omaha3): Consider passing in an xml::response::App instead of a raw
|
| -// xml::UpdateResponse to this method.
|
| -void AppStateCheckingForUpdate::PostUpdateCheck(
|
| - App* app,
|
| - HRESULT update_check_result,
|
| - xml::UpdateResponse* update_response) {
|
| - CORE_LOG(L3, (_T("[AppStateCheckingForUpdate::PostUpdateCheck][0x%p]"), app));
|
| -
|
| - ASSERT1(app);
|
| - ASSERT1(update_response);
|
| -
|
| - ASSERT1(app->model()->IsLockedByCaller());
|
| -
|
| - update_response_ = update_response;
|
| -
|
| - const CString language = app->app_bundle()->display_language();
|
| -
|
| - if (FAILED(update_check_result)) {
|
| - // TODO(omaha3): There is no guarantee that this is a actually network
|
| - // error. In Omaha 2, this was called much closer to the send. Making most
|
| - // errors, such as processing errors, app errors helps, but it could still
|
| - // be a parsing or other error.
|
| - CString error_message;
|
| - worker_utils::FormatMessageForNetworkError(update_check_result,
|
| - language,
|
| - &error_message);
|
| -
|
| - Error(app, ErrorContext(update_check_result), error_message);
|
| - return;
|
| - }
|
| -
|
| - PersistUpdateCheckSuccessfullySent(*app);
|
| -
|
| - const xml::UpdateResponseResult update_response_result(
|
| - GetUpdateResponseResult(app, update_response));
|
| -
|
| - const HRESULT& code = update_response_result.first;
|
| - const CString& message = update_response_result.second;
|
| -
|
| - if (SUCCEEDED(code)) {
|
| - HandleUpdateAvailable(app, code, message);
|
| - } else if (code == GOOPDATE_E_UPDATE_DEFERRED) {
|
| - HandleUpdateDeferred(app, code, message);
|
| - } else if (code == GOOPDATE_E_NO_UPDATE_RESPONSE) {
|
| - HandleNoUpdate(app, code, message);
|
| - } else {
|
| - HandleErrorResponse(app, code, message);
|
| - }
|
| -}
|
| -
|
| -void AppStateCheckingForUpdate::HandleUpdateAvailable(App* app,
|
| - HRESULT code,
|
| - const CString& message) {
|
| - CORE_LOG(L3, (_T("[HandleUpdateAvailable][0x%p]"), app));
|
| -
|
| - ASSERT1(app);
|
| - ASSERT1(SUCCEEDED(code));
|
| -
|
| - UNREFERENCED_PARAMETER(code);
|
| - UNREFERENCED_PARAMETER(message);
|
| -
|
| - app->set_has_update_available(true);
|
| -
|
| - HRESULT hr = update_response_utils::BuildApp(update_response_, code, app);
|
| - if (FAILED(hr)) {
|
| - // Most of the errors that might actually be seen are likely to be due to
|
| - // response issues. Therefore, display a message about the server.
|
| - const CString language = app->app_bundle()->display_language();
|
| - StringFormatter formatter(language);
|
| - CString error_message;
|
| - VERIFY1(SUCCEEDED(formatter.LoadString(IDS_UNKNOWN_APPLICATION,
|
| - &error_message)));
|
| - Error(app, ErrorContext(hr), error_message);
|
| - }
|
| -
|
| - const TCHAR* action = app->is_update() ? _T("update") : _T("install");
|
| - app->LogTextAppendFormat(_T("Status=%s"), action);
|
| -
|
| - // Record the update available response regardless of how it is handled.
|
| - AppManager::Instance()->PersistSuccessfulUpdateCheckResponse(*app, true);
|
| -
|
| - if (app->is_update()) {
|
| - if (::IsEqualGUID(kGoopdateGuid, app->app_guid())) {
|
| - ++metric_worker_self_updates_available;
|
| - } else {
|
| - ++metric_worker_app_updates_available;
|
| - }
|
| - }
|
| -
|
| - ChangeState(app, new AppStateUpdateAvailable);
|
| -}
|
| -
|
| -void AppStateCheckingForUpdate::HandleUpdateDeferred(App* app,
|
| - HRESULT code,
|
| - const CString& message) {
|
| - CORE_LOG(L3, (_T("[HandleUpdateDeferred][0x%p]"), app));
|
| -
|
| - ASSERT1(app);
|
| - ASSERT1(code == GOOPDATE_E_UPDATE_DEFERRED);
|
| -
|
| - ASSERT1(app->is_update());
|
| -
|
| - app->SetNoUpdate(ErrorContext(code), message);
|
| - ChangeState(app, new AppStateNoUpdate);
|
| -}
|
| -
|
| -void AppStateCheckingForUpdate::HandleNoUpdate(App* app,
|
| - HRESULT code,
|
| - const CString& message) {
|
| - CORE_LOG(L3, (_T("[HandleNoUpdate][0x%p]"), app));
|
| - ASSERT1(app);
|
| - ASSERT1(code == GOOPDATE_E_NO_UPDATE_RESPONSE);
|
| -
|
| - app->LogTextAppendFormat(_T("Status=no-update"));
|
| -
|
| - // For installs, no update is handled as an error.
|
| - if (!app->is_update()) {
|
| - Error(app, ErrorContext(code), message);
|
| - return;
|
| - }
|
| -
|
| - VERIFY1(SUCCEEDED(update_response_utils::BuildApp(update_response_,
|
| - code,
|
| - app)));
|
| - AppManager::Instance()->PersistSuccessfulUpdateCheckResponse(*app, false);
|
| -
|
| - app->SetNoUpdate(ErrorContext(S_OK), message);
|
| - ChangeState(app, new AppStateNoUpdate);
|
| -}
|
| -
|
| -void AppStateCheckingForUpdate::HandleErrorResponse(App* app,
|
| - HRESULT code,
|
| - const CString& message) {
|
| - CORE_LOG(L3, (_T("[HandleErrorResponse][0x%p]"), app));
|
| -
|
| - ASSERT1(app);
|
| - ASSERT1(FAILED(code));
|
| -
|
| - CString log_status;
|
| - switch (code) {
|
| - case GOOPDATE_E_NO_SERVER_RESPONSE:
|
| - log_status = _T("no-response-received");
|
| - break;
|
| - case GOOPDATE_E_RESTRICTED_SERVER_RESPONSE:
|
| - log_status = _T("restricted");
|
| - break;
|
| - case GOOPDATE_E_UNKNOWN_APP_SERVER_RESPONSE:
|
| - case GOOPDATE_E_OS_NOT_SUPPORTED:
|
| - case GOOPDATE_E_INTERNAL_ERROR_SERVER_RESPONSE:
|
| - case GOOPDATE_E_SERVER_RESPONSE_NO_HASH:
|
| - case GOOPDATE_E_SERVER_RESPONSE_UNSUPPORTED_PROTOCOL:
|
| - case GOOPDATE_E_UNKNOWN_SERVER_RESPONSE:
|
| - default:
|
| - log_status = _T("error");
|
| - break;
|
| - }
|
| -
|
| - app->LogTextAppendFormat(_T("Status=%s, Code=0x%08x"), log_status, code);
|
| -
|
| - Error(app, ErrorContext(code), message);
|
| -}
|
| -
|
| -void AppStateCheckingForUpdate::PersistUpdateCheckSuccessfullySent(
|
| - const App& app) {
|
| - AppManager& app_manager = *AppManager::Instance();
|
| - VERIFY1(SUCCEEDED(app_manager.PersistUpdateCheckSuccessfullySent(
|
| - app, update_response_->GetElapsedSecondsSinceDayStart())));
|
| -
|
| - // Here we assume that some of the members in app object
|
| - // (days_since_last_active_ping_, days_since_last_roll_call_, iid_, did_run_)
|
| - // will not be used after the update check so there is no need to update them.
|
| -}
|
| -
|
| -} // namespace fsm
|
| -
|
| -} // namespace omaha
|
|
|