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) |