1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85
|
// Copyright 2021 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include "components/feed/core/v2/stream_surface_set.h"
#include "base/observer_list.h"
#include "components/feed/core/v2/feed_stream_surface.h"
namespace feed {
StreamSurfaceSet::StreamSurfaceSet(const StreamType& stream_type)
: stream_type_(stream_type) {}
StreamSurfaceSet::~StreamSurfaceSet() = default;
void StreamSurfaceSet::AddObserver(Observer* observer) {
observers_.AddObserver(observer);
}
void StreamSurfaceSet::RemoveObserver(Observer* observer) {
observers_.AddObserver(observer);
}
void StreamSurfaceSet::SurfaceAdded(
SurfaceId surface_id,
SurfaceRenderer* renderer,
feedwire::DiscoverLaunchResult loading_not_allowed_reason) {
Entry entry;
entry.surface_id = surface_id;
entry.renderer = renderer;
surfaces_.push_back(entry);
for (auto& observer : observers_) {
observer.SurfaceAdded(surface_id, renderer, loading_not_allowed_reason);
}
}
void StreamSurfaceSet::SurfaceRemoved(SurfaceId surface_id) {
for (size_t i = 0; i < surfaces_.size(); ++i) {
if (surfaces_[i].surface_id == surface_id) {
surfaces_.erase(surfaces_.begin() + i);
break;
}
}
for (auto& observer : observers_) {
observer.SurfaceRemoved(surface_id);
}
}
bool StreamSurfaceSet::SurfacePresent(SurfaceId surface_id) {
for (auto& surface : surfaces_) {
if (surface.surface_id == surface_id) {
return true;
}
}
return false;
}
void StreamSurfaceSet::FeedViewed(SurfaceId surface_id) {
StreamSurfaceSet::Entry* entry = FindSurface(surface_id);
if (!entry)
return;
entry->feed_viewed = true;
}
bool StreamSurfaceSet::HasSurfaceShowingContent() const {
for (const auto& entry : surfaces_) {
if (entry.feed_viewed)
return true;
}
return false;
}
StreamSurfaceSet::Entry* StreamSurfaceSet::FindSurface(SurfaceId surface_id) {
for (Entry& entry : *this) {
if (entry.surface_id == surface_id) {
return &entry;
}
}
return nullptr;
}
} // namespace feed
|