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

Unified Diff: remoting/host/disconnect_window_mac.mm

Issue 13212009: Made DesktopEnvironment responsible for creation of the disconnect window. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Fix Linux & Mac. Created 7 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: remoting/host/disconnect_window_mac.mm
diff --git a/remoting/host/disconnect_window_mac.mm b/remoting/host/disconnect_window_mac.mm
index bc3015afed7c9af0cd44e10954e79c3914d23274..3121766b88eb15d4f498c8ddafaeb01a5a9c688b 100644
--- a/remoting/host/disconnect_window_mac.mm
+++ b/remoting/host/disconnect_window_mac.mm
@@ -6,10 +6,14 @@
#import "remoting/host/disconnect_window_mac.h"
+#include "base/bind.h"
#include "base/compiler_specific.h"
+#include "base/location.h"
+#include "base/memory/ref_counted.h"
+#include "base/single_thread_task_runner.h"
#include "base/string_util.h"
#include "base/strings/sys_string_conversions.h"
-#include "remoting/host/disconnect_window.h"
+#include "remoting/host/host_window.h"
#include "remoting/host/ui_strings.h"
@interface DisconnectWindowController()
@@ -17,58 +21,99 @@
- (void)Hide;
@end
+const int kMaximumConnectedNameWidthInPixels = 400;
+
namespace remoting {
-class DisconnectWindowMac : public remoting::DisconnectWindow {
+class DisconnectWindowMac : public HostWindow::Core {
public:
- explicit DisconnectWindowMac(const UiStrings* ui_strings);
+ DisconnectWindowMac(
+ scoped_refptr<base::SingleThreadTaskRunner> caller_task_runner,
+ scoped_refptr<base::SingleThreadTaskRunner> ui_task_runner,
+ const base::Closure& disconnect_callback,
+ const std::string& username,
+ const UiStrings& ui_strings);
+
+ private:
+ friend class base::RefCountedThreadSafe<Core>;
virtual ~DisconnectWindowMac();
- virtual bool Show(const base::Closure& disconnect_callback,
- const std::string& username) OVERRIDE;
- virtual void Hide() OVERRIDE;
+ // HostWindow::Core overrides.
+ virtual void StartOnUiThread() OVERRIDE;
+ virtual void StopOnUiThread() OVERRIDE;
- private:
- DisconnectWindowController* window_controller_;
+ // Posts |disconnect_callback_| to the |caller_task_runner_| thread.
+ void DisconnectSession();
+
+ // Invoked in the |caller_task_runner_| thread to disconnect the client
+ // session.
+ base::Closure disconnect_callback_;
- // Points to the localized strings.
- const UiStrings* ui_strings_;
+ // Specifies the remote user name.
+ std::string username_;
+
+ DisconnectWindowController* window_controller_;
DISALLOW_COPY_AND_ASSIGN(DisconnectWindowMac);
};
-DisconnectWindowMac::DisconnectWindowMac(const UiStrings* ui_strings)
- : window_controller_(nil),
- ui_strings_(ui_strings) {
+DisconnectWindowMac::DisconnectWindowMac(
+ scoped_refptr<base::SingleThreadTaskRunner> caller_task_runner,
+ scoped_refptr<base::SingleThreadTaskRunner> ui_task_runner,
+ const base::Closure& disconnect_callback,
+ const std::string& username,
+ const UiStrings& ui_strings)
+ : HostWindow::Core(caller_task_runner,
+ ui_task_runner,
+ ui_strings),
+ disconnect_callback_(disconnect_callback),
+ username_(username),
+ window_controller_(NULL) {
}
DisconnectWindowMac::~DisconnectWindowMac() {
- Hide();
}
-bool DisconnectWindowMac::Show(const base::Closure& disconnect_callback,
- const std::string& username) {
- DCHECK(!disconnect_callback.is_null());
+void DisconnectWindowMac::StartOnUiThread() {
+ DCHECK(ui_task_runner()->BelongsToCurrentThread());
DCHECK(window_controller_ == nil);
+ base::Closure disconnect_callback =
+ base::Bind(&DisconnectWindowMac::DisconnectSession, this);
window_controller_ =
- [[DisconnectWindowController alloc] initWithUiStrings:ui_strings_
+ [[DisconnectWindowController alloc] initWithUiStrings:&ui_strings()
callback:disconnect_callback
- username:username];
+ username:username_];
[window_controller_ showWindow:nil];
- return true;
}
-void DisconnectWindowMac::Hide() {
+void DisconnectWindowMac::StopOnUiThread() {
+ DCHECK(ui_task_runner()->BelongsToCurrentThread());
+
// DisconnectWindowController is responsible for releasing itself in its
// windowWillClose: method.
[window_controller_ Hide];
window_controller_ = nil;
}
-scoped_ptr<DisconnectWindow> DisconnectWindow::Create(
- const UiStrings* ui_strings) {
- return scoped_ptr<DisconnectWindow>(new DisconnectWindowMac(ui_strings));
+scoped_ptr<HostWindow> HostWindow::CreateDisconnectWindow(
+ scoped_refptr<base::SingleThreadTaskRunner> caller_task_runner,
+ scoped_refptr<base::SingleThreadTaskRunner> ui_task_runner,
+ const base::Closure& disconnect_callback,
+ const std::string& username,
+ const UiStrings& ui_strings) {
+ scoped_refptr<Core> core = new DisconnectWindowMac(caller_task_runner,
+ ui_task_runner,
+ disconnect_callback,
+ username,
+ ui_strings);
+ return scoped_ptr<HostWindow>(new HostWindow(core));
+}
+
+void DisconnectWindowMac::DisconnectSession() {
+ DCHECK(ui_task_runner()->BelongsToCurrentThread());
+
+ caller_task_runner()->PostTask(FROM_HERE, disconnect_callback_);
Sergey Ulanov 2013/04/02 19:04:22 This may not be safe. disconnect_callback_ may be
alexeypa (please no reviews) 2013/04/03 20:26:43 This code uses a weak pointer to an interface so i
}
} // namespace remoting
@@ -120,10 +165,8 @@ scoped_ptr<DisconnectWindow> DisconnectWindow::Create(
CGFloat newConnectedWidth = NSWidth(connectedToFrame);
// Set a max width for the connected to text field.
- if (newConnectedWidth >
- remoting::DisconnectWindow::kMaximumConnectedNameWidthInPixels) {
- newConnectedWidth
- = remoting::DisconnectWindow::kMaximumConnectedNameWidthInPixels;
+ if (newConnectedWidth > kMaximumConnectedNameWidthInPixels) {
+ newConnectedWidth = kMaximumConnectedNameWidthInPixels;
connectedToFrame.size.width = newConnectedWidth;
[connectedToField_ setFrame:connectedToFrame];
}

Powered by Google App Engine
This is Rietveld 408576698