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 "extensions/browser/guest_view/web_view/web_view_guest.h" | 5 #include "extensions/browser/guest_view/web_view/web_view_guest.h" |
6 | 6 |
7 #include "base/message_loop/message_loop.h" | 7 #include "base/message_loop/message_loop.h" |
8 #include "base/strings/stringprintf.h" | 8 #include "base/strings/stringprintf.h" |
9 #include "base/strings/utf_string_conversions.h" | 9 #include "base/strings/utf_string_conversions.h" |
10 #include "content/public/browser/browser_context.h" | 10 #include "content/public/browser/browser_context.h" |
(...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
46 #include "extensions/strings/grit/extensions_strings.h" | 46 #include "extensions/strings/grit/extensions_strings.h" |
47 #include "ipc/ipc_message_macros.h" | 47 #include "ipc/ipc_message_macros.h" |
48 #include "net/base/escape.h" | 48 #include "net/base/escape.h" |
49 #include "net/base/net_errors.h" | 49 #include "net/base/net_errors.h" |
50 #include "ui/base/models/simple_menu_model.h" | 50 #include "ui/base/models/simple_menu_model.h" |
51 #include "url/url_constants.h" | 51 #include "url/url_constants.h" |
52 | 52 |
53 using base::UserMetricsAction; | 53 using base::UserMetricsAction; |
54 using content::RenderFrameHost; | 54 using content::RenderFrameHost; |
55 using content::ResourceType; | 55 using content::ResourceType; |
| 56 using content::StoragePartition; |
56 using content::WebContents; | 57 using content::WebContents; |
57 | 58 |
58 namespace extensions { | 59 namespace extensions { |
59 | 60 |
60 namespace { | 61 namespace { |
61 | 62 |
| 63 // Returns storage partition removal mask from web_view clearData mask. Note |
| 64 // that storage partition mask is a subset of webview's data removal mask. |
| 65 uint32 GetStoragePartitionRemovalMask(uint32 web_view_removal_mask) { |
| 66 uint32 mask = 0; |
| 67 if (web_view_removal_mask & webview::WEB_VIEW_REMOVE_DATA_MASK_APPCACHE) |
| 68 mask |= StoragePartition::REMOVE_DATA_MASK_APPCACHE; |
| 69 if (web_view_removal_mask & webview::WEB_VIEW_REMOVE_DATA_MASK_COOKIES) |
| 70 mask |= StoragePartition::REMOVE_DATA_MASK_COOKIES; |
| 71 if (web_view_removal_mask & webview::WEB_VIEW_REMOVE_DATA_MASK_FILE_SYSTEMS) |
| 72 mask |= StoragePartition::REMOVE_DATA_MASK_FILE_SYSTEMS; |
| 73 if (web_view_removal_mask & webview::WEB_VIEW_REMOVE_DATA_MASK_INDEXEDDB) |
| 74 mask |= StoragePartition::REMOVE_DATA_MASK_INDEXEDDB; |
| 75 if (web_view_removal_mask & webview::WEB_VIEW_REMOVE_DATA_MASK_LOCAL_STORAGE) |
| 76 mask |= StoragePartition::REMOVE_DATA_MASK_LOCAL_STORAGE; |
| 77 if (web_view_removal_mask & webview::WEB_VIEW_REMOVE_DATA_MASK_WEBSQL) |
| 78 mask |= StoragePartition::REMOVE_DATA_MASK_WEBSQL; |
| 79 |
| 80 return mask; |
| 81 } |
| 82 |
62 std::string WindowOpenDispositionToString( | 83 std::string WindowOpenDispositionToString( |
63 WindowOpenDisposition window_open_disposition) { | 84 WindowOpenDisposition window_open_disposition) { |
64 switch (window_open_disposition) { | 85 switch (window_open_disposition) { |
65 case IGNORE_ACTION: | 86 case IGNORE_ACTION: |
66 return "ignore"; | 87 return "ignore"; |
67 case SAVE_TO_DISK: | 88 case SAVE_TO_DISK: |
68 return "save_to_disk"; | 89 return "save_to_disk"; |
69 case CURRENT_TAB: | 90 case CURRENT_TAB: |
70 return "current_tab"; | 91 return "current_tab"; |
71 case NEW_BACKGROUND_TAB: | 92 case NEW_BACKGROUND_TAB: |
(...skipping 236 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
308 | 329 |
309 ApplyAttributes(create_params); | 330 ApplyAttributes(create_params); |
310 } | 331 } |
311 | 332 |
312 void WebViewGuest::AttachWebViewHelpers(WebContents* contents) { | 333 void WebViewGuest::AttachWebViewHelpers(WebContents* contents) { |
313 if (web_view_guest_delegate_) | 334 if (web_view_guest_delegate_) |
314 web_view_guest_delegate_->OnAttachWebViewHelpers(contents); | 335 web_view_guest_delegate_->OnAttachWebViewHelpers(contents); |
315 web_view_permission_helper_.reset(new WebViewPermissionHelper(this)); | 336 web_view_permission_helper_.reset(new WebViewPermissionHelper(this)); |
316 } | 337 } |
317 | 338 |
| 339 void WebViewGuest::ClearDataInternal(base::Time remove_since, |
| 340 uint32 removal_mask, |
| 341 const base::Closure& callback) { |
| 342 uint32 storage_partition_removal_mask = |
| 343 GetStoragePartitionRemovalMask(removal_mask); |
| 344 if (!storage_partition_removal_mask) { |
| 345 callback.Run(); |
| 346 return; |
| 347 } |
| 348 content::StoragePartition* partition = |
| 349 content::BrowserContext::GetStoragePartition( |
| 350 web_contents()->GetBrowserContext(), |
| 351 web_contents()->GetSiteInstance()); |
| 352 partition->ClearData( |
| 353 storage_partition_removal_mask, |
| 354 content::StoragePartition::QUOTA_MANAGED_STORAGE_MASK_ALL, GURL(), |
| 355 content::StoragePartition::OriginMatcherFunction(), remove_since, |
| 356 base::Time::Now(), callback); |
| 357 } |
| 358 |
318 void WebViewGuest::GuestViewDidStopLoading() { | 359 void WebViewGuest::GuestViewDidStopLoading() { |
319 scoped_ptr<base::DictionaryValue> args(new base::DictionaryValue()); | 360 scoped_ptr<base::DictionaryValue> args(new base::DictionaryValue()); |
320 DispatchEventToView( | 361 DispatchEventToView( |
321 new GuestViewBase::Event(webview::kEventLoadStop, args.Pass())); | 362 new GuestViewBase::Event(webview::kEventLoadStop, args.Pass())); |
322 } | 363 } |
323 | 364 |
324 void WebViewGuest::EmbedderFullscreenToggled(bool entered_fullscreen) { | 365 void WebViewGuest::EmbedderFullscreenToggled(bool entered_fullscreen) { |
325 is_embedder_fullscreen_ = entered_fullscreen; | 366 is_embedder_fullscreen_ = entered_fullscreen; |
326 // If the embedder has got out of fullscreen, we get out of fullscreen | 367 // If the embedder has got out of fullscreen, we get out of fullscreen |
327 // mode as well. | 368 // mode as well. |
(...skipping 281 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
609 | 650 |
610 void WebViewGuest::Terminate() { | 651 void WebViewGuest::Terminate() { |
611 content::RecordAction(UserMetricsAction("WebView.Guest.Terminate")); | 652 content::RecordAction(UserMetricsAction("WebView.Guest.Terminate")); |
612 base::ProcessHandle process_handle = | 653 base::ProcessHandle process_handle = |
613 web_contents()->GetRenderProcessHost()->GetHandle(); | 654 web_contents()->GetRenderProcessHost()->GetHandle(); |
614 if (process_handle) | 655 if (process_handle) |
615 web_contents()->GetRenderProcessHost()->Shutdown( | 656 web_contents()->GetRenderProcessHost()->Shutdown( |
616 content::RESULT_CODE_KILLED, false); | 657 content::RESULT_CODE_KILLED, false); |
617 } | 658 } |
618 | 659 |
619 bool WebViewGuest::ClearData(const base::Time remove_since, | 660 bool WebViewGuest::ClearData(base::Time remove_since, |
620 uint32 removal_mask, | 661 uint32 removal_mask, |
621 const base::Closure& callback) { | 662 const base::Closure& callback) { |
622 content::RecordAction(UserMetricsAction("WebView.Guest.ClearData")); | 663 content::RecordAction(UserMetricsAction("WebView.Guest.ClearData")); |
623 content::StoragePartition* partition = | 664 content::StoragePartition* partition = |
624 content::BrowserContext::GetStoragePartition( | 665 content::BrowserContext::GetStoragePartition( |
625 web_contents()->GetBrowserContext(), | 666 web_contents()->GetBrowserContext(), |
626 web_contents()->GetSiteInstance()); | 667 web_contents()->GetSiteInstance()); |
627 | 668 |
628 if (!partition) | 669 if (!partition) |
629 return false; | 670 return false; |
630 | 671 |
631 partition->ClearData( | 672 if (removal_mask & webview::WEB_VIEW_REMOVE_DATA_MASK_CACHE) { |
632 removal_mask, | 673 if (web_view_guest_delegate_) { |
633 content::StoragePartition::QUOTA_MANAGED_STORAGE_MASK_ALL, | 674 // First clear http cache data and then clear the rest in |
634 GURL(), | 675 // |ClearDataInternal|. |
635 content::StoragePartition::OriginMatcherFunction(), | 676 web_view_guest_delegate_->ClearCache( |
636 remove_since, | 677 remove_since, base::Bind(&WebViewGuest::ClearDataInternal, |
637 base::Time::Now(), | 678 weak_ptr_factory_.GetWeakPtr(), remove_since, |
638 callback); | 679 removal_mask, callback)); |
| 680 return true; |
| 681 } |
| 682 } |
| 683 |
| 684 ClearDataInternal(remove_since, removal_mask, callback); |
639 return true; | 685 return true; |
640 } | 686 } |
641 | 687 |
642 WebViewGuest::WebViewGuest(content::WebContents* owner_web_contents) | 688 WebViewGuest::WebViewGuest(content::WebContents* owner_web_contents) |
643 : GuestView<WebViewGuest>(owner_web_contents), | 689 : GuestView<WebViewGuest>(owner_web_contents), |
644 rules_registry_id_(RulesRegistryService::kInvalidRulesRegistryID), | 690 rules_registry_id_(RulesRegistryService::kInvalidRulesRegistryID), |
645 find_helper_(this), | 691 find_helper_(this), |
646 is_overriding_user_agent_(false), | 692 is_overriding_user_agent_(false), |
647 guest_opaque_(true), | 693 guest_opaque_(true), |
648 javascript_dialog_helper_(this), | 694 javascript_dialog_helper_(this), |
(...skipping 682 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1331 scoped_ptr<base::DictionaryValue> args(new base::DictionaryValue()); | 1377 scoped_ptr<base::DictionaryValue> args(new base::DictionaryValue()); |
1332 DispatchEventToView( | 1378 DispatchEventToView( |
1333 new GuestViewBase::Event(webview::kEventExitFullscreen, args.Pass())); | 1379 new GuestViewBase::Event(webview::kEventExitFullscreen, args.Pass())); |
1334 } | 1380 } |
1335 // Since we changed fullscreen state, sending a Resize message ensures that | 1381 // Since we changed fullscreen state, sending a Resize message ensures that |
1336 // renderer/ sees the change. | 1382 // renderer/ sees the change. |
1337 web_contents()->GetRenderViewHost()->WasResized(); | 1383 web_contents()->GetRenderViewHost()->WasResized(); |
1338 } | 1384 } |
1339 | 1385 |
1340 } // namespace extensions | 1386 } // namespace extensions |
OLD | NEW |