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

Side by Side Diff: chromecast/shell/browser/android/cast_window_android.cc

Issue 490603002: Chromecast: initial checkin of Android-based cast shell. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 6 years, 4 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 unified diff | Download patch
OLDNEW
(Empty)
1 // Copyright 2014 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4
5 #include "chromecast/shell/browser/android/cast_window_android.h"
6
7 #include "base/message_loop/message_loop.h"
8 #include "base/path_service.h"
9 #include "chromecast/shell/browser/android/cast_window_manager.h"
10 #include "content/public/browser/devtools_agent_host.h"
11 #include "content/public/browser/navigation_controller.h"
12 #include "content/public/browser/navigation_entry.h"
13 #include "content/public/browser/render_view_host.h"
14 #include "content/public/common/renderer_preferences.h"
15 #include "jni/CastWindowAndroid_jni.h"
16
17 namespace chromecast {
18 namespace shell {
19
20 // static
21 bool CastWindowAndroid::RegisterJni(JNIEnv* env) {
22 return RegisterNativesImpl(env);
23 }
24
25 CastWindowAndroid::CastWindowAndroid(content::WebContents* web_contents)
26 : content::WebContentsObserver(web_contents) {
27 }
28
29 CastWindowAndroid::~CastWindowAndroid() {
30 }
31
32 // static
33 CastWindowAndroid* CastWindowAndroid::CreateNewWindow(
34 content::BrowserContext* browser_context,
35 const GURL& url) {
36 content::WebContents::CreateParams create_params(browser_context);
37 create_params.routing_id = MSG_ROUTING_NONE;
38 content::WebContents* web_contents =
39 content::WebContents::Create(create_params);
40 CastWindowAndroid* shell = CreateCastWindowAndroid(
41 web_contents,
42 create_params.initial_size);
43 if (!url.is_empty())
44 shell->LoadURL(url);
45 return shell;
46 }
47
48 // static
49 CastWindowAndroid* CastWindowAndroid::CreateCastWindowAndroid(
50 content::WebContents* web_contents,
51 const gfx::Size& initial_size) {
52 CastWindowAndroid* shell = new CastWindowAndroid(web_contents);
53
54 JNIEnv* env = base::android::AttachCurrentThread();
55 base::android::ScopedJavaLocalRef<jobject> shell_android(
56 CreateCastWindowView(shell));
57
58 shell->java_object_.Reset(env, shell_android.Release());
59 shell->web_contents_.reset(web_contents);
60 web_contents->SetDelegate(shell);
61
62 Java_CastWindowAndroid_initFromNativeTabContents(
Yaron 2014/08/20 18:11:02 initFromNativeWebContents
gunsch 2014/08/22 22:44:30 Done.
63 env, shell->java_object_.obj(), reinterpret_cast<jint>(web_contents));
64
65 // Enabling hole-punching also requires runtime renderer preference
66 web_contents->GetMutableRendererPrefs()->
67 use_video_overlay_for_embedded_encrypted_video = true;
68 web_contents->GetRenderViewHost()->SyncRendererPrefs();
69
70 return shell;
71 }
72
73 void CastWindowAndroid::Close() {
74 // Note: if multiple windows becomes supported, this may close other devtools
75 // sessions.
76 content::DevToolsAgentHost::DetachAllClients();
77 CloseCastWindowView(java_object_.obj());
78 delete this;
79 }
80
81 void CastWindowAndroid::LoadURL(const GURL& url) {
82 content::NavigationController::LoadURLParams params(url);
83 params.transition_type = content::PageTransitionFromInt(
84 content::PAGE_TRANSITION_TYPED |
85 content::PAGE_TRANSITION_FROM_ADDRESS_BAR);
86 web_contents_->GetController().LoadURLWithParams(params);
87 web_contents_->Focus();
88 }
89
90 void CastWindowAndroid::AddNewContents(content::WebContents* source,
91 content::WebContents* new_contents,
92 WindowOpenDisposition disposition,
93 const gfx::Rect& initial_pos,
94 bool user_gesture,
95 bool* was_blocked) {
96 NOTIMPLEMENTED();
97 if (was_blocked) {
98 *was_blocked = true;
99 }
100 }
101
102 void CastWindowAndroid::CloseContents(content::WebContents* source) {
103 DCHECK_EQ(source, web_contents_.get());
104 Close();
105 }
106
107 bool CastWindowAndroid::CanOverscrollContent() const {
108 return false;
109 }
110
111 bool CastWindowAndroid::AddMessageToConsole(content::WebContents* source,
112 int32 level,
113 const base::string16& message,
114 int32 line_no,
115 const base::string16& source_id) {
116 return false;
117 }
118
119 void CastWindowAndroid::ActivateContents(content::WebContents* contents) {
120 DCHECK_EQ(contents, web_contents_.get());
121 contents->GetRenderViewHost()->Focus();
122 }
123
124 void CastWindowAndroid::DeactivateContents(content::WebContents* contents) {
125 DCHECK_EQ(contents, web_contents_.get());
126 contents->GetRenderViewHost()->Blur();
127 }
128
129 } // namespace shell
130 } // namespace chromecast
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698