// Copyright 2017 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.

#include "chrome/browser/ui/views/native_widget_factory.h"

#include "chrome/browser/profiles/profile.h"
#include "chrome/browser/ui/views/theme_profile_key.h"
#include "ui/aura/window.h"
#include "ui/views/widget/desktop_aura/desktop_native_widget_aura.h"
#include "ui/views/widget/native_widget_aura.h"

views::NativeWidget* CreateNativeWidget(
    NativeWidgetType type,
    views::Widget::InitParams* params,
    views::internal::NativeWidgetDelegate* delegate) {
  // While the majority of the time, context wasn't plumbed through due to the
  // existence of a global WindowParentingClient, if this window is toplevel,
  // it's possible that there is no contextual state that we can use.
  gfx::NativeWindow parent_or_context =
      params->parent ? params->parent : params->context;
  Profile* profile = nullptr;
  if (parent_or_context)
    profile = GetThemeProfileForWindow(parent_or_context);
  views::NativeWidget* native_widget = nullptr;
  aura::Window* window = nullptr;
  if (type == NativeWidgetType::DESKTOP_NATIVE_WIDGET_AURA ||
      (!params->parent && !params->context && !params->child)) {
    // In the desktop case, do not always set the profile window
    // property from the parent since there are windows (like the task
    // manager) that are not associated with a specific profile.
    views::DesktopNativeWidgetAura* desktop_native_widget =
        new views::DesktopNativeWidgetAura(delegate);
    window = desktop_native_widget->GetNativeWindow();
    native_widget = desktop_native_widget;
  } else {
    views::NativeWidgetAura* native_widget_aura =
        new views::NativeWidgetAura(delegate);
    if (params->parent) {
      Profile* parent_profile = reinterpret_cast<Profile*>(
          params->parent->GetNativeWindowProperty(Profile::kProfileKey));
      native_widget_aura->SetNativeWindowProperty(Profile::kProfileKey,
                                                  parent_profile);
    }
    window = native_widget_aura->GetNativeWindow();
    native_widget = native_widget_aura;
  }
  // Use the original profile because |window| may outlive the profile
  // of the context window.  This can happen with incognito profiles.
  // However, the original profile will stick around until shutdown.
  SetThemeProfileForWindow(window,
                           profile ? profile->GetOriginalProfile() : nullptr);
  return native_widget;
}
