Chromium Code Reviews| Index: chrome/browser/chromeos/login/wizard_controller.cc |
| =================================================================== |
| --- chrome/browser/chromeos/login/wizard_controller.cc (revision 52817) |
| +++ chrome/browser/chromeos/login/wizard_controller.cc (working copy) |
| @@ -14,6 +14,7 @@ |
| #include "app/l10n_util.h" |
| #include "base/command_line.h" |
| #include "base/logging.h" |
| +#include "base/file_util.h" |
| #include "chrome/browser/browser_process.h" |
| #include "chrome/browser/chromeos/cros/cros_library.h" |
| #include "chrome/browser/chromeos/cros/login_library.h" |
| @@ -51,6 +52,19 @@ |
| // A boolean pref of the OOBE complete flag. |
| const wchar_t kOobeComplete[] = L"OobeComplete"; |
| +// Path to OEM partner startup customization manifest. |
| +const char kStartupCustomizationManifestPath[] = |
| + "/mnt/partner_partition/etc/chromeos/startup_manifest.json"; |
| + |
| +// URL where to fetch OEM services customization manifest from. |
| +// TODO(denisromanov): Change this to real URL when it becomes available. |
|
Nikita (slow)
2010/07/19 12:31:19
Please file issue to track this and mention it her
|
| +const char kServicesCustomizationManifestUrl[] = |
| + "file:///mnt/partner_partition/etc/chromeos/services_manifest.json"; |
| + |
| +// Path to flag file indicating that OOBE was completed successfully. |
| +const char kOobeCompleteFlagFilePath[] = |
| + "/home/chronos/.oobe_completed"; |
| + |
| // Default size of the OOBE screen. |
| const int kWizardScreenWidth = 700; |
| const int kWizardScreenHeight = 416; |
| @@ -153,6 +167,8 @@ |
| void DeleteWizardControllerAndLaunchBrowser(WizardController* controller) { |
| delete controller; |
| + // Apply OEM partner services customizations. |
| + controller->ApplyPartnerServicesCustomizations(); |
|
Nikita (slow)
2010/07/19 12:31:19
It seems like a not the best place to apply these
|
| // Launch browser after controller is deleted and its windows are closed. |
| chromeos::LoginUtils::Get()->EnableBrowserLaunch(true); |
| ChromeThread::PostTask( |
| @@ -343,6 +359,14 @@ |
| } |
| SetCurrentScreen(GetLoginScreen()); |
| + |
| + LOG(INFO) << "WTF: " << (is_out_of_box_ ? "out" : "in"); |
|
Nikita (slow)
2010/07/19 12:31:19
Debug info - should be removed?
At least place a d
|
| + |
| + if (is_out_of_box_) { |
| + // Initiate fetching partner services manifest here. |
| + services_manifest_fetcher_.reset(new StringFetcher( |
|
Nikita (slow)
2010/07/19 12:31:19
We're fetching manifest during OOBE
welcome-update
|
| + kServicesCustomizationManifestUrl)); |
| + } |
| } |
| void WizardController::ShowAccountScreen() { |
| @@ -557,8 +581,36 @@ |
| prefs->SetBoolean(kOobeComplete, true); |
| // Make sure that changes are reflected immediately. |
| prefs->SavePersistentPrefs(); |
| + // Create flag file for boot-time init scripts. |
| + FilePath oobe_complete_path(kOobeCompleteFlagFilePath); |
| + FILE* oobe_flag_file = file_util::OpenFile(oobe_complete_path, "w+b"); |
| + DCHECK(oobe_flag_file != NULL) << kOobeCompleteFlagFilePath; |
| + if (oobe_flag_file != NULL) |
| + file_util::CloseFile(oobe_flag_file); |
| } |
| +void WizardController::ApplyPartnerServicesCustomizations() { |
| + if (services_manifest_fetcher_.get() == NULL || |
| + services_manifest_fetcher_->result().empty()) { |
| + return; |
| + } |
| + scoped_ptr<chromeos::ServicesCustomizationDocument> customization; |
| + bool manifest_loaded; |
| + customization.reset(new chromeos::ServicesCustomizationDocument()); |
| + manifest_loaded = customization->LoadManifestFromString( |
| + services_manifest_fetcher_->result()); |
| + DCHECK(manifest_loaded) << "Customization manifest fetch error: " |
| + << services_manifest_fetcher_->result(); |
| + if (!manifest_loaded) |
| + return; |
| + if (!customization->initial_start_page_url().empty()) { |
| + // Append partner's start page url to command line so it gets opened |
| + // on browser startup. |
| + CommandLine::ForCurrentProcess()->AppendLooseValue( |
| + UTF8ToWide(customization->initial_start_page_url())); |
| + } |
|
Nikita (slow)
2010/07/19 12:31:19
apps + exts + support page?
|
| +} |
| + |
| /////////////////////////////////////////////////////////////////////////////// |
| // WizardController, chromeos::ScreenObserver overrides: |
| void WizardController::OnExit(ExitCodes exit_code) { |
| @@ -669,45 +721,48 @@ |
| scoped_ptr<chromeos::StartupCustomizationDocument> customization; |
| - if (!oobe_complete) { |
| - // Load partner customization startup manifest if needed. |
| - if (CommandLine::ForCurrentProcess()->HasSwitch( |
| - switches::kStartupManifest)) { |
| - customization.reset(new chromeos::StartupCustomizationDocument()); |
| - FilePath manifest_path = |
| - CommandLine::ForCurrentProcess()->GetSwitchValuePath( |
| - switches::kStartupManifest); |
| - bool manifest_loaded = customization->LoadManifestFromFile(manifest_path); |
| - DCHECK(manifest_loaded) << manifest_path.value(); |
| - } |
| + // Load partner customization startup manifest if it is available. |
| + FilePath startup_manifest_path(kStartupCustomizationManifestPath); |
| + if (file_util::PathExists(startup_manifest_path)) { |
|
Nikita (slow)
2010/07/19 12:31:19
Please add check that startup manifest should exis
|
| + customization.reset(new chromeos::StartupCustomizationDocument()); |
| + bool manifest_loaded = customization->LoadManifestFromFile( |
| + FilePath(kStartupCustomizationManifestPath)); |
| + DCHECK(manifest_loaded) << kStartupCustomizationManifestPath; |
| + if (!manifest_loaded) |
| + customization.reset(NULL); |
| + } |
| - // Do UX customizations if needed. |
| - if (customization != NULL) { |
| - // Switch to initial locale if specified by customization. |
| + if (chromeos::CrosLibrary::Get()->EnsureLoaded()) |
| + chromeos::CrosLibrary::Get()->GetLoginLibrary()->EmitLoginPromptReady(); |
|
Nikita (slow)
2010/07/19 12:31:19
We should look deeper into it.
Emitting login_prom
Nikita (slow)
2010/07/19 12:54:26
Possible solution:
1. Change Chrome locale only, s
|
| + |
| + if (customization.get() != NULL) { |
| + // Switch to initial locale if specified by customization |
| + // and has not been set yet. |
| + const std::string current_locale = |
| + g_browser_process->local_state()->GetString(prefs::kApplicationLocale); |
| + if (current_locale.empty()) { |
| const std::string locale = customization->initial_locale(); |
| if (!locale.empty()) { |
| chromeos::LanguageSwitchMenu::SwitchLanguage(locale); |
| } |
| + } |
| - // Set initial timezone if specified by customization. |
| - const std::string timezone_name = customization->initial_timezone(); |
| - if (!timezone_name.empty()) { |
| - icu::TimeZone* timezone = icu::TimeZone::createTimeZone( |
| - icu::UnicodeString::fromUTF8(timezone_name)); |
| - chromeos::CrosLibrary::Get()->GetSystemLibrary()->SetTimezone(timezone); |
| - } |
| + // Set initial timezone if specified by customization. |
| + const std::string timezone_name = customization->initial_timezone(); |
| + if (!timezone_name.empty()) { |
| + icu::TimeZone* timezone = icu::TimeZone::createTimeZone( |
| + icu::UnicodeString::fromUTF8(timezone_name)); |
| + chromeos::CrosLibrary::Get()->GetSystemLibrary()->SetTimezone(timezone); |
| } |
| } |
| // Create and show the wizard. |
| WizardController* controller = new WizardController(); |
| - if (!oobe_complete) |
| + if (customization.get() != NULL) |
| controller->SetCustomization(customization.release()); |
| controller->ShowBackground(screen_bounds); |
| controller->Init(first_screen_name, screen_bounds); |
| controller->Show(); |
| - if (chromeos::CrosLibrary::Get()->EnsureLoaded()) |
| - chromeos::CrosLibrary::Get()->GetLoginLibrary()->EmitLoginPromptReady(); |
| } |
| } // namespace browser |