Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(9)

Unified Diff: chromecast/service/cast_service.cc

Issue 223143003: Initial checkin of chromecast content embedder (cast_shell) and related build scripts. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Add an additional function in gl_surface_cast.cc Created 6 years, 9 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: chromecast/service/cast_service.cc
diff --git a/chromecast/service/cast_service.cc b/chromecast/service/cast_service.cc
new file mode 100644
index 0000000000000000000000000000000000000000..03b6572296ad70646fc06e39585d260d61ffd5c7
--- /dev/null
+++ b/chromecast/service/cast_service.cc
@@ -0,0 +1,108 @@
+// Copyright (c) 2014 Google Inc. All Rights Reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "chromecast/service/cast_service.h"
+
+#include "base/command_line.h"
+#include "base/files/file_path.h"
+#include "base/threading/thread_checker.h"
+#include "chromecast/ui/gfx/gfx_plane.h"
+#include "content/public/browser/render_view_host.h"
+#include "content/public/browser/web_contents.h"
+#include "net/base/net_util.h"
+#include "ui/gfx/size.h"
+#include "url/gurl.h"
+
+namespace chromecast {
+
+namespace {
+
+GURL GetStartupURL() {
+ base::CommandLine* command_line = base::CommandLine::ForCurrentProcess();
+ const base::CommandLine::StringVector& args = command_line->GetArgs();
+
+ if (args.empty())
+ return GURL("http://www.google.com/");
+
+ GURL url(args[0]);
+ if (url.is_valid() && url.has_scheme())
+ return url;
+
+ return net::FilePathToFileURL(base::FilePath(args[0]));
+}
+
+gfx::chromecast::GfxPlane* GetGfxPlane(int resolution_height) {
+ gfx::Size requested_screen_size(1280, 720);
+ bool is_1080p_allowed = gfx::chromecast::GfxPlane::Is1080pAllowed();
+ if (resolution_height > 720 && is_1080p_allowed) {
+ requested_screen_size = gfx::Size(1920, 1080);
+ }
+
+ gfx::chromecast::GfxPlane* plane = gfx::chromecast::GfxPlane::GetPrimary();
+ // If a different resolution is requested, we need to re-initialize graphics.
+ if (plane && (plane->size() != requested_screen_size)) {
+ gfx::chromecast::GfxPlane::DestroyPrimary();
+ plane = NULL;
+ }
+
+ if (!plane) {
+ plane = gfx::chromecast::GfxPlane::CreatePrimary(
+ *base::CommandLine::ForCurrentProcess(), requested_screen_size);
+ }
+
+ return plane;
+}
+
+} // namespace
+
+CastService::CastService(content::BrowserContext* browser_context)
+ : browser_context_(browser_context),
+ stopped_(true),
+ thread_checker_(new base::ThreadChecker()) {
+}
+
+CastService::~CastService() {
+ DCHECK(thread_checker_->CalledOnValidThread());
+ DCHECK(stopped_);
+}
+
+void CastService::Initialize() {
+ PlatformInitialize();
+}
+
+void CastService::Start() {
+ DCHECK(thread_checker_->CalledOnValidThread());
+
+ Initialize();
+
+ gfx::chromecast::GfxPlane* plane = GetGfxPlane(720);
+ DCHECK(plane);
+
+ content::WebContents::CreateParams create_params(browser_context_, NULL);
+ create_params.routing_id = MSG_ROUTING_NONE;
+ create_params.initial_size = gfx::Size(plane->size().width(),
+ plane->size().height());
+ // TODO(lcwu): Before we pull in the Chromecast's application management
+ // code, we (temporarily) create a webcontents object here. Once the
+ // application management code is here, a new webcontents object (and
+ // hence the renderer) will be created whenever a new application is
+ // launched, regarless of whether the new app has the same domain as the
+ // previous one.
+ web_contents_.reset(content::WebContents::Create(create_params));
+ web_contents_->GetController().LoadURL(GetStartupURL(),
+ content::Referrer(),
+ content::PAGE_TRANSITION_TYPED,
+ std::string());
+
+ stopped_ = false;
+}
+
+void CastService::Stop() {
+ DCHECK(thread_checker_->CalledOnValidThread());
+
+ web_contents_->GetRenderViewHost()->ClosePage();
+ stopped_ = true;
+}
+
+} // namespace chromecast

Powered by Google App Engine
This is Rietveld 408576698