Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(204)

Side by Side Diff: ceee/ie/plugin/bho/browser_helper_object.cc

Issue 5647001: Use the RPC channel to set the ID <-> handle mapping.... (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src/
Patch Set: '' Created 10 years ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
1 // Copyright (c) 2010 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2010 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 // IE browser helper object implementation. 5 // IE browser helper object implementation.
6 #include "ceee/ie/plugin/bho/browser_helper_object.h" 6 #include "ceee/ie/plugin/bho/browser_helper_object.h"
7 7
8 #include <atlsafe.h> 8 #include <atlsafe.h>
9 #include <shlguid.h> 9 #include <shlguid.h>
10 10
11 #include <algorithm> 11 #include <algorithm>
12 12
13 #include "base/debug/trace_event.h" 13 #include "base/debug/trace_event.h"
14 #include "base/json/json_reader.h" 14 #include "base/json/json_reader.h"
15 #include "base/json/json_writer.h"
15 #include "base/logging.h" 16 #include "base/logging.h"
16 #include "base/string_util.h" 17 #include "base/string_util.h"
17 #include "base/tuple.h" 18 #include "base/tuple.h"
18 #include "base/utf_string_conversions.h" 19 #include "base/utf_string_conversions.h"
19 #include "ceee/common/com_utils.h" 20 #include "ceee/common/com_utils.h"
20 #include "ceee/common/window_utils.h" 21 #include "ceee/common/window_utils.h"
21 #include "ceee/common/windows_constants.h" 22 #include "ceee/common/windows_constants.h"
22 #include "ceee/ie/broker/tab_api_module.h" 23 #include "ceee/ie/broker/tab_api_module.h"
24 #include "ceee/ie/common/constants.h"
23 #include "ceee/ie/common/extension_manifest.h" 25 #include "ceee/ie/common/extension_manifest.h"
24 #include "ceee/ie/common/ie_util.h" 26 #include "ceee/ie/common/ie_util.h"
25 #include "ceee/ie/common/metrics_util.h" 27 #include "ceee/ie/common/metrics_util.h"
26 #include "ceee/ie/common/ceee_module_util.h" 28 #include "ceee/ie/common/ceee_module_util.h"
27 #include "ceee/ie/plugin/bho/cookie_accountant.h" 29 #include "ceee/ie/plugin/bho/cookie_accountant.h"
28 #include "ceee/ie/plugin/bho/http_negotiate.h" 30 #include "ceee/ie/plugin/bho/http_negotiate.h"
29 #include "ceee/ie/plugin/scripting/script_host.h" 31 #include "ceee/ie/plugin/scripting/script_host.h"
30 #include "ceee/ie/plugin/toolband/toolband_proxy.h" 32 #include "ceee/ie/plugin/toolband/toolband_proxy.h"
31 #include "chrome/browser/automation/extension_automation_constants.h" 33 #include "chrome/browser/automation/extension_automation_constants.h"
32 #include "chrome/browser/extensions/extension_tabs_module_constants.h" 34 #include "chrome/browser/extensions/extension_tabs_module_constants.h"
(...skipping 277 matching lines...) Expand 10 before | Expand all | Expand 10 after
310 } 312 }
311 313
312 HRESULT BrowserHelperObject::UnregisterExecutor(DWORD thread_id) { 314 HRESULT BrowserHelperObject::UnregisterExecutor(DWORD thread_id) {
313 base::win::ScopedComPtr<ICeeeBrokerRegistrar> registrar; 315 base::win::ScopedComPtr<ICeeeBrokerRegistrar> registrar;
314 HRESULT hr = GetBrokerRegistrar(registrar.Receive()); 316 HRESULT hr = GetBrokerRegistrar(registrar.Receive());
315 if (FAILED(hr)) 317 if (FAILED(hr))
316 return hr; 318 return hr;
317 return registrar->UnregisterExecutor(thread_id); 319 return registrar->UnregisterExecutor(thread_id);
318 } 320 }
319 321
320 HRESULT BrowserHelperObject::SetTabToolBandIdForHandle(int tool_band_id,
321 long tab_handle) {
322 base::win::ScopedComPtr<ICeeeBrokerRegistrar> registrar;
323 HRESULT hr = GetBrokerRegistrar(registrar.Receive());
324 if (FAILED(hr))
325 return hr;
326 return registrar->SetTabToolBandIdForHandle(tool_band_id, tab_handle);
327 }
328
329 HRESULT BrowserHelperObject::SetTabIdForHandle(int tool_band_id,
330 long tab_handle) {
331 base::win::ScopedComPtr<ICeeeBrokerRegistrar> registrar;
332 HRESULT hr = GetBrokerRegistrar(registrar.Receive());
333 if (FAILED(hr))
334 return hr;
335 return registrar->SetTabIdForHandle(tool_band_id, tab_handle);
336 }
337
338 HRESULT BrowserHelperObject::Initialize(IUnknown* site) { 322 HRESULT BrowserHelperObject::Initialize(IUnknown* site) {
339 TRACE_EVENT_INSTANT("ceee.bho.initialize", this, ""); 323 TRACE_EVENT_INSTANT("ceee.bho.initialize", this, "");
340 mu::ScopedTimer metrics_timer("ceee/BHO.Initialize", &broker_rpc()); 324 mu::ScopedTimer metrics_timer("ceee/BHO.Initialize", &broker_rpc());
341 325
342 HRESULT hr = ConnectRpcBrokerClient(); 326 HRESULT hr = ConnectRpcBrokerClient();
343 if (FAILED(hr) || !broker_rpc().is_connected()) { 327 if (FAILED(hr) || !broker_rpc().is_connected()) {
344 // Cancel the logging. The BrokerRpcClient isn't ready. 328 // Cancel the logging. The BrokerRpcClient isn't ready.
345 metrics_timer.Drop(); 329 metrics_timer.Drop();
346 NOTREACHED() << "Couldn't connect to the RPC server."; 330 NOTREACHED() << "Couldn't connect to the RPC server.";
347 return com::AlwaysError(hr); 331 return com::AlwaysError(hr);
(...skipping 281 matching lines...) Expand 10 before | Expand all | Expand 10 after
629 return false; 613 return false;
630 } 614 }
631 615
632 // At this point if tab_id_ is still invalid we have a problem. 616 // At this point if tab_id_ is still invalid we have a problem.
633 if (tab_id_ == kInvalidChromeSessionId) { 617 if (tab_id_ == kInvalidChromeSessionId) {
634 // Something really bad happened. 618 // Something really bad happened.
635 NOTREACHED(); 619 NOTREACHED();
636 return false; 620 return false;
637 } 621 }
638 622
639 CeeeWindowHandle handle = reinterpret_cast<CeeeWindowHandle>(tab_window_); 623 hr = FireMapTabIdToHandle();
640 hr = SetTabIdForHandle(tab_id_, handle);
641 if (FAILED(hr)) { 624 if (FAILED(hr)) {
642 DCHECK(SUCCEEDED(hr)) << "An error occured when setting the tab_id: " << 625 DCHECK(SUCCEEDED(hr)) << "An error occured when setting the tab_id: " <<
643 com::LogHr(hr); 626 com::LogHr(hr);
644 tab_id_ = kInvalidChromeSessionId; 627 tab_id_ = kInvalidChromeSessionId;
645 return false; 628 return false;
646 } 629 }
647 VLOG(2) << "TabId(" << tab_id_ << ") set for Handle(" << handle << ")"; 630 VLOG(2) << "TabId(" << tab_id_ << ") set for Handle(" << tab_window_ << ")";
648 631
649 // Call back all the events we deferred. In order, please. 632 // Call back all the events we deferred. In order, please.
650 while (!deferred_events_call_.empty()) { 633 while (!deferred_events_call_.empty()) {
651 // We pop here so that if an error happens in the call we don't recall the 634 // We pop here so that if an error happens in the call we don't recall the
652 // faulty method. This has the side-effect of losing events. 635 // faulty method. This has the side-effect of losing events.
653 DeferredCallListType::value_type call = deferred_events_call_.front(); 636 DeferredCallListType::value_type call = deferred_events_call_.front();
654 deferred_events_call_.pop_front(); 637 deferred_events_call_.pop_front();
655 call->Run(); 638 call->Run();
656 delete call; 639 delete call;
657 } 640 }
(...skipping 48 matching lines...) Expand 10 before | Expand all | Expand 10 after
706 return hr; 689 return hr;
707 } 690 }
708 return hr; 691 return hr;
709 } 692 }
710 693
711 HRESULT BrowserHelperObject::CreateChromeFrameHost() { 694 HRESULT BrowserHelperObject::CreateChromeFrameHost() {
712 return ChromeFrameHost::CreateInitializedIID(chrome_frame_host_.iid(), 695 return ChromeFrameHost::CreateInitializedIID(chrome_frame_host_.iid(),
713 chrome_frame_host_.Receive()); 696 chrome_frame_host_.Receive());
714 } 697 }
715 698
699 HRESULT BrowserHelperObject::SendIdMappingToBroker(const char* event_name,
700 int id) {
701 // Event arguments for FireEvent need to be stored in a list.
702 VLOG(1) << "SendIdMappingToBroker(" << event_name << ", " << id << ")";
703 DCHECK(id != kInvalidChromeSessionId);
704 DCHECK(tab_window_ != NULL);
705
706 ListValue mapping_args;
707 mapping_args.Append(Value::CreateIntegerValue(id));
708 mapping_args.Append(Value::CreateIntegerValue(
709 reinterpret_cast<int>(tab_window_)));
710
711 std::string event_args_str;
712 base::JSONWriter::Write(&mapping_args, false, &event_args_str);
713 // We go directly to Impl version since we know we have Ensured Id...
714 return SendEventToBrokerImpl(event_name, event_args_str);
715 }
716
717 HRESULT BrowserHelperObject::FireMapTabIdToHandle() {
718 return SendIdMappingToBroker(ceee_event_names::kCeeeMapTabIdToHandle,
719 tab_id_);
720 }
721
722 HRESULT BrowserHelperObject::FireMapToolbandIdToHandle(int toolband_id) {
723 return SendIdMappingToBroker(ceee_event_names::kCeeeMapToolbandIdToHandle,
724 toolband_id);
725 }
726
716 void BrowserHelperObject::FireOnCreatedEvent(BSTR url) { 727 void BrowserHelperObject::FireOnCreatedEvent(BSTR url) {
717 DCHECK(url != NULL); 728 DCHECK(url != NULL);
718 DCHECK(tab_window_ != NULL); 729 DCHECK(tab_window_ != NULL);
719 DCHECK(!fired_on_created_event_); 730 DCHECK(!fired_on_created_event_);
720 // Avoid sending double-creation events. Also only fire the event if we're 731 // Avoid sending double-creation events. Also only fire the event if we're
721 // NOT in full-tab mode, because by design, extensions are not supposed to be 732 // NOT in full-tab mode, because by design, extensions are not supposed to be
722 // aware of full-tab Chrome Frame tabs. 733 // aware of full-tab Chrome Frame tabs.
723 if (fired_on_created_event_ || full_tab_chrome_frame_) 734 if (fired_on_created_event_ || full_tab_chrome_frame_)
724 return; 735 return;
725 736
(...skipping 832 matching lines...) Expand 10 before | Expand all | Expand 10 after
1558 if (sink == NULL) 1569 if (sink == NULL)
1559 return; 1570 return;
1560 1571
1561 std::vector<Sink*>::iterator iter = std::find(sinks_.begin(), sinks_.end(), 1572 std::vector<Sink*>::iterator iter = std::find(sinks_.begin(), sinks_.end(),
1562 sink); 1573 sink);
1563 if (iter != sinks_.end()) 1574 if (iter != sinks_.end())
1564 sinks_.erase(iter); 1575 sinks_.erase(iter);
1565 } 1576 }
1566 1577
1567 STDMETHODIMP BrowserHelperObject::SetToolBandSessionId(long session_id) { 1578 STDMETHODIMP BrowserHelperObject::SetToolBandSessionId(long session_id) {
1568 CeeeWindowHandle handle = reinterpret_cast<CeeeWindowHandle>(tab_window_); 1579 HRESULT hr = FireMapToolbandIdToHandle(session_id);
1569 HRESULT hr = SetTabToolBandIdForHandle(session_id, handle);
1570 if (FAILED(hr)) { 1580 if (FAILED(hr)) {
1571 DCHECK(SUCCEEDED(hr)) << "An error occured when setting the toolband " << 1581 DCHECK(SUCCEEDED(hr)) << "An error occured when setting the toolband " <<
1572 "tab ID: " << com::LogHr(hr); 1582 "tab ID: " << com::LogHr(hr);
1573 return hr; 1583 return hr;
1574 } 1584 }
1575 VLOG(2) << "ToolBandTabId(" << session_id << ") set for Handle(" << handle << 1585 VLOG(2) << "ToolBandTabId(" << session_id << ") set for Handle(" <<
1576 ")"; 1586 tab_window_ << ")";
1577 return hr; 1587 return hr;
1578 } 1588 }
1579 1589
1580 HRESULT BrowserHelperObject::SendEventToBroker(const char* event_name, 1590 HRESULT BrowserHelperObject::SendEventToBroker(const char* event_name,
1581 const char* event_args) { 1591 const char* event_args) {
1582 if (EnsureTabId() == false) { 1592 if (EnsureTabId() == false) {
1583 deferred_events_call_.push_back(NewRunnableMethod( 1593 deferred_events_call_.push_back(NewRunnableMethod(
1584 this, &BrowserHelperObject::SendEventToBrokerImpl, 1594 this, &BrowserHelperObject::SendEventToBrokerImpl,
1585 std::string(event_name), std::string(event_args))); 1595 std::string(event_name), std::string(event_args)));
1586 VLOG(2) << "Deferred SendEventToBroker. Name: \"" << event_name << 1596 VLOG(2) << "Deferred SendEventToBroker. Name: \"" << event_name <<
1587 "\", args: \"" << event_args << "\"."; 1597 "\", args: \"" << event_args << "\".";
1588 return S_FALSE; 1598 return S_FALSE;
1589 } else { 1599 } else {
1590 return SendEventToBrokerImpl(event_name, event_args); 1600 return SendEventToBrokerImpl(event_name, event_args);
1591 } 1601 }
1592 } 1602 }
1593 1603
1594 HRESULT BrowserHelperObject::SendEventToBrokerImpl( 1604 HRESULT BrowserHelperObject::SendEventToBrokerImpl(
1595 const std::string& event_name, const std::string& event_args) { 1605 const std::string& event_name, const std::string& event_args) {
1596 return broker_rpc().FireEvent(event_name.c_str(), event_args.c_str()); 1606 return broker_rpc().FireEvent(event_name.c_str(), event_args.c_str());
1597 } 1607 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698