Commit 8ff59d10 authored by groby@chromium.org's avatar groby@chromium.org

[AiS] Fix ownership issue for image service observers

The Java bridge erroneously did a "delete this" on the observer when
request completion was signaled. That is not necessary, since the
BitmapFetcherService takes ownership of all observers.

As a result of this, there is also no need for the observer to signal
request completion. If clients are interested in taking action on
completion, they can do so in the Observer's destructor.

TBR=sky@chromium.org, tedchoc@chromium.org
BUG=380916
NOTRY=true

Review URL: https://codereview.chromium.org/341083008

git-svn-id: svn://svn.chromium.org/chrome/trunk/src@278869 0039d316-1c4b-4281-b951-d872f2087c98
parent 24d25add
......@@ -36,11 +36,7 @@ class AnswersImageObserverAndroid : public BitmapFetcherService::Observer {
// AnswersImageObserver:
virtual void OnImageChanged(BitmapFetcherService::RequestId request_id,
const SkBitmap& answers_image) OVERRIDE {
// An empty image signals a completed request.
if (answers_image.empty()) {
delete this;
return;
}
DCHECK(!answers_image.empty());
JNIEnv* env = base::android::AttachCurrentThread();
ScopedJavaLocalRef<jobject> java_bitmap =
......
......@@ -45,10 +45,6 @@ BitmapFetcherRequest::BitmapFetcherRequest(
}
BitmapFetcherRequest::~BitmapFetcherRequest() {
SkBitmap empty_bitmap;
// OnImageChanged with an empty bitmap signifies a completed request.
observer_->OnImageChanged(request_id_, empty_bitmap);
}
void BitmapFetcherRequest::NotifyImageChanged(const SkBitmap& bitmap) {
......
......@@ -10,18 +10,24 @@
namespace {
class TestNotificationInterface {
public:
virtual ~TestNotificationInterface() {}
virtual void OnImageChanged() = 0;
virtual void OnRequestFinished() = 0;
};
class TestObserver : public BitmapFetcherService::Observer {
public:
explicit TestObserver(BitmapFetcherService::Observer* target)
: target_(target) {}
virtual ~TestObserver() {}
explicit TestObserver(TestNotificationInterface* target) : target_(target) {}
virtual ~TestObserver() { target_->OnRequestFinished(); }
virtual void OnImageChanged(BitmapFetcherService::RequestId request_id,
const SkBitmap& answers_image) OVERRIDE {
target_->OnImageChanged(request_id, answers_image);
target_->OnImageChanged();
}
BitmapFetcherService::Observer* target_;
TestNotificationInterface* target_;
};
class TestService : public BitmapFetcherService {
......@@ -40,7 +46,7 @@ class TestService : public BitmapFetcherService {
} // namespace
class BitmapFetcherServiceTest : public testing::Test,
public BitmapFetcherService::Observer {
public TestNotificationInterface {
public:
virtual void SetUp() OVERRIDE {
service_.reset(new TestService(&profile_));
......@@ -58,13 +64,9 @@ class BitmapFetcherServiceTest : public testing::Test,
}
size_t cache_size() { return service_->cache_.size(); }
virtual void OnImageChanged(BitmapFetcherService::RequestId request_id,
const SkBitmap& answers_image) OVERRIDE {
if (answers_image.empty())
requestsFinished_++;
else
imagesChanged_++;
}
virtual void OnImageChanged() OVERRIDE { imagesChanged_++; }
virtual void OnRequestFinished() OVERRIDE { requestsFinished_++; }
// Simulate finishing a URL fetch and decode for the given fetcher.
void CompleteFetch(const GURL& url) {
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment