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

Side by Side Diff: remoting/client/ios/session/remoting_client.mm

Issue 2871993003: Moving the iOS directory to be remoting top level. (Closed)
Patch Set: //remoting/ios was the old landing target for the internal iOS application. Fix. Created 3 years, 7 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 2017 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 #if !defined(__has_feature) || !__has_feature(objc_arc)
6 #error "This file requires ARC support."
7 #endif
8
9 #import "remoting/client/ios/session/remoting_client.h"
10
11 #include <memory>
12
13 #import "base/mac/bind_objc_block.h"
14 #import "ios/third_party/material_components_ios/src/components/Dialogs/src/Mate rialDialogs.h"
15 #import "remoting/client/ios/display/gl_display_handler.h"
16 #import "remoting/client/ios/domain/client_session_details.h"
17 #import "remoting/client/ios/domain/host_info.h"
18
19 #include "base/strings/sys_string_conversions.h"
20 #include "remoting/client/chromoting_client_runtime.h"
21 #include "remoting/client/chromoting_session.h"
22 #include "remoting/client/connect_to_host_info.h"
23 #include "remoting/client/gesture_interpreter.h"
24 #include "remoting/client/ios/session/remoting_client_session_delegate.h"
25 #include "remoting/protocol/session.h"
26 #include "remoting/protocol/video_renderer.h"
27
28 NSString* const kHostSessionStatusChanged = @"kHostSessionStatusChanged";
29 NSString* const kHostSessionPinProvided = @"kHostSessionPinProvided";
30
31 NSString* const kSessionDetails = @"kSessionDetails";
32 NSString* const kSessonStateErrorCode = @"kSessonStateErrorCode";
33 NSString* const kHostSessionPin = @"kHostSessionPin";
34
35 @interface RemotingClient () {
36 remoting::ChromotingClientRuntime* _runtime;
37 std::unique_ptr<remoting::ChromotingSession> _session;
38 remoting::RemotingClientSessonDelegate* _sessonDelegate;
39 ClientSessionDetails* _sessionDetails;
40 // Call _secretFetchedCallback on the network thread.
41 remoting::protocol::SecretFetchedCallback _secretFetchedCallback;
42 std::unique_ptr<remoting::GestureInterpreter> _gestureInterpreter;
43 }
44 @end
45
46 @implementation RemotingClient
47
48 @synthesize displayHandler = _displayHandler;
49
50 - (instancetype)init {
51 self = [super init];
52 if (self) {
53 _runtime = remoting::ChromotingClientRuntime::GetInstance();
54 _sessonDelegate = new remoting::RemotingClientSessonDelegate(self);
55 _sessionDetails = [[ClientSessionDetails alloc] init];
56
57 [[NSNotificationCenter defaultCenter]
58 addObserver:self
59 selector:@selector(hostSessionPinProvided:)
60 name:kHostSessionPinProvided
61 object:nil];
62 }
63 return self;
64 }
65
66 - (void)connectToHost:(HostInfo*)hostInfo
67 username:(NSString*)username
68 accessToken:(NSString*)accessToken {
69 DCHECK(_runtime->ui_task_runner()->BelongsToCurrentThread());
70 DCHECK(hostInfo);
71 DCHECK(hostInfo.jabberId);
72 DCHECK(hostInfo.hostId);
73 DCHECK(hostInfo.publicKey);
74
75 _sessionDetails.hostInfo = hostInfo;
76
77 remoting::ConnectToHostInfo info;
78 info.username = base::SysNSStringToUTF8(username);
79 info.auth_token = base::SysNSStringToUTF8(accessToken);
80 info.host_jid = base::SysNSStringToUTF8(hostInfo.jabberId);
81 info.host_id = base::SysNSStringToUTF8(hostInfo.hostId);
82 info.host_pubkey = base::SysNSStringToUTF8(hostInfo.publicKey);
83 // TODO(nicholss): If iOS supports pairing, pull the stored data and
84 // insert it here.
85 info.pairing_id = "";
86 info.pairing_secret = "";
87
88 // TODO(nicholss): I am not sure about the following fields yet.
89 // info.capabilities =
90 // info.flags =
91 // info.host_version =
92 // info.host_os =
93 // info.host_os_version =
94
95 remoting::protocol::ClientAuthenticationConfig client_auth_config;
96 client_auth_config.host_id = info.host_id;
97 client_auth_config.pairing_client_id = info.pairing_id;
98 client_auth_config.pairing_secret = info.pairing_secret;
99 client_auth_config.fetch_secret_callback = base::BindBlockArc(
100 ^(bool pairing_supported, const remoting::protocol::SecretFetchedCallback&
101 secret_fetched_callback) {
102 _secretFetchedCallback = secret_fetched_callback;
103 _sessionDetails.state = SessionPinPrompt;
104 [[NSNotificationCenter defaultCenter]
105 postNotificationName:kHostSessionStatusChanged
106 object:self
107 userInfo:[NSDictionary
108 dictionaryWithObject:_sessionDetails
109 forKey:kSessionDetails]];
110 });
111
112 // TODO(nicholss): Add audio support to iOS.
113 base::WeakPtr<remoting::protocol::AudioStub> audioPlayer = nullptr;
114
115 _displayHandler = [[GlDisplayHandler alloc] init];
116 _displayHandler.delegate = self;
117
118 _session.reset(new remoting::ChromotingSession(
119 _sessonDelegate->GetWeakPtr(), [_displayHandler CreateCursorShapeStub],
120 [_displayHandler CreateVideoRenderer], audioPlayer, info,
121 client_auth_config));
122 _session->Connect();
123
124 __weak GlDisplayHandler* weakDisplayHandler = _displayHandler;
125 _gestureInterpreter.reset(new remoting::GestureInterpreter(
126 base::BindBlockArc(^(const remoting::ViewMatrix& matrix) {
127 [weakDisplayHandler onPixelTransformationChanged:matrix];
128 }),
129 _session.get()));
130 }
131
132 - (void)disconnectFromHost {
133 if (_session) {
134 _session->Disconnect();
135 }
136 // TODO(nicholss): Do we need to cleanup more?
137 }
138
139 #pragma mark - Eventing
140
141 - (void)hostSessionPinProvided:(NSNotification*)notification {
142 NSString* pin = [[notification userInfo] objectForKey:kHostSessionPin];
143 if (_secretFetchedCallback) {
144 _runtime->network_task_runner()->PostTask(
145 FROM_HERE, base::BindBlockArc(^{
146 _secretFetchedCallback.Run(base::SysNSStringToUTF8(pin));
147 }));
148 }
149 }
150
151 #pragma mark - Properties
152
153 - (HostInfo*)hostInfo {
154 return _sessionDetails.hostInfo;
155 }
156
157 - (remoting::GestureInterpreter*)gestureInterpreter {
158 return _gestureInterpreter.get();
159 }
160
161 #pragma mark - ChromotingSession::Delegate
162
163 - (void)onConnectionState:(remoting::protocol::ConnectionToHost::State)state
164 error:(remoting::protocol::ErrorCode)error {
165 switch (state) {
166 case remoting::protocol::ConnectionToHost::INITIALIZING:
167 NSLog(@"State --> INITIALIZING");
168 _sessionDetails.state = SessionInitializing;
169 break;
170 case remoting::protocol::ConnectionToHost::CONNECTING:
171 NSLog(@"State --> CONNECTING");
172 _sessionDetails.state = SessionConnecting;
173 break;
174 case remoting::protocol::ConnectionToHost::AUTHENTICATED:
175 NSLog(@"State --> AUTHENTICATED");
176 _sessionDetails.state = SessionAuthenticated;
177 break;
178 case remoting::protocol::ConnectionToHost::CONNECTED:
179 NSLog(@"State --> CONNECTED");
180 _sessionDetails.state = SessionConnected;
181 break;
182 case remoting::protocol::ConnectionToHost::FAILED:
183 NSLog(@"State --> FAILED");
184 _sessionDetails.state = SessionFailed;
185 break;
186 case remoting::protocol::ConnectionToHost::CLOSED:
187 NSLog(@"State --> CLOSED");
188 _sessionDetails.state = SessionClosed;
189 break;
190 default:
191 LOG(ERROR) << "onConnectionState, unknown state: " << state;
192 }
193
194 // TODO(nicholss): Send along the error code when we know what to do about it.
195 [[NSNotificationCenter defaultCenter]
196 postNotificationName:kHostSessionStatusChanged
197 object:self
198 userInfo:[NSDictionary dictionaryWithObject:_sessionDetails
199 forKey:kSessionDetails]];
200 }
201
202 - (void)commitPairingCredentialsForHost:(NSString*)host
203 id:(NSString*)id
204 secret:(NSString*)secret {
205 NSLog(@"TODO(nicholss): implement this, commitPairingCredentialsForHost.");
206 }
207
208 - (void)fetchThirdPartyTokenForUrl:(NSString*)tokenUrl
209 clientId:(NSString*)clientId
210 scope:(NSString*)scope {
211 NSLog(@"TODO(nicholss): implement this, fetchThirdPartyTokenForUrl.");
212 }
213
214 - (void)setCapabilities:(NSString*)capabilities {
215 NSLog(@"TODO(nicholss): implement this, setCapabilities.");
216 }
217
218 - (void)handleExtensionMessageOfType:(NSString*)type
219 message:(NSString*)message {
220 NSLog(@"TODO(nicholss): implement this, handleExtensionMessageOfType %@:%@.",
221 type, message);
222 }
223
224 - (void)surfaceChanged:(const CGRect&)frame {
225 [_displayHandler onSurfaceChanged:frame];
226 _gestureInterpreter->OnSurfaceSizeChanged(frame.size.width,
227 frame.size.height);
228 }
229
230 #pragma mark - GlDisplayHandlerDelegate
231
232 - (void)canvasSizeChanged:(CGSize)size {
233 if (_gestureInterpreter) {
234 _gestureInterpreter->OnDesktopSizeChanged(size.width, size.height);
235 }
236 }
237
238 @end
OLDNEW
« no previous file with comments | « remoting/client/ios/session/remoting_client.h ('k') | remoting/client/ios/session/remoting_client_session_delegate.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698