summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authormnissler@chromium.org <mnissler@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2011-02-03 16:27:23 +0000
committermnissler@chromium.org <mnissler@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2011-02-03 16:27:23 +0000
commit62f95efe880a7e23e0d78fb42ed816637d840bbb (patch)
tree94a61b96f9734ad5c12a04bc061858bb420fc0d5
parente9ecfe7b0ddd0ca353b0cb9dd98a42b552e9627e (diff)
downloadchromium_src-62f95efe880a7e23e0d78fb42ed816637d840bbb.zip
chromium_src-62f95efe880a7e23e0d78fb42ed816637d840bbb.tar.gz
chromium_src-62f95efe880a7e23e0d78fb42ed816637d840bbb.tar.bz2
Properly remove queued device management jobs.
BUG=71789 TEST=device_management_service_unittest.cc Review URL: http://codereview.chromium.org/6368077 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@73628 0039d316-1c4b-4281-b951-d872f2087c98
-rw-r--r--chrome/browser/policy/device_management_service.cc16
-rw-r--r--chrome/browser/policy/device_management_service_unittest.cc20
2 files changed, 30 insertions, 6 deletions
diff --git a/chrome/browser/policy/device_management_service.cc b/chrome/browser/policy/device_management_service.cc
index a2f6bc7..965a42c 100644
--- a/chrome/browser/policy/device_management_service.cc
+++ b/chrome/browser/policy/device_management_service.cc
@@ -5,6 +5,10 @@
#include "chrome/browser/policy/device_management_service.h"
#include "chrome/browser/browser_thread.h"
+#include "chrome/browser/io_thread.h"
+#include "chrome/browser/net/chrome_net_log.h"
+#include "chrome/browser/policy/device_management_backend_impl.h"
+#include "chrome/common/net/url_request_context_getter.h"
#include "net/base/cookie_monster.h"
#include "net/base/host_resolver.h"
#include "net/base/load_flags.h"
@@ -14,10 +18,6 @@
#include "net/proxy/proxy_service.h"
#include "net/url_request/url_request_context.h"
#include "net/url_request/url_request_status.h"
-#include "chrome/browser/io_thread.h"
-#include "chrome/browser/net/chrome_net_log.h"
-#include "chrome/browser/policy/device_management_backend_impl.h"
-#include "chrome/common/net/url_request_context_getter.h"
#include "webkit/glue/webkit_glue.h"
namespace policy {
@@ -134,6 +134,7 @@ void DeviceManagementService::Shutdown() {
delete job->first;
queued_jobs_.push_back(job->second);
}
+ pending_jobs_.clear();
}
DeviceManagementService::DeviceManagementService(
@@ -155,9 +156,14 @@ void DeviceManagementService::RemoveJob(DeviceManagementJob* job) {
if (entry->second == job) {
delete entry->first;
pending_jobs_.erase(entry);
- break;
+ return;
}
}
+
+ const JobQueue::iterator elem =
+ std::find(queued_jobs_.begin(), queued_jobs_.end(), job);
+ if (elem != queued_jobs_.end())
+ queued_jobs_.erase(elem);
}
void DeviceManagementService::StartJob(DeviceManagementJob* job) {
diff --git a/chrome/browser/policy/device_management_service_unittest.cc b/chrome/browser/policy/device_management_service_unittest.cc
index b21ed40..6570db8 100644
--- a/chrome/browser/policy/device_management_service_unittest.cc
+++ b/chrome/browser/policy/device_management_service_unittest.cc
@@ -16,8 +16,8 @@
#include "net/base/escape.h"
#include "net/url_request/url_request_status.h"
#include "net/url_request/url_request_test_util.h"
-#include "testing/gtest/include/gtest/gtest.h"
#include "testing/gmock/include/gmock/gmock.h"
+#include "testing/gtest/include/gtest/gtest.h"
using testing::_;
@@ -482,4 +482,22 @@ TEST_F(DeviceManagementServiceTest, JobQueueing) {
response_data);
}
+TEST_F(DeviceManagementServiceTest, CancelRequestAfterShutdown) {
+ DevicePolicyResponseDelegateMock mock;
+ EXPECT_CALL(mock, HandlePolicyResponse(_)).Times(0);
+ em::DevicePolicyRequest request;
+ request.set_policy_scope(kChromePolicyScope);
+ em::DevicePolicySettingRequest* setting_request =
+ request.add_setting_request();
+ setting_request->set_key(kChromeDevicePolicySettingKey);
+ setting_request->set_watermark("stale");
+ backend_->ProcessPolicyRequest(kDMToken, kDeviceId, request, &mock);
+ TestURLFetcher* fetcher = factory_.GetFetcherByID(0);
+ ASSERT_TRUE(fetcher);
+
+ // Shutdown the service and cancel the job afterwards.
+ service_->Shutdown();
+ backend_.reset();
+}
+
} // namespace policy