| Index: chrome/browser/chromeos/login/ui/login_feedback.cc | 
| diff --git a/chrome/browser/chromeos/login/ui/login_feedback.cc b/chrome/browser/chromeos/login/ui/login_feedback.cc | 
| index bd60b41b649149b26b8eccd0c2aac13cf3eb60f7..6b216dff3dbd71ec152d2f6dd54e497dc134c1f0 100644 | 
| --- a/chrome/browser/chromeos/login/ui/login_feedback.cc | 
| +++ b/chrome/browser/chromeos/login/ui/login_feedback.cc | 
| @@ -8,6 +8,7 @@ | 
|  | 
| #include "base/bind.h" | 
| #include "base/callback.h" | 
| +#include "base/threading/thread_task_runner_handle.h" | 
| #include "base/time/time.h" | 
| #include "chrome/browser/chromeos/login/ui/login_display_host.h" | 
| #include "chrome/browser/extensions/api/feedback_private/feedback_private_api.h" | 
| @@ -17,6 +18,7 @@ | 
| #include "chrome/common/extensions/extension_constants.h" | 
| #include "chrome/grit/browser_resources.h" | 
| #include "content/public/browser/browser_thread.h" | 
| +#include "content/public/browser/web_contents.h" | 
| #include "content/public/browser/web_contents_observer.h" | 
| #include "extensions/browser/app_window/app_window.h" | 
| #include "extensions/browser/app_window/app_window_registry.h" | 
| @@ -60,6 +62,8 @@ class FeedbackExtensionLoader : public extensions::ProcessManagerObserver, | 
| explicit FeedbackExtensionLoader(Profile* profile); | 
| ~FeedbackExtensionLoader() override; | 
|  | 
| +  void Initialize(); | 
| + | 
| void AddOnReadyCallback(const base::Closure& on_ready_callback); | 
| void RunOnReadyCallbacks(); | 
|  | 
| @@ -83,8 +87,10 @@ FeedbackExtensionLoader* instance = nullptr; | 
| // static | 
| void FeedbackExtensionLoader::Load(Profile* profile, | 
| const base::Closure& on_ready_callback) { | 
| -  if (instance == nullptr) | 
| +  if (instance == nullptr) { | 
| instance = new FeedbackExtensionLoader(profile); | 
| +    instance->Initialize(); | 
| +  } | 
|  | 
| DCHECK_EQ(instance->profile_, profile); | 
| DCHECK(!on_ready_callback.is_null()); | 
| @@ -92,18 +98,7 @@ void FeedbackExtensionLoader::Load(Profile* profile, | 
| } | 
|  | 
| FeedbackExtensionLoader::FeedbackExtensionLoader(Profile* profile) | 
| -    : profile_(profile) { | 
| -  extensions::ComponentLoader* component_loader = GetComponentLoader(profile_); | 
| -  DCHECK(!component_loader->Exists(extension_misc::kFeedbackExtensionId)) | 
| -      << "Feedback extension should not be loaded in signin profile by default"; | 
| -  component_loader->Add(IDR_FEEDBACK_MANIFEST, | 
| -                        base::FilePath(FILE_PATH_LITERAL("feedback"))); | 
| - | 
| -  extensions::ProcessManager* pm = GetProcessManager(profile_); | 
| -  pm->AddObserver(this); | 
| -  DCHECK( | 
| -      !pm->GetBackgroundHostForExtension(extension_misc::kFeedbackExtensionId)); | 
| -} | 
| +    : profile_(profile) {} | 
|  | 
| FeedbackExtensionLoader::~FeedbackExtensionLoader() { | 
| DCHECK_EQ(instance, this); | 
| @@ -113,6 +108,25 @@ FeedbackExtensionLoader::~FeedbackExtensionLoader() { | 
| GetComponentLoader(profile_)->Remove(extension_misc::kFeedbackExtensionId); | 
| } | 
|  | 
| +void FeedbackExtensionLoader::Initialize() { | 
| +  extensions::ProcessManager* pm = GetProcessManager(profile_); | 
| +  pm->AddObserver(this); | 
| +  extensions::ExtensionHost* const host = | 
| +      pm->GetBackgroundHostForExtension(extension_misc::kFeedbackExtensionId); | 
| +  if (host) { | 
| +    OnBackgroundHostCreated(host); | 
| +    if (!host->host_contents()->IsLoading()) | 
| +      DocumentOnLoadCompletedInMainFrame(); | 
| +    return; | 
| +  } | 
| + | 
| +  extensions::ComponentLoader* component_loader = GetComponentLoader(profile_); | 
| +  if (!component_loader->Exists(extension_misc::kFeedbackExtensionId)) { | 
| +    component_loader->Add(IDR_FEEDBACK_MANIFEST, | 
| +                          base::FilePath(FILE_PATH_LITERAL("feedback"))); | 
| +  } | 
| +} | 
| + | 
| void FeedbackExtensionLoader::AddOnReadyCallback( | 
| const base::Closure& on_ready_callback) { | 
| on_ready_callbacks_.push_back(on_ready_callback); | 
| @@ -241,6 +255,12 @@ void LoginFeedback::EnsureFeedbackUI() { | 
| api->RequestFeedbackForFlow( | 
| description_, "Login", GURL(), | 
| extensions::api::feedback_private::FeedbackFlow::FEEDBACK_FLOW_LOGIN); | 
| + | 
| +  // Make sure there is a feedback app window opened. | 
| +  base::ThreadTaskRunnerHandle::Get()->PostDelayedTask( | 
| +      FROM_HERE, | 
| +      base::Bind(&LoginFeedback::EnsureFeedbackUI, weak_factory_.GetWeakPtr()), | 
| +      base::TimeDelta::FromSeconds(1)); | 
| } | 
|  | 
| void LoginFeedback::OnFeedbackFinished() { | 
|  |