summaryrefslogtreecommitdiffstats
path: root/webkit/media/active_loader.cc
diff options
context:
space:
mode:
authorscherkus@chromium.org <scherkus@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2011-12-02 19:01:48 +0000
committerscherkus@chromium.org <scherkus@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2011-12-02 19:01:48 +0000
commit8470f4693faac244f839c38358512244b47cb680 (patch)
tree0da2af36d2a073dd23520801539293d64ea4987a /webkit/media/active_loader.cc
parent270e8dc3c85612611354a7d616d51216e8725610 (diff)
downloadchromium_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.cc37
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