OLD | NEW |
1 // Copyright 2014 The Chromium Authors. All rights reserved. | 1 // Copyright 2014 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #include "chrome/browser/ui/apps/chrome_app_delegate.h" | 5 #include "chrome/browser/ui/apps/chrome_app_delegate.h" |
6 | 6 |
| 7 #include <utility> |
| 8 |
7 #include "base/macros.h" | 9 #include "base/macros.h" |
8 #include "base/memory/scoped_ptr.h" | 10 #include "base/memory/scoped_ptr.h" |
9 #include "base/strings/stringprintf.h" | 11 #include "base/strings/stringprintf.h" |
10 #include "chrome/browser/app_mode/app_mode_utils.h" | 12 #include "chrome/browser/app_mode/app_mode_utils.h" |
11 #include "chrome/browser/apps/scoped_keep_alive.h" | 13 #include "chrome/browser/apps/scoped_keep_alive.h" |
12 #include "chrome/browser/chrome_notification_types.h" | 14 #include "chrome/browser/chrome_notification_types.h" |
13 #include "chrome/browser/extensions/chrome_extension_web_contents_observer.h" | 15 #include "chrome/browser/extensions/chrome_extension_web_contents_observer.h" |
14 #include "chrome/browser/favicon/favicon_utils.h" | 16 #include "chrome/browser/favicon/favicon_utils.h" |
15 #include "chrome/browser/file_select_helper.h" | 17 #include "chrome/browser/file_select_helper.h" |
16 #include "chrome/browser/media/media_capture_devices_dispatcher.h" | 18 #include "chrome/browser/media/media_capture_devices_dispatcher.h" |
(...skipping 60 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
77 } | 79 } |
78 | 80 |
79 // Helper class that opens a URL based on if this browser instance is the | 81 // Helper class that opens a URL based on if this browser instance is the |
80 // default system browser. If it is the default, open the URL directly instead | 82 // default system browser. If it is the default, open the URL directly instead |
81 // of asking the system to open it. | 83 // of asking the system to open it. |
82 class OpenURLFromTabBasedOnBrowserDefault | 84 class OpenURLFromTabBasedOnBrowserDefault |
83 : public ShellIntegration::DefaultWebClientObserver { | 85 : public ShellIntegration::DefaultWebClientObserver { |
84 public: | 86 public: |
85 OpenURLFromTabBasedOnBrowserDefault(scoped_ptr<content::WebContents> source, | 87 OpenURLFromTabBasedOnBrowserDefault(scoped_ptr<content::WebContents> source, |
86 const content::OpenURLParams& params) | 88 const content::OpenURLParams& params) |
87 : source_(source.Pass()), params_(params) {} | 89 : source_(std::move(source)), params_(params) {} |
88 | 90 |
89 // Opens a URL when called with the result of if this is the default system | 91 // Opens a URL when called with the result of if this is the default system |
90 // browser or not. | 92 // browser or not. |
91 void SetDefaultWebClientUIState( | 93 void SetDefaultWebClientUIState( |
92 ShellIntegration::DefaultWebClientUIState state) override { | 94 ShellIntegration::DefaultWebClientUIState state) override { |
93 Profile* profile = | 95 Profile* profile = |
94 Profile::FromBrowserContext(source_->GetBrowserContext()); | 96 Profile::FromBrowserContext(source_->GetBrowserContext()); |
95 DCHECK(profile); | 97 DCHECK(profile); |
96 if (!profile) | 98 if (!profile) |
97 return; | 99 return; |
(...skipping 19 matching lines...) Expand all Loading... |
117 | 119 |
118 } // namespace | 120 } // namespace |
119 | 121 |
120 // static | 122 // static |
121 void ChromeAppDelegate::RelinquishKeepAliveAfterTimeout( | 123 void ChromeAppDelegate::RelinquishKeepAliveAfterTimeout( |
122 const base::WeakPtr<ChromeAppDelegate>& chrome_app_delegate) { | 124 const base::WeakPtr<ChromeAppDelegate>& chrome_app_delegate) { |
123 // Resetting the ScopedKeepAlive may cause nested destruction of the | 125 // Resetting the ScopedKeepAlive may cause nested destruction of the |
124 // ChromeAppDelegate which also resets the ScopedKeepAlive. To avoid this, | 126 // ChromeAppDelegate which also resets the ScopedKeepAlive. To avoid this, |
125 // move the ScopedKeepAlive out to here and let it fall out of scope. | 127 // move the ScopedKeepAlive out to here and let it fall out of scope. |
126 if (chrome_app_delegate.get() && chrome_app_delegate->is_hidden_) | 128 if (chrome_app_delegate.get() && chrome_app_delegate->is_hidden_) |
127 scoped_ptr<ScopedKeepAlive>(chrome_app_delegate->keep_alive_.Pass()); | 129 scoped_ptr<ScopedKeepAlive>(std::move(chrome_app_delegate->keep_alive_)); |
128 } | 130 } |
129 | 131 |
130 class ChromeAppDelegate::NewWindowContentsDelegate | 132 class ChromeAppDelegate::NewWindowContentsDelegate |
131 : public content::WebContentsDelegate { | 133 : public content::WebContentsDelegate { |
132 public: | 134 public: |
133 NewWindowContentsDelegate() {} | 135 NewWindowContentsDelegate() {} |
134 ~NewWindowContentsDelegate() override {} | 136 ~NewWindowContentsDelegate() override {} |
135 | 137 |
136 content::WebContents* OpenURLFromTab( | 138 content::WebContents* OpenURLFromTab( |
137 content::WebContents* source, | 139 content::WebContents* source, |
(...skipping 10 matching lines...) Expand all Loading... |
148 if (source) { | 150 if (source) { |
149 // This NewWindowContentsDelegate was given ownership of the incoming | 151 // This NewWindowContentsDelegate was given ownership of the incoming |
150 // WebContents by being assigned as its delegate within | 152 // WebContents by being assigned as its delegate within |
151 // ChromeAppDelegate::AddNewContents, but this is the first time | 153 // ChromeAppDelegate::AddNewContents, but this is the first time |
152 // NewWindowContentsDelegate actually sees the WebContents. | 154 // NewWindowContentsDelegate actually sees the WebContents. |
153 // Here it is captured for deletion. | 155 // Here it is captured for deletion. |
154 scoped_ptr<content::WebContents> owned_source(source); | 156 scoped_ptr<content::WebContents> owned_source(source); |
155 scoped_refptr<ShellIntegration::DefaultWebClientWorker> | 157 scoped_refptr<ShellIntegration::DefaultWebClientWorker> |
156 check_if_default_browser_worker = | 158 check_if_default_browser_worker = |
157 new ShellIntegration::DefaultBrowserWorker( | 159 new ShellIntegration::DefaultBrowserWorker( |
158 new OpenURLFromTabBasedOnBrowserDefault(owned_source.Pass(), | 160 new OpenURLFromTabBasedOnBrowserDefault(std::move(owned_source), |
159 params)); | 161 params)); |
160 // Object lifetime notes: The OpenURLFromTabBasedOnBrowserDefault is owned | 162 // Object lifetime notes: The OpenURLFromTabBasedOnBrowserDefault is owned |
161 // by check_if_default_browser_worker. StartCheckIsDefault() takes lifetime | 163 // by check_if_default_browser_worker. StartCheckIsDefault() takes lifetime |
162 // ownership of check_if_default_browser_worker and will clean up after | 164 // ownership of check_if_default_browser_worker and will clean up after |
163 // the asynchronous tasks. | 165 // the asynchronous tasks. |
164 check_if_default_browser_worker->StartCheckIsDefault(); | 166 check_if_default_browser_worker->StartCheckIsDefault(); |
165 } | 167 } |
166 return NULL; | 168 return NULL; |
167 } | 169 } |
168 | 170 |
169 ChromeAppDelegate::ChromeAppDelegate(scoped_ptr<ScopedKeepAlive> keep_alive) | 171 ChromeAppDelegate::ChromeAppDelegate(scoped_ptr<ScopedKeepAlive> keep_alive) |
170 : has_been_shown_(false), | 172 : has_been_shown_(false), |
171 is_hidden_(true), | 173 is_hidden_(true), |
172 keep_alive_(keep_alive.Pass()), | 174 keep_alive_(std::move(keep_alive)), |
173 new_window_contents_delegate_(new NewWindowContentsDelegate()), | 175 new_window_contents_delegate_(new NewWindowContentsDelegate()), |
174 weak_factory_(this) { | 176 weak_factory_(this) { |
175 registrar_.Add(this, | 177 registrar_.Add(this, |
176 chrome::NOTIFICATION_APP_TERMINATING, | 178 chrome::NOTIFICATION_APP_TERMINATING, |
177 content::NotificationService::AllSources()); | 179 content::NotificationService::AllSources()); |
178 } | 180 } |
179 | 181 |
180 ChromeAppDelegate::~ChromeAppDelegate() { | 182 ChromeAppDelegate::~ChromeAppDelegate() { |
181 // Unregister now to prevent getting notified if |keep_alive_| is the last. | 183 // Unregister now to prevent getting notified if |keep_alive_| is the last. |
182 terminating_callback_.Reset(); | 184 terminating_callback_.Reset(); |
(...skipping 169 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
352 const content::NotificationDetails& details) { | 354 const content::NotificationDetails& details) { |
353 switch (type) { | 355 switch (type) { |
354 case chrome::NOTIFICATION_APP_TERMINATING: | 356 case chrome::NOTIFICATION_APP_TERMINATING: |
355 if (!terminating_callback_.is_null()) | 357 if (!terminating_callback_.is_null()) |
356 terminating_callback_.Run(); | 358 terminating_callback_.Run(); |
357 break; | 359 break; |
358 default: | 360 default: |
359 NOTREACHED() << "Received unexpected notification"; | 361 NOTREACHED() << "Received unexpected notification"; |
360 } | 362 } |
361 } | 363 } |
OLD | NEW |