OLD | NEW |
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 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 #ifndef CHROME_BROWSER_CONTENT_SETTINGS_TAB_SPECIFIC_CONTENT_SETTINGS_H_ | 5 #ifndef CHROME_BROWSER_CONTENT_SETTINGS_TAB_SPECIFIC_CONTENT_SETTINGS_H_ |
6 #define CHROME_BROWSER_CONTENT_SETTINGS_TAB_SPECIFIC_CONTENT_SETTINGS_H_ | 6 #define CHROME_BROWSER_CONTENT_SETTINGS_TAB_SPECIFIC_CONTENT_SETTINGS_H_ |
7 | 7 |
8 #include <set> | 8 #include <set> |
9 #include <string> | 9 #include <string> |
10 | 10 |
11 #include "base/basictypes.h" | 11 #include "base/basictypes.h" |
12 #include "base/memory/ref_counted.h" | 12 #include "base/memory/ref_counted.h" |
13 #include "base/memory/scoped_ptr.h" | 13 #include "base/memory/scoped_ptr.h" |
14 #include "base/observer_list.h" | 14 #include "base/observer_list.h" |
15 #include "chrome/browser/content_settings/content_settings_usages_state.h" | 15 #include "chrome/browser/content_settings/content_settings_usages_state.h" |
16 #include "chrome/browser/content_settings/local_shared_objects_container.h" | 16 #include "chrome/browser/content_settings/local_shared_objects_container.h" |
17 #include "chrome/browser/media/media_stream_devices_controller.h" | 17 #include "chrome/browser/media/media_stream_devices_controller.h" |
18 #include "chrome/browser/password_manager/password_form_manager.h" | |
19 #include "chrome/common/content_settings.h" | 18 #include "chrome/common/content_settings.h" |
20 #include "chrome/common/content_settings_types.h" | 19 #include "chrome/common/content_settings_types.h" |
21 #include "chrome/common/custom_handlers/protocol_handler.h" | 20 #include "chrome/common/custom_handlers/protocol_handler.h" |
22 #include "content/public/browser/notification_observer.h" | 21 #include "content/public/browser/notification_observer.h" |
23 #include "content/public/browser/notification_registrar.h" | 22 #include "content/public/browser/notification_registrar.h" |
24 #include "content/public/browser/web_contents_observer.h" | 23 #include "content/public/browser/web_contents_observer.h" |
25 #include "content/public/browser/web_contents_user_data.h" | 24 #include "content/public/browser/web_contents_user_data.h" |
26 #include "content/public/common/media_stream_request.h" | 25 #include "content/public/common/media_stream_request.h" |
27 #include "net/cookies/canonical_cookie.h" | 26 #include "net/cookies/canonical_cookie.h" |
28 | 27 |
(...skipping 20 matching lines...) Expand all Loading... |
49 enum MicrophoneCameraState { | 48 enum MicrophoneCameraState { |
50 MICROPHONE_CAMERA_NOT_ACCESSED = 0, | 49 MICROPHONE_CAMERA_NOT_ACCESSED = 0, |
51 MICROPHONE_ACCESSED, | 50 MICROPHONE_ACCESSED, |
52 CAMERA_ACCESSED, | 51 CAMERA_ACCESSED, |
53 MICROPHONE_CAMERA_ACCESSED, | 52 MICROPHONE_CAMERA_ACCESSED, |
54 MICROPHONE_BLOCKED, | 53 MICROPHONE_BLOCKED, |
55 CAMERA_BLOCKED, | 54 CAMERA_BLOCKED, |
56 MICROPHONE_CAMERA_BLOCKED, | 55 MICROPHONE_CAMERA_BLOCKED, |
57 }; | 56 }; |
58 | 57 |
59 // A PasswordObserver is implemented in ManagePasswordsIconController which | |
60 // will be notified when a password form is submitted. | |
61 class PasswordObserver { | |
62 public: | |
63 explicit PasswordObserver( | |
64 TabSpecificContentSettings* tab_specific_content_settings); | |
65 virtual ~PasswordObserver(); | |
66 | |
67 // Called whenever a password form is submitted. | |
68 virtual void OnPasswordAction() = 0; | |
69 | |
70 TabSpecificContentSettings* tab_specific_content_settings() { | |
71 return tab_specific_content_settings_; | |
72 } | |
73 | |
74 // Called when the TabSpecificContentSettings is destroyed; nulls out | |
75 // the local reference. | |
76 void ContentSettingsDestroyed(); | |
77 | |
78 private: | |
79 TabSpecificContentSettings* tab_specific_content_settings_; | |
80 | |
81 DISALLOW_COPY_AND_ASSIGN(PasswordObserver); | |
82 }; | |
83 | |
84 // Classes that want to be notified about site data events must implement | 58 // Classes that want to be notified about site data events must implement |
85 // this abstract class and add themselves as observer to the | 59 // this abstract class and add themselves as observer to the |
86 // |TabSpecificContentSettings|. | 60 // |TabSpecificContentSettings|. |
87 class SiteDataObserver { | 61 class SiteDataObserver { |
88 public: | 62 public: |
89 explicit SiteDataObserver( | 63 explicit SiteDataObserver( |
90 TabSpecificContentSettings* tab_specific_content_settings); | 64 TabSpecificContentSettings* tab_specific_content_settings); |
91 virtual ~SiteDataObserver(); | 65 virtual ~SiteDataObserver(); |
92 | 66 |
93 // Called whenever site data is accessed. | 67 // Called whenever site data is accessed. |
(...skipping 130 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
224 return media_stream_requested_audio_device_; | 198 return media_stream_requested_audio_device_; |
225 } | 199 } |
226 | 200 |
227 const std::string& media_stream_requested_video_device() const { | 201 const std::string& media_stream_requested_video_device() const { |
228 return media_stream_requested_video_device_; | 202 return media_stream_requested_video_device_; |
229 } | 203 } |
230 | 204 |
231 // Returns the state of the camera and microphone usage. | 205 // Returns the state of the camera and microphone usage. |
232 MicrophoneCameraState GetMicrophoneCameraState() const; | 206 MicrophoneCameraState GetMicrophoneCameraState() const; |
233 | 207 |
234 void unset_manage_passwords_bubble_needs_showing() { | |
235 manage_passwords_bubble_needs_showing_ = false; | |
236 } | |
237 | |
238 bool password_to_be_saved() const { | |
239 return password_to_be_saved_; | |
240 } | |
241 | |
242 void unset_password_to_be_saved() { | |
243 password_to_be_saved_ = false; | |
244 } | |
245 | |
246 bool manage_passwords_bubble_needs_showing() const { | |
247 return manage_passwords_bubble_needs_showing_; | |
248 } | |
249 | |
250 bool manage_passwords_icon_to_be_shown() const { | |
251 return manage_passwords_icon_to_be_shown_; | |
252 } | |
253 | |
254 // Returns whether there is a password to be saved. | |
255 bool GetPasswordSavingState() const; | |
256 | |
257 // Returns whether the password bubble has been shown to the user. | |
258 bool GetManagePasswordsBubbleShownState() const; | |
259 | |
260 const std::set<std::string>& BlockedResourcesForType( | 208 const std::set<std::string>& BlockedResourcesForType( |
261 ContentSettingsType content_type) const; | 209 ContentSettingsType content_type) const; |
262 | 210 |
263 // Returns the ContentSettingsUsagesState that controls the | 211 // Returns the ContentSettingsUsagesState that controls the |
264 // geolocation API usage on this page. | 212 // geolocation API usage on this page. |
265 const ContentSettingsUsagesState& geolocation_usages_state() const { | 213 const ContentSettingsUsagesState& geolocation_usages_state() const { |
266 return geolocation_usages_state_; | 214 return geolocation_usages_state_; |
267 } | 215 } |
268 | 216 |
269 // Returns the ContentSettingsUsageState that controls the MIDI usage on | 217 // Returns the ContentSettingsUsageState that controls the MIDI usage on |
(...skipping 68 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
338 int64 frame_id, | 286 int64 frame_id, |
339 int64 parent_frame_id, | 287 int64 parent_frame_id, |
340 bool is_main_frame, | 288 bool is_main_frame, |
341 const GURL& validated_url, | 289 const GURL& validated_url, |
342 bool is_error_page, | 290 bool is_error_page, |
343 bool is_iframe_srcdoc, | 291 bool is_iframe_srcdoc, |
344 content::RenderViewHost* render_view_host) OVERRIDE; | 292 content::RenderViewHost* render_view_host) OVERRIDE; |
345 virtual void AppCacheAccessed(const GURL& manifest_url, | 293 virtual void AppCacheAccessed(const GURL& manifest_url, |
346 bool blocked_by_policy) OVERRIDE; | 294 bool blocked_by_policy) OVERRIDE; |
347 | 295 |
348 void SavePassword(); | |
349 | |
350 const autofill::PasswordForm pending_credentials() const { | |
351 return form_manager_->pending_credentials(); | |
352 } | |
353 | |
354 const autofill::PasswordFormMap best_matches() const { | |
355 return password_form_map_; | |
356 } | |
357 | |
358 // TODO(npentrel) This ought to be changed. Best matches should be newly | |
359 // made when opening the ManagePasswordsBubble because there may have been | |
360 // changes to the best matches via the settings page. At the moment this also | |
361 // fails if one deletes a password when they are autofilled, as it still shows | |
362 // up after logging in and saving a password. | |
363 void remove_from_best_matches(autofill::PasswordForm password_form) { | |
364 password_form_map_.erase(password_form.username_value); | |
365 } | |
366 | |
367 bool password_submitted() const { | |
368 return password_submitted_; | |
369 } | |
370 | |
371 void password_submitted(bool password_submitted) { | |
372 password_submitted_ = password_submitted; | |
373 } | |
374 | |
375 // Message handlers. Public for testing. | 296 // Message handlers. Public for testing. |
376 void OnContentBlocked(ContentSettingsType type, | 297 void OnContentBlocked(ContentSettingsType type, |
377 const std::string& resource_identifier); | 298 const std::string& resource_identifier); |
378 void OnContentAllowed(ContentSettingsType type); | 299 void OnContentAllowed(ContentSettingsType type); |
379 | 300 |
380 // These methods are invoked on the UI thread by the static functions above. | 301 // These methods are invoked on the UI thread by the static functions above. |
381 // Public for testing. | 302 // Public for testing. |
382 void OnCookiesRead(const GURL& url, | 303 void OnCookiesRead(const GURL& url, |
383 const GURL& first_party_url, | 304 const GURL& first_party_url, |
384 const net::CookieList& cookie_list, | 305 const net::CookieList& cookie_list, |
(...skipping 23 matching lines...) Expand all Loading... |
408 #endif | 329 #endif |
409 | 330 |
410 // This method is called to update the status about the microphone and | 331 // This method is called to update the status about the microphone and |
411 // camera stream access. |request_permissions| contains a list of requested | 332 // camera stream access. |request_permissions| contains a list of requested |
412 // media stream types and the permission for each type. | 333 // media stream types and the permission for each type. |
413 void OnMediaStreamPermissionSet( | 334 void OnMediaStreamPermissionSet( |
414 const GURL& request_origin, | 335 const GURL& request_origin, |
415 const MediaStreamDevicesController::MediaStreamTypeSettingsMap& | 336 const MediaStreamDevicesController::MediaStreamTypeSettingsMap& |
416 request_permissions); | 337 request_permissions); |
417 | 338 |
418 // Called when the user submits a form containing login information, so we | |
419 // can handle later requests to save or blacklist that login information. | |
420 // This stores the provided object in form_manager_ and triggers the UI to | |
421 // prompt the user about whether they would like to save the password. | |
422 void OnPasswordSubmitted(PasswordFormManager* form_manager); | |
423 | |
424 // Called when a form is autofilled with login information, so we can manage | |
425 // password credentials for the current site which are stored in | |
426 // |password_form_map|. This stores a copy of |password_form_map| and shows | |
427 // the manage password icon. | |
428 void OnPasswordAutofilled(const autofill::PasswordFormMap& password_form_map); | |
429 | |
430 // There methods are called to update the status about MIDI access. | 339 // There methods are called to update the status about MIDI access. |
431 void OnMIDISysExAccessed(const GURL& reqesting_origin); | 340 void OnMIDISysExAccessed(const GURL& reqesting_origin); |
432 void OnMIDISysExAccessBlocked(const GURL& requesting_origin); | 341 void OnMIDISysExAccessBlocked(const GURL& requesting_origin); |
433 | 342 |
434 // Is called to set ManagePasswordsIconController as an observer. | |
435 void SetPasswordObserver(PasswordObserver* observer); | |
436 | |
437 // Adds the given |SiteDataObserver|. The |observer| is notified when a | 343 // Adds the given |SiteDataObserver|. The |observer| is notified when a |
438 // locale shared object, like for example a cookie, is accessed. | 344 // locale shared object, like for example a cookie, is accessed. |
439 void AddSiteDataObserver(SiteDataObserver* observer); | 345 void AddSiteDataObserver(SiteDataObserver* observer); |
440 | 346 |
441 // Removes the given |SiteDataObserver|. | 347 // Removes the given |SiteDataObserver|. |
442 void RemoveSiteDataObserver(SiteDataObserver* observer); | 348 void RemoveSiteDataObserver(SiteDataObserver* observer); |
443 | 349 |
444 private: | 350 private: |
445 explicit TabSpecificContentSettings(content::WebContents* tab); | 351 explicit TabSpecificContentSettings(content::WebContents* tab); |
446 friend class content::WebContentsUserData<TabSpecificContentSettings>; | 352 friend class content::WebContentsUserData<TabSpecificContentSettings>; |
447 | 353 |
448 void AddBlockedResource(ContentSettingsType content_type, | 354 void AddBlockedResource(ContentSettingsType content_type, |
449 const std::string& resource_identifier); | 355 const std::string& resource_identifier); |
450 | 356 |
451 // content::NotificationObserver implementation. | 357 // content::NotificationObserver implementation. |
452 virtual void Observe(int type, | 358 virtual void Observe(int type, |
453 const content::NotificationSource& source, | 359 const content::NotificationSource& source, |
454 const content::NotificationDetails& details) OVERRIDE; | 360 const content::NotificationDetails& details) OVERRIDE; |
455 | 361 |
456 // Notifies the registered PasswordObserver of a sumitted password form. | |
457 void NotifyPasswordObserver(); | |
458 | |
459 // Currently the registered PasswordObserver. | |
460 PasswordObserver* password_observer_; | |
461 | |
462 // Notifies all registered |SiteDataObserver|s. | 362 // Notifies all registered |SiteDataObserver|s. |
463 void NotifySiteDataObservers(); | 363 void NotifySiteDataObservers(); |
464 | 364 |
465 // All currently registered |SiteDataObserver|s. | 365 // All currently registered |SiteDataObserver|s. |
466 ObserverList<SiteDataObserver> observer_list_; | 366 ObserverList<SiteDataObserver> observer_list_; |
467 | 367 |
468 // Stores which content setting types actually have blocked content. | 368 // Stores which content setting types actually have blocked content. |
469 bool content_blocked_[CONTENT_SETTINGS_NUM_TYPES]; | 369 bool content_blocked_[CONTENT_SETTINGS_NUM_TYPES]; |
470 | 370 |
471 // Stores if the blocked content was messaged to the user. | 371 // Stores if the blocked content was messaged to the user. |
(...skipping 43 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
515 // The origin of the media stream request. Note that we only support handling | 415 // The origin of the media stream request. Note that we only support handling |
516 // settings for one request per tab. The latest request's origin will be | 416 // settings for one request per tab. The latest request's origin will be |
517 // stored here. http://crbug.com/259794 | 417 // stored here. http://crbug.com/259794 |
518 GURL media_stream_access_origin_; | 418 GURL media_stream_access_origin_; |
519 | 419 |
520 // The devices to be displayed in the media bubble when the media stream | 420 // The devices to be displayed in the media bubble when the media stream |
521 // request is requesting certain specific devices. | 421 // request is requesting certain specific devices. |
522 std::string media_stream_requested_audio_device_; | 422 std::string media_stream_requested_audio_device_; |
523 std::string media_stream_requested_video_device_; | 423 std::string media_stream_requested_video_device_; |
524 | 424 |
525 // Set by OnPasswordSubmitted() when the user submits a form containing login | |
526 // information. If the user responds to a subsequent "Do you want to save | |
527 // this password?" prompt, we ask this object to save or blacklist the | |
528 // associated login information in Chrome's password store. | |
529 scoped_ptr<PasswordFormManager> form_manager_; | |
530 | |
531 // All previously stored credentials for a specific site. Set by | |
532 // OnPasswordSubmitted() or OnPasswordAutofilled(). | |
533 autofill::PasswordFormMap password_form_map_; | |
534 | |
535 bool manage_passwords_icon_to_be_shown_; | |
536 bool password_to_be_saved_; | |
537 bool manage_passwords_bubble_needs_showing_; | |
538 bool password_submitted_; | |
539 | |
540 DISALLOW_COPY_AND_ASSIGN(TabSpecificContentSettings); | 425 DISALLOW_COPY_AND_ASSIGN(TabSpecificContentSettings); |
541 }; | 426 }; |
542 | 427 |
543 #endif // CHROME_BROWSER_CONTENT_SETTINGS_TAB_SPECIFIC_CONTENT_SETTINGS_H_ | 428 #endif // CHROME_BROWSER_CONTENT_SETTINGS_TAB_SPECIFIC_CONTENT_SETTINGS_H_ |
OLD | NEW |