| Index: chrome/browser/extensions/api/tab_capture/offscreen_tab.cc
|
| diff --git a/chrome/browser/extensions/api/tab_capture/offscreen_tab.cc b/chrome/browser/extensions/api/tab_capture/offscreen_tab.cc
|
| index d7e26772b4f17f67bb2c13209f3559be533ac4f9..f50fdf9c3cb89cd7087e96e447cd697affb933df 100644
|
| --- a/chrome/browser/extensions/api/tab_capture/offscreen_tab.cc
|
| +++ b/chrome/browser/extensions/api/tab_capture/offscreen_tab.cc
|
| @@ -8,6 +8,7 @@
|
|
|
| #include "base/bind.h"
|
| #include "base/macros.h"
|
| +#include "base/memory/ptr_util.h"
|
| #include "chrome/browser/extensions/api/tab_capture/tab_capture_registry.h"
|
| #include "chrome/browser/profiles/profile.h"
|
| #include "chrome/browser/ui/web_contents_sizer.h"
|
| @@ -57,15 +58,24 @@ OffscreenTab* OffscreenTabsOwner::OpenNewTab(
|
| if (tabs_.size() >= kMaxOffscreenTabsPerExtension)
|
| return nullptr; // Maximum number of offscreen tabs reached.
|
|
|
| - tabs_.push_back(new OffscreenTab(this));
|
| + // OffscreenTab cannot be created with MakeUnique<OffscreenTab> since the
|
| + // constructor is protected. So create it separately, and then move it to
|
| + // |tabs_| below.
|
| + std::unique_ptr<OffscreenTab> offscreen_tab(new OffscreenTab(this));
|
| + tabs_.push_back(std::move(offscreen_tab));
|
| tabs_.back()->Start(start_url, initial_size, optional_presentation_id);
|
| - return tabs_.back();
|
| + return tabs_.back().get();
|
| }
|
|
|
| void OffscreenTabsOwner::DestroyTab(OffscreenTab* tab) {
|
| - const auto it = std::find(tabs_.begin(), tabs_.end(), tab);
|
| - if (it != tabs_.end())
|
| - tabs_.erase(it);
|
| + for (std::vector<std::unique_ptr<OffscreenTab>>::iterator iter =
|
| + tabs_.begin();
|
| + iter != tabs_.end(); ++iter) {
|
| + if (iter->get() == tab) {
|
| + tabs_.erase(iter);
|
| + break;
|
| + }
|
| + }
|
| }
|
|
|
| OffscreenTab::OffscreenTab(OffscreenTabsOwner* owner)
|
|
|