| // Copyright (c) 2012 The Chromium Authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| #include "chrome/browser/extensions/data_deleter.h" |
| |
| #include "chrome/browser/extensions/api/storage/settings_frontend.h" |
| #include "chrome/browser/extensions/extension_service.h" |
| #include "chrome/browser/profiles/profile.h" |
| #include "content/public/browser/browser_context.h" |
| #include "content/public/browser/browser_thread.h" |
| #include "content/public/browser/storage_partition.h" |
| #include "extensions/common/constants.h" |
| #include "extensions/common/extension.h" |
| #include "net/url_request/url_request_context_getter.h" |
| |
| using content::BrowserContext; |
| using content::BrowserThread; |
| using content::StoragePartition; |
| |
| namespace extensions { |
| |
| // static |
| void DataDeleter::StartDeleting(Profile* profile, |
| const std::string& extension_id, |
| const GURL& storage_origin) { |
| DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); |
| DCHECK(profile); |
| |
| const GURL& site = Extension::GetBaseURLFromExtensionId(extension_id); |
| |
| StoragePartition* partition = |
| BrowserContext::GetStoragePartitionForSite(profile, site); |
| |
| if (storage_origin.SchemeIs(extensions::kExtensionScheme)) { |
| // TODO(ajwong): Cookies are not properly isolated for |
| // chrome-extension:// scheme. (http://crbug.com/158386). |
| // |
| // However, no isolated apps actually can write to kExtensionScheme |
| // origins. Thus, it is benign to delete from the |
| // RequestContextForExtensions because there's nothing stored there. We |
| // preserve this code path without checking for isolation because it's |
| // simpler than special casing. This code should go away once we merge |
| // the various URLRequestContexts (http://crbug.com/159193). |
| partition->ClearDataForOrigin( |
| StoragePartition::REMOVE_DATA_MASK_ALL & |
| (~StoragePartition::REMOVE_DATA_MASK_SHADER_CACHE), |
| StoragePartition::QUOTA_MANAGED_STORAGE_MASK_ALL, |
| storage_origin, |
| profile->GetRequestContextForExtensions()); |
| } else { |
| // We don't need to worry about the media request context because that |
| // shares the same cookie store as the main request context. |
| partition->ClearDataForOrigin( |
| StoragePartition::REMOVE_DATA_MASK_ALL & |
| (~StoragePartition::REMOVE_DATA_MASK_SHADER_CACHE), |
| StoragePartition::QUOTA_MANAGED_STORAGE_MASK_ALL, |
| storage_origin, |
| partition->GetURLRequestContext()); |
| } |
| |
| // Begin removal of the settings for the current extension. |
| profile->GetExtensionService()->settings_frontend()-> |
| DeleteStorageSoon(extension_id); |
| } |
| |
| } // namespace extensions |