Fix mapping of routing IDs to browser objects (issue #1012).

git-svn-id: https://chromiumembedded.googlecode.com/svn/trunk@1305 5089003a-bbd8-11dd-ad1f-f1f9622dbc98
This commit is contained in:
Marshall Greenblatt
2013-07-15 20:25:59 +00:00
parent 8118ed28b3
commit 27fac646d9
10 changed files with 623 additions and 37 deletions

View File

@@ -8,9 +8,7 @@
CefBrowserInfo::CefBrowserInfo(int browser_id, bool is_popup)
: browser_id_(browser_id),
is_popup_(is_popup),
is_window_rendering_disabled_(false),
render_process_id_(MSG_ROUTING_NONE),
render_view_id_(MSG_ROUTING_NONE) {
is_window_rendering_disabled_(false) {
DCHECK_GT(browser_id, 0);
}
@@ -21,19 +19,51 @@ void CefBrowserInfo::set_window_rendering_disabled(bool disabled) {
is_window_rendering_disabled_ = disabled;
}
void CefBrowserInfo::set_render_ids(
void CefBrowserInfo::add_render_id(
int render_process_id, int render_view_id) {
DCHECK_GT(render_process_id, 0);
DCHECK_GT(render_view_id, 0);
base::AutoLock lock_scope(lock_);
render_process_id_ = render_process_id;
render_view_id_ = render_view_id;
if (!render_id_set_.empty()) {
RenderIdSet::const_iterator it =
render_id_set_.find(std::make_pair(render_process_id, render_view_id));
if (it != render_id_set_.end())
return;
}
render_id_set_.insert(std::make_pair(render_process_id, render_view_id));
}
void CefBrowserInfo::remove_render_id(
int render_process_id, int render_view_id) {
DCHECK_GT(render_process_id, 0);
DCHECK_GT(render_view_id, 0);
base::AutoLock lock_scope(lock_);
DCHECK(!render_id_set_.empty());
if (render_id_set_.empty())
return;
RenderIdSet::iterator it =
render_id_set_.find(std::make_pair(render_process_id, render_view_id));
DCHECK(it != render_id_set_.end());
if (it != render_id_set_.end())
render_id_set_.erase(it);
}
bool CefBrowserInfo::is_render_id_match(
int render_process_id, int render_view_id) {
base::AutoLock lock_scope(lock_);
if (render_process_id != render_process_id_)
if (render_id_set_.empty())
return false;
return (render_view_id == 0 || render_view_id == render_view_id_);
RenderIdSet::const_iterator it =
render_id_set_.find(std::make_pair(render_process_id, render_view_id));
return (it != render_id_set_.end());
}
CefRefPtr<CefBrowserHostImpl> CefBrowserInfo::browser() {