EWebView::~EWebView()
{
- std::map<int64_t, WebViewAsyncRequestHitTestDataCallback*>::iterator it;
- for (it = hit_test_callback_.begin(); it != hit_test_callback_.end(); it++)
- delete it->second;
-
+ std::map<int64_t, WebViewAsyncRequestHitTestDataCallback*>::iterator hit_test_callback_iterator;
+ for (hit_test_callback_iterator = hit_test_callback_.begin();
+ hit_test_callback_iterator != hit_test_callback_.end();
+ hit_test_callback_iterator++)
+ delete hit_test_callback_iterator->second;
hit_test_callback_.clear();
+ std::set<IPC::Message*>::iterator delayed_messages_iterator;
+ for (delayed_messages_iterator = delayed_messages_.begin();
+ delayed_messages_iterator != delayed_messages_.end();
+ ++delayed_messages_iterator)
+ delete (*delayed_messages_iterator);
+ delayed_messages_.clear();
+
if (!is_initialized_) {
return;
}
void EWebView::UpdateWebKitPreferences() {
DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
- if (!web_contents_ || !web_contents_delegate_)
- return;
RenderViewHost* render_view_host = web_contents_->GetRenderViewHost();
if (!render_view_host)
web_contents_delegate_->OnUpdateSettings(settings_.get());
render_view_host->UpdateWebkitPreferences(settings_->getPreferences());
- render_view_host->Send(
+
+ IPC::Message* message =
new EflViewMsg_UpdateSettings(render_view_host->GetRoutingID(),
- settings_->getWebViewSettings()));
+ settings_->getWebViewSettings());
+
+ if (render_view_host->IsRenderViewLive()) {
+ render_view_host->Send(message);
+ } else {
+ delayed_messages_.insert(message);
+ // this message is send in UpdateWebkitPreferences and would otherwise be
+ // lost
+ delayed_messages_.insert(
+ new ViewMsg_UpdateWebPreferences(render_view_host->GetRoutingID(),
+ settings_->getPreferences()));
+ }
+
}
void EWebView::SetContentSecurityPolicy(const char* policy, Ewk_CSP_Header_Type type) {
}
void EWebView::SetViewMode(blink::WebViewMode view_mode) {
- WebContentsImpl* wci = static_cast<WebContentsImpl*>(web_contents_.get());
- wci->Send(new ViewMsg_SetViewMode(wci->GetRoutingID(), view_mode));
+ RenderViewHost* render_view_host = web_contents_->GetRenderViewHost();
+ if (!render_view_host)
+ return;
+
+ IPC::Message* message = new ViewMsg_SetViewMode(render_view_host->GetRoutingID(), view_mode);
+ if (render_view_host->IsRenderViewLive()) {
+ render_view_host->Send(message);
+ } else {
+ delayed_messages_.insert(message);
+ }
}
gfx::Point EWebView::GetContextMenuPosition() const {
return false;
return selection_controller_->TextSelectionUp(x, y);
}
+
+void EWebView::SendDelayedMessages(RenderViewHost* render_view_host) {
+ DCHECK(render_view_host);
+
+ if (!BrowserThread::CurrentlyOn(BrowserThread::UI)) {
+ BrowserThread::PostTask(BrowserThread::UI, FROM_HERE,
+ base::Bind(&EWebView::SendDelayedMessages, base::Unretained(this), render_view_host));
+ return;
+ }
+
+ for (std::set<IPC::Message*>::iterator iter = delayed_messages_.begin();
+ iter != delayed_messages_.end(); ++iter) {
+ IPC::Message* message = *iter;
+ message->set_routing_id(render_view_host->GetRoutingID());
+ render_view_host->Send(message);
+ }
+
+ delayed_messages_.clear();
+}