diff options
author | scherkus@chromium.org <scherkus@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2011-12-02 19:01:48 +0000 |
---|---|---|
committer | scherkus@chromium.org <scherkus@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2011-12-02 19:01:48 +0000 |
commit | 8470f4693faac244f839c38358512244b47cb680 (patch) | |
tree | 0da2af36d2a073dd23520801539293d64ea4987a /webkit/media/active_loader.cc | |
parent | 270e8dc3c85612611354a7d616d51216e8725610 (diff) | |
download | chromium_src-8470f4693faac244f839c38358512244b47cb680.zip chromium_src-8470f4693faac244f839c38358512244b47cb680.tar.gz chromium_src-8470f4693faac244f839c38358512244b47cb680.tar.bz2 |
Split a portion of BufferedResourceLoader into a separate class ActiveLoader.
ActiveLoader encapsulates an active WebURLLoader and takes care of maintaining deferred status, references to parent object, and automatic cancelation during teardown.
As a result of fixing the imbalanced reference counts to BufferedResourceLoader there were a few use-after-free bugs due to doing work after executing callbacks. The ordering has been updated to ensure that no more work is done after executing callbacks.
BUG=100914
Review URL: http://codereview.chromium.org/8667002
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@112747 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'webkit/media/active_loader.cc')
-rw-r--r-- | webkit/media/active_loader.cc | 37 |
1 files changed, 37 insertions, 0 deletions
diff --git a/webkit/media/active_loader.cc b/webkit/media/active_loader.cc new file mode 100644 index 0000000..c713fe1 --- /dev/null +++ b/webkit/media/active_loader.cc @@ -0,0 +1,37 @@ +// Copyright (c) 2011 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#include "webkit/media/active_loader.h" + +#include "third_party/WebKit/Source/WebKit/chromium/public/WebURLLoader.h" +#include "webkit/media/buffered_resource_loader.h" + +namespace webkit_media { + +ActiveLoader::ActiveLoader( + const scoped_refptr<BufferedResourceLoader>& parent, + WebKit::WebURLLoader* loader) + : parent_(parent), + loader_(loader), + deferred_(false) { +} + +ActiveLoader::~ActiveLoader() { + if (parent_) + Cancel(); +} + +void ActiveLoader::SetDeferred(bool deferred) { + deferred_ = deferred; + loader_->setDefersLoading(deferred); +} + +void ActiveLoader::Cancel() { + // We only need to maintain a reference to our parent while the loader is + // still active. Failing to do so can result in circular refcounts. + loader_->cancel(); + parent_ = NULL; +} + +} // namespace webkit_media |