// Copyright 2020 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include "content/shell/browser/shell_platform_delegate.h"
#include "base/containers/contains.h"
#include "content/public/browser/render_widget_host_view.h"
#include "content/public/browser/web_contents.h"
#include "content/shell/browser/shell.h"
#include "content/shell/browser/shell_platform_data_aura.h"
#include "ui/aura/env.h"
#include "ui/aura/window.h"
#include "ui/aura/window_event_dispatcher.h"
namespace content {
struct ShellPlatformDelegate::ShellData {
gfx::NativeWindow window;
};
struct ShellPlatformDelegate::PlatformData {
std::unique_ptr<ShellPlatformDataAura> aura;
};
ShellPlatformDelegate::ShellPlatformDelegate() = default;
ShellPlatformDelegate::~ShellPlatformDelegate() = default;
ShellPlatformDataAura* ShellPlatformDelegate::GetShellPlatformDataAura() {
return platform_->aura.get();
}
void ShellPlatformDelegate::Initialize(const gfx::Size& default_window_size) {
platform_ = std::make_unique<PlatformData>();
platform_->aura =
std::make_unique<ShellPlatformDataAura>(default_window_size);
}
void ShellPlatformDelegate::CreatePlatformWindow(
Shell* shell,
const gfx::Size& initial_size) {
DCHECK(!base::Contains(shell_data_map_, shell));
ShellData& shell_data = shell_data_map_[shell];
platform_->aura->ResizeWindow(initial_size);
shell_data.window = platform_->aura->host()->window();
}
gfx::NativeWindow ShellPlatformDelegate::GetNativeWindow(Shell* shell) {
DCHECK(base::Contains(shell_data_map_, shell));
ShellData& shell_data = shell_data_map_[shell];
return shell_data.window;
}
void ShellPlatformDelegate::CleanUp(Shell* shell) {
DCHECK(base::Contains(shell_data_map_, shell));
shell_data_map_.erase(shell);
}
void ShellPlatformDelegate::SetContents(Shell* shell) {
aura::Window* content = shell->web_contents()->GetNativeView();
aura::Window* parent = platform_->aura->host()->window();
if (!parent->Contains(content))
parent->AddChild(content);
content->Show();
}
void ShellPlatformDelegate::ResizeWebContent(Shell* shell,
const gfx::Size& content_size) {
shell->web_contents()->GetRenderWidgetHostView()->SetSize(content_size);
}
void ShellPlatformDelegate::EnableUIControl(Shell* shell,
UIControl control,
bool is_enabled) {}
void ShellPlatformDelegate::SetAddressBarURL(Shell* shell, const GURL& url) {}
void ShellPlatformDelegate::SetIsLoading(Shell* shell, bool loading) {}
void ShellPlatformDelegate::SetTitle(Shell* shell,
const std::u16string& title) {}
void ShellPlatformDelegate::MainFrameCreated(Shell* shell) {}
bool ShellPlatformDelegate::DestroyShell(Shell* shell) {
return false; // Shell destroys itself.
}
} // namespace content