mirror of
https://github.com/mozilla/gecko-dev.git
synced 2024-11-28 23:31:56 +00:00
Bug 599970 - Add GetInterface for nsIEventTarget on Connection
r=asuth
This commit is contained in:
parent
6a87734e58
commit
1fa11d7388
@ -271,7 +271,8 @@ AsyncStatement::~AsyncStatement()
|
||||
// nsCOMPtr. Which it is not; it's an nsRefPtr.
|
||||
Connection *forgottenConn = nsnull;
|
||||
mDBConnection.swap(forgottenConn);
|
||||
(void)::NS_ProxyRelease(forgottenConn->threadOpenedOn, forgottenConn);
|
||||
(void)::NS_ProxyRelease(forgottenConn->threadOpenedOn,
|
||||
static_cast<mozIStorageConnection *>(forgottenConn));
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -322,7 +322,7 @@ public:
|
||||
return NS_OK;
|
||||
}
|
||||
private:
|
||||
nsCOMPtr<Connection> mConnection;
|
||||
nsRefPtr<Connection> mConnection;
|
||||
nsCOMPtr<nsIEventTarget> mCallingThread;
|
||||
nsCOMPtr<nsIRunnable> mCallbackEvent;
|
||||
};
|
||||
@ -352,9 +352,10 @@ Connection::~Connection()
|
||||
(void)Close();
|
||||
}
|
||||
|
||||
NS_IMPL_THREADSAFE_ISUPPORTS1(
|
||||
NS_IMPL_THREADSAFE_ISUPPORTS2(
|
||||
Connection,
|
||||
mozIStorageConnection
|
||||
mozIStorageConnection,
|
||||
nsIInterfaceRequestor
|
||||
)
|
||||
|
||||
nsIEventTarget *
|
||||
@ -641,6 +642,22 @@ Connection::getFilename()
|
||||
return leafname;
|
||||
}
|
||||
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
//// nsIInterfaceRequestor
|
||||
|
||||
NS_IMETHODIMP
|
||||
Connection::GetInterface(const nsIID &aIID,
|
||||
void **_result)
|
||||
{
|
||||
if (aIID.Equals(NS_GET_IID(nsIEventTarget))) {
|
||||
nsIEventTarget *background = getAsyncExecutionTarget();
|
||||
NS_IF_ADDREF(background);
|
||||
*_result = background;
|
||||
return NS_OK;
|
||||
}
|
||||
return NS_ERROR_NO_INTERFACE;
|
||||
}
|
||||
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
//// mozIStorageConnection
|
||||
|
||||
|
@ -38,12 +38,13 @@
|
||||
*
|
||||
* ***** END LICENSE BLOCK ***** */
|
||||
|
||||
#ifndef MOZSTORAGECONNECTION_H
|
||||
#define MOZSTORAGECONNECTION_H
|
||||
#ifndef mozilla_storage_Connection_h
|
||||
#define mozilla_storage_Connection_h
|
||||
|
||||
#include "nsAutoPtr.h"
|
||||
#include "nsCOMPtr.h"
|
||||
#include "mozilla/Mutex.h"
|
||||
#include "nsIInterfaceRequestor.h"
|
||||
|
||||
#include "nsString.h"
|
||||
#include "nsDataHashtable.h"
|
||||
@ -65,10 +66,12 @@ namespace mozilla {
|
||||
namespace storage {
|
||||
|
||||
class Connection : public mozIStorageConnection
|
||||
, public nsIInterfaceRequestor
|
||||
{
|
||||
public:
|
||||
NS_DECL_ISUPPORTS
|
||||
NS_DECL_MOZISTORAGECONNECTION
|
||||
NS_DECL_NSIINTERFACEREQUESTOR
|
||||
|
||||
/**
|
||||
* Structure used to describe user functions on the database connection.
|
||||
@ -244,4 +247,4 @@ private:
|
||||
} // namespace storage
|
||||
} // namespace mozilla
|
||||
|
||||
#endif /* MOZSTORAGECONNECTION_H */
|
||||
#endif // mozilla_storage_Connection_h
|
||||
|
@ -39,6 +39,7 @@
|
||||
#include "storage_test_harness.h"
|
||||
#include "prthread.h"
|
||||
#include "nsIEventTarget.h"
|
||||
#include "nsIInterfaceRequestorUtils.h"
|
||||
|
||||
#include "sqlite3.h"
|
||||
|
||||
@ -221,6 +222,14 @@ get_conn_async_thread(mozIStorageConnection *db)
|
||||
nsCOMPtr<nsIThread> asyncThread;
|
||||
threadMan->GetThreadFromPRThread(last_non_watched_thread,
|
||||
getter_AddRefs(asyncThread));
|
||||
|
||||
// Additionally, check that the thread we get as the background thread is the
|
||||
// same one as the one we report from getInterface.
|
||||
nsCOMPtr<nsIEventTarget> target = do_GetInterface(db);
|
||||
nsCOMPtr<nsIThread> allegedAsyncThread = do_QueryInterface(target);
|
||||
PRThread *allegedPRThread;
|
||||
(void)allegedAsyncThread->GetPRThread(&allegedPRThread);
|
||||
do_check_eq(allegedPRThread, last_non_watched_thread);
|
||||
return asyncThread.forget();
|
||||
}
|
||||
|
||||
|
@ -482,6 +482,18 @@ function test_clone_copies_overridden_functions()
|
||||
run_next_test();
|
||||
}
|
||||
|
||||
function test_getInterface()
|
||||
{
|
||||
let db = getOpenedDatabase();
|
||||
let target = db.QueryInterface(Ci.nsIInterfaceRequestor)
|
||||
.getInterface(Ci.nsIEventTarget);
|
||||
// Just check that target is non-null. Other tests will ensure that it has
|
||||
// the correct value.
|
||||
do_check_true(target != null);
|
||||
|
||||
run_next_test();
|
||||
}
|
||||
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
//// Test Runner
|
||||
|
||||
@ -513,6 +525,7 @@ var tests = [
|
||||
test_close_clone_fails,
|
||||
test_clone_copies_functions,
|
||||
test_clone_copies_overridden_functions,
|
||||
test_getInterface,
|
||||
];
|
||||
let index = 0;
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user