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

Unified Diff: chrome/browser/extensions/api/socket/socket_api.cc

Issue 8857004: Delete UDPClientSocket on same thread as creation. Also refactor. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Merge to fix hunk failure. Created 9 years 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: chrome/browser/extensions/api/socket/socket_api.cc
diff --git a/chrome/browser/extensions/api/socket/socket_api.cc b/chrome/browser/extensions/api/socket/socket_api.cc
index 4d18ff918c703433b7dba2076144aa71e44ced6c..f2cf86c0b1422d008d0171d5563817e7fcf40b5c 100644
--- a/chrome/browser/extensions/api/socket/socket_api.cc
+++ b/chrome/browser/extensions/api/socket/socket_api.cc
@@ -7,6 +7,8 @@
#include "base/bind.h"
#include "base/values.h"
#include "chrome/browser/extensions/api/socket/socket_api_controller.h"
+#include "chrome/browser/extensions/extension_service.h"
+#include "chrome/browser/profiles/profile.h"
#include "content/public/browser/browser_thread.h"
#include "content/public/browser/browser_thread.h"
@@ -18,13 +20,36 @@ const char kBytesWrittenKey[] = "bytesWritten";
const char kSocketIdKey[] = "socketId";
const char kUDPSocketType[] = "udp";
-SocketCreateFunction::SocketCreateFunction() {
+SocketController* SocketApiFunction::controller() {
+ return profile()->GetExtensionService()->socket_controller();
}
-SocketCreateFunction::~SocketCreateFunction() {
+bool SocketApiFunction::RunImpl() {
+ if (!Prepare()) {
+ return false;
+ }
+ bool rv = BrowserThread::PostTask(
+ BrowserThread::IO, FROM_HERE,
+ base::Bind(&SocketApiFunction::WorkOnIOThread, this));
+ DCHECK(rv);
+ return true;
+}
+
+void SocketApiFunction::WorkOnIOThread() {
+ DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO));
+ Work();
+ bool rv = BrowserThread::PostTask(
+ BrowserThread::UI, FROM_HERE,
+ base::Bind(&SocketApiFunction::RespondOnUIThread, this));
+ DCHECK(rv);
+}
+
+void SocketApiFunction::RespondOnUIThread() {
+ DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
+ SendResponse(Respond());
}
-bool SocketCreateFunction::RunImpl() {
+bool SocketCreateFunction::Prepare() {
std::string socket_type;
EXTENSION_FUNCTION_VALIDATE(args_->GetString(0, &socket_type));
@@ -36,172 +61,81 @@ bool SocketCreateFunction::RunImpl() {
if (socket_type != kUDPSocketType) {
return false;
}
-
- bool rv = BrowserThread::PostTask(
- BrowserThread::IO, FROM_HERE,
- base::Bind(&SocketCreateFunction::WorkOnIOThread, this));
- DCHECK(rv);
return true;
}
-void SocketCreateFunction::WorkOnIOThread() {
- DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO));
+void SocketCreateFunction::Work() {
DictionaryValue* result = new DictionaryValue();
- SocketController* controller = SocketController::GetInstance();
-
- int socket_id = controller->CreateUdp(profile(), extension_id(),
- source_url());
+ int socket_id = controller()->CreateUdp(profile(), extension_id(),
+ source_url());
result->SetInteger(kSocketIdKey, socket_id);
result_.reset(result);
- bool rv = BrowserThread::PostTask(
- BrowserThread::UI, FROM_HERE,
- base::Bind(&SocketCreateFunction::RespondOnUIThread, this));
- DCHECK(rv);
-}
-
-void SocketCreateFunction::RespondOnUIThread() {
- DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
- SendResponse(true);
}
-SocketDestroyFunction::SocketDestroyFunction() {
-}
-
-SocketDestroyFunction::~SocketDestroyFunction() {
+bool SocketCreateFunction::Respond() {
+ return true;
}
-bool SocketDestroyFunction::RunImpl() {
+bool SocketDestroyFunction::Prepare() {
EXTENSION_FUNCTION_VALIDATE(args_->GetInteger(0, &socket_id_));
-
- bool rv = BrowserThread::PostTask(
- BrowserThread::IO, FROM_HERE,
- base::Bind(&SocketDestroyFunction::WorkOnIOThread, this));
- DCHECK(rv);
return true;
}
-void SocketDestroyFunction::WorkOnIOThread() {
- DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO));
- SocketController* controller = SocketController::GetInstance();
- controller->DestroyUdp(socket_id_);
-
- bool rv = BrowserThread::PostTask(
- BrowserThread::UI, FROM_HERE,
- base::Bind(&SocketDestroyFunction::RespondOnUIThread, this));
- DCHECK(rv);
-}
-
-void SocketDestroyFunction::RespondOnUIThread() {
- DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
- SendResponse(true);
-}
-
-SocketConnectFunction::SocketConnectFunction() {
+void SocketDestroyFunction::Work() {
+ controller()->DestroyUdp(socket_id_);
}
-SocketConnectFunction::~SocketConnectFunction() {
+bool SocketDestroyFunction::Respond() {
+ return true;
}
-bool SocketConnectFunction::RunImpl() {
+bool SocketConnectFunction::Prepare() {
EXTENSION_FUNCTION_VALIDATE(args_->GetInteger(0, &socket_id_));
EXTENSION_FUNCTION_VALIDATE(args_->GetString(1, &address_));
EXTENSION_FUNCTION_VALIDATE(args_->GetInteger(2, &port_));
-
- bool rv = BrowserThread::PostTask(
- BrowserThread::IO, FROM_HERE,
- base::Bind(&SocketConnectFunction::WorkOnIOThread, this));
- DCHECK(rv);
return true;
}
-void SocketConnectFunction::WorkOnIOThread() {
- DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO));
-
- SocketController* controller = SocketController::GetInstance();
- bool result = controller->ConnectUdp(socket_id_, address_, port_);
+void SocketConnectFunction::Work() {
+ bool result = controller()->ConnectUdp(socket_id_, address_, port_);
result_.reset(Value::CreateBooleanValue(result));
-
- bool rv = BrowserThread::PostTask(
- BrowserThread::UI, FROM_HERE,
- base::Bind(&SocketConnectFunction::RespondOnUIThread, this));
- DCHECK(rv);
}
-void SocketConnectFunction::RespondOnUIThread() {
- DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
- SendResponse(true);
-}
-
-SocketCloseFunction::SocketCloseFunction() {
-}
-
-SocketCloseFunction::~SocketCloseFunction() {
+bool SocketConnectFunction::Respond() {
+ return true;
}
-bool SocketCloseFunction::RunImpl() {
+bool SocketCloseFunction::Prepare() {
EXTENSION_FUNCTION_VALIDATE(args_->GetInteger(0, &socket_id_));
-
- bool rv = BrowserThread::PostTask(
- BrowserThread::IO, FROM_HERE,
- base::Bind(&SocketCloseFunction::WorkOnIOThread, this));
- DCHECK(rv);
return true;
}
-void SocketCloseFunction::WorkOnIOThread() {
- DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO));
-
- SocketController* controller = SocketController::GetInstance();
- controller->CloseUdp(socket_id_);
+void SocketCloseFunction::Work() {
+ controller()->CloseUdp(socket_id_);
result_.reset(Value::CreateNullValue());
-
- bool rv = BrowserThread::PostTask(
- BrowserThread::UI, FROM_HERE,
- base::Bind(&SocketCloseFunction::RespondOnUIThread, this));
- DCHECK(rv);
}
-void SocketCloseFunction::RespondOnUIThread() {
- DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
- SendResponse(true);
-}
-
-SocketWriteFunction::SocketWriteFunction() {
-}
-
-SocketWriteFunction::~SocketWriteFunction() {
+bool SocketCloseFunction::Respond() {
+ return true;
}
-bool SocketWriteFunction::RunImpl() {
+bool SocketWriteFunction::Prepare() {
EXTENSION_FUNCTION_VALIDATE(args_->GetInteger(0, &socket_id_));
EXTENSION_FUNCTION_VALIDATE(args_->GetString(1, &message_));
-
- bool rv = BrowserThread::PostTask(
- BrowserThread::IO, FROM_HERE,
- base::Bind(&SocketWriteFunction::WorkOnIOThread, this));
- DCHECK(rv);
return true;
}
-void SocketWriteFunction::WorkOnIOThread() {
- DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO));
-
- SocketController* controller = SocketController::GetInstance();
- int bytesWritten = controller->WriteUdp(socket_id_, message_);
+void SocketWriteFunction::Work() {
+ int bytesWritten = controller()->WriteUdp(socket_id_, message_);
DictionaryValue* result = new DictionaryValue();
result->SetInteger(kBytesWrittenKey, bytesWritten);
result_.reset(result);
- bool rv = BrowserThread::PostTask(
- BrowserThread::UI, FROM_HERE,
- base::Bind(&SocketWriteFunction::RespondOnUIThread, this));
- DCHECK(rv);
}
-void SocketWriteFunction::RespondOnUIThread() {
- DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
- SendResponse(true);
+bool SocketWriteFunction::Respond() {
+ return true;
}
} // namespace extensions
« no previous file with comments | « chrome/browser/extensions/api/socket/socket_api.h ('k') | chrome/browser/extensions/api/socket/socket_api_controller.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698