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 #include "content/browser/browser_plugin/browser_plugin_guest.h" | 5 #include "content/browser/browser_plugin/browser_plugin_guest.h" |
6 | 6 |
7 #include <algorithm> | 7 #include <algorithm> |
8 | 8 |
9 #include "base/message_loop/message_loop.h" | 9 #include "base/message_loop/message_loop.h" |
10 #include "base/strings/string_util.h" | 10 #include "base/strings/string_util.h" |
(...skipping 102 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
113 // If we do not destroy the guest then we allow the new window. | 113 // If we do not destroy the guest then we allow the new window. |
114 if (!should_allow) | 114 if (!should_allow) |
115 guest->Destroy(); | 115 guest->Destroy(); |
116 } | 116 } |
117 | 117 |
118 private: | 118 private: |
119 virtual ~NewWindowRequest() {} | 119 virtual ~NewWindowRequest() {} |
120 int instance_id_; | 120 int instance_id_; |
121 }; | 121 }; |
122 | 122 |
123 class BrowserPluginGuest::JavaScriptDialogRequest : public PermissionRequest { | |
124 public: | |
125 JavaScriptDialogRequest(const base::WeakPtr<BrowserPluginGuest>& guest, | |
126 const DialogClosedCallback& callback) | |
127 : PermissionRequest(guest), | |
128 callback_(callback) { | |
129 RecordAction( | |
130 base::UserMetricsAction("BrowserPlugin.Guest.PermissionRequest.JSDialog"
)); | |
131 } | |
132 | |
133 virtual void RespondImpl(bool should_allow, | |
134 const std::string& user_input) OVERRIDE { | |
135 callback_.Run(should_allow, base::UTF8ToUTF16(user_input)); | |
136 } | |
137 | |
138 private: | |
139 virtual ~JavaScriptDialogRequest() {} | |
140 DialogClosedCallback callback_; | |
141 }; | |
142 | |
143 namespace { | 123 namespace { |
144 std::string WindowOpenDispositionToString( | 124 std::string WindowOpenDispositionToString( |
145 WindowOpenDisposition window_open_disposition) { | 125 WindowOpenDisposition window_open_disposition) { |
146 switch (window_open_disposition) { | 126 switch (window_open_disposition) { |
147 case IGNORE_ACTION: | 127 case IGNORE_ACTION: |
148 return "ignore"; | 128 return "ignore"; |
149 case SAVE_TO_DISK: | 129 case SAVE_TO_DISK: |
150 return "save_to_disk"; | 130 return "save_to_disk"; |
151 case CURRENT_TAB: | 131 case CURRENT_TAB: |
152 return "current_tab"; | 132 return "current_tab"; |
153 case NEW_BACKGROUND_TAB: | 133 case NEW_BACKGROUND_TAB: |
154 return "new_background_tab"; | 134 return "new_background_tab"; |
155 case NEW_FOREGROUND_TAB: | 135 case NEW_FOREGROUND_TAB: |
156 return "new_foreground_tab"; | 136 return "new_foreground_tab"; |
157 case NEW_WINDOW: | 137 case NEW_WINDOW: |
158 return "new_window"; | 138 return "new_window"; |
159 case NEW_POPUP: | 139 case NEW_POPUP: |
160 return "new_popup"; | 140 return "new_popup"; |
161 default: | 141 default: |
162 NOTREACHED() << "Unknown Window Open Disposition"; | 142 NOTREACHED() << "Unknown Window Open Disposition"; |
163 return "ignore"; | 143 return "ignore"; |
164 } | 144 } |
165 } | 145 } |
166 | 146 |
167 std::string JavaScriptMessageTypeToString(JavaScriptMessageType message_type) { | |
168 switch (message_type) { | |
169 case JAVASCRIPT_MESSAGE_TYPE_ALERT: | |
170 return "alert"; | |
171 case JAVASCRIPT_MESSAGE_TYPE_CONFIRM: | |
172 return "confirm"; | |
173 case JAVASCRIPT_MESSAGE_TYPE_PROMPT: | |
174 return "prompt"; | |
175 default: | |
176 NOTREACHED() << "Unknown JavaScript Message Type."; | |
177 return "unknown"; | |
178 } | |
179 } | |
180 | |
181 // Called on IO thread. | 147 // Called on IO thread. |
182 static GURL RetrieveDownloadURLFromRequestId( | 148 static GURL RetrieveDownloadURLFromRequestId( |
183 int render_process_id, | 149 int render_process_id, |
184 int url_request_id) { | 150 int url_request_id) { |
185 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO)); | 151 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO)); |
186 | 152 |
187 GlobalRequestID global_id(render_process_id, url_request_id); | 153 GlobalRequestID global_id(render_process_id, url_request_id); |
188 net::URLRequest* url_request = | 154 net::URLRequest* url_request = |
189 ResourceDispatcherHostImpl::Get()->GetURLRequest(global_id); | 155 ResourceDispatcherHostImpl::Get()->GetURLRequest(global_id); |
190 if (url_request) | 156 if (url_request) |
(...skipping 465 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
656 } | 622 } |
657 | 623 |
658 void BrowserPluginGuest::CloseContents(WebContents* source) { | 624 void BrowserPluginGuest::CloseContents(WebContents* source) { |
659 if (!delegate_) | 625 if (!delegate_) |
660 return; | 626 return; |
661 | 627 |
662 delegate_->Close(); | 628 delegate_->Close(); |
663 } | 629 } |
664 | 630 |
665 JavaScriptDialogManager* BrowserPluginGuest::GetJavaScriptDialogManager() { | 631 JavaScriptDialogManager* BrowserPluginGuest::GetJavaScriptDialogManager() { |
666 return this; | 632 if (!delegate_) |
| 633 return NULL; |
| 634 return delegate_->GetJavaScriptDialogManager(); |
667 } | 635 } |
668 | 636 |
669 ColorChooser* BrowserPluginGuest::OpenColorChooser( | 637 ColorChooser* BrowserPluginGuest::OpenColorChooser( |
670 WebContents* web_contents, | 638 WebContents* web_contents, |
671 SkColor color, | 639 SkColor color, |
672 const std::vector<ColorSuggestion>& suggestions) { | 640 const std::vector<ColorSuggestion>& suggestions) { |
673 if (!embedder_web_contents_ || !embedder_web_contents_->GetDelegate()) | 641 if (!embedder_web_contents_ || !embedder_web_contents_->GetDelegate()) |
674 return NULL; | 642 return NULL; |
675 return embedder_web_contents_->GetDelegate()->OpenColorChooser( | 643 return embedder_web_contents_->GetDelegate()->OpenColorChooser( |
676 web_contents, color, suggestions); | 644 web_contents, color, suggestions); |
(...skipping 879 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1556 delegate_->RequestMediaAccessPermission(request, callback); | 1524 delegate_->RequestMediaAccessPermission(request, callback); |
1557 } | 1525 } |
1558 | 1526 |
1559 bool BrowserPluginGuest::PreHandleGestureEvent( | 1527 bool BrowserPluginGuest::PreHandleGestureEvent( |
1560 WebContents* source, const blink::WebGestureEvent& event) { | 1528 WebContents* source, const blink::WebGestureEvent& event) { |
1561 return event.type == blink::WebGestureEvent::GesturePinchBegin || | 1529 return event.type == blink::WebGestureEvent::GesturePinchBegin || |
1562 event.type == blink::WebGestureEvent::GesturePinchUpdate || | 1530 event.type == blink::WebGestureEvent::GesturePinchUpdate || |
1563 event.type == blink::WebGestureEvent::GesturePinchEnd; | 1531 event.type == blink::WebGestureEvent::GesturePinchEnd; |
1564 } | 1532 } |
1565 | 1533 |
1566 void BrowserPluginGuest::RunJavaScriptDialog( | |
1567 WebContents* web_contents, | |
1568 const GURL& origin_url, | |
1569 const std::string& accept_lang, | |
1570 JavaScriptMessageType javascript_message_type, | |
1571 const base::string16& message_text, | |
1572 const base::string16& default_prompt_text, | |
1573 const DialogClosedCallback& callback, | |
1574 bool* did_suppress_message) { | |
1575 base::DictionaryValue request_info; | |
1576 request_info.Set( | |
1577 browser_plugin::kDefaultPromptText, | |
1578 base::Value::CreateStringValue(base::UTF16ToUTF8(default_prompt_text))); | |
1579 request_info.Set( | |
1580 browser_plugin::kMessageText, | |
1581 base::Value::CreateStringValue(base::UTF16ToUTF8(message_text))); | |
1582 request_info.Set( | |
1583 browser_plugin::kMessageType, | |
1584 base::Value::CreateStringValue( | |
1585 JavaScriptMessageTypeToString(javascript_message_type))); | |
1586 request_info.Set( | |
1587 browser_plugin::kURL, | |
1588 base::Value::CreateStringValue(origin_url.spec())); | |
1589 | |
1590 RequestPermission(BROWSER_PLUGIN_PERMISSION_TYPE_JAVASCRIPT_DIALOG, | |
1591 new JavaScriptDialogRequest(weak_ptr_factory_.GetWeakPtr(), | |
1592 callback), | |
1593 request_info); | |
1594 } | |
1595 | |
1596 void BrowserPluginGuest::RunBeforeUnloadDialog( | |
1597 WebContents* web_contents, | |
1598 const base::string16& message_text, | |
1599 bool is_reload, | |
1600 const DialogClosedCallback& callback) { | |
1601 // This is called if the guest has a beforeunload event handler. | |
1602 // This callback allows navigation to proceed. | |
1603 callback.Run(true, base::string16()); | |
1604 } | |
1605 | |
1606 bool BrowserPluginGuest::HandleJavaScriptDialog( | |
1607 WebContents* web_contents, | |
1608 bool accept, | |
1609 const base::string16* prompt_override) { | |
1610 return false; | |
1611 } | |
1612 | |
1613 void BrowserPluginGuest::CancelActiveAndPendingDialogs( | |
1614 WebContents* web_contents) { | |
1615 } | |
1616 | |
1617 void BrowserPluginGuest::WebContentsDestroyed(WebContents* web_contents) { | |
1618 } | |
1619 | |
1620 void BrowserPluginGuest::OnUpdateRect( | 1534 void BrowserPluginGuest::OnUpdateRect( |
1621 const ViewHostMsg_UpdateRect_Params& params) { | 1535 const ViewHostMsg_UpdateRect_Params& params) { |
1622 BrowserPluginMsg_UpdateRect_Params relay_params; | 1536 BrowserPluginMsg_UpdateRect_Params relay_params; |
1623 relay_params.view_size = params.view_size; | 1537 relay_params.view_size = params.view_size; |
1624 relay_params.scale_factor = params.scale_factor; | 1538 relay_params.scale_factor = params.scale_factor; |
1625 relay_params.is_resize_ack = ViewHostMsg_UpdateRect_Flags::is_resize_ack( | 1539 relay_params.is_resize_ack = ViewHostMsg_UpdateRect_Flags::is_resize_ack( |
1626 params.flags); | 1540 params.flags); |
1627 relay_params.needs_ack = params.needs_ack; | 1541 relay_params.needs_ack = params.needs_ack; |
1628 | 1542 |
1629 bool size_changed = last_seen_view_size_ != params.view_size; | 1543 bool size_changed = last_seen_view_size_ != params.view_size; |
(...skipping 85 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1715 const GURL& url) { | 1629 const GURL& url) { |
1716 if (!url.is_valid()) { | 1630 if (!url.is_valid()) { |
1717 callback.Run(false); | 1631 callback.Run(false); |
1718 return; | 1632 return; |
1719 } | 1633 } |
1720 | 1634 |
1721 delegate_->CanDownload(request_method, url, callback); | 1635 delegate_->CanDownload(request_method, url, callback); |
1722 } | 1636 } |
1723 | 1637 |
1724 } // namespace content | 1638 } // namespace content |
OLD | NEW |