diff options
author | mnissler@chromium.org <mnissler@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2011-02-03 16:27:23 +0000 |
---|---|---|
committer | mnissler@chromium.org <mnissler@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2011-02-03 16:27:23 +0000 |
commit | 62f95efe880a7e23e0d78fb42ed816637d840bbb (patch) | |
tree | 94a61b96f9734ad5c12a04bc061858bb420fc0d5 | |
parent | e9ecfe7b0ddd0ca353b0cb9dd98a42b552e9627e (diff) | |
download | chromium_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.cc | 16 | ||||
-rw-r--r-- | chrome/browser/policy/device_management_service_unittest.cc | 20 |
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 |