| Index: webkit/plugins/ppapi/ppb_scrollbar_impl.cc
 | 
| ===================================================================
 | 
| --- webkit/plugins/ppapi/ppb_scrollbar_impl.cc	(revision 96213)
 | 
| +++ webkit/plugins/ppapi/ppb_scrollbar_impl.cc	(working copy)
 | 
| @@ -48,10 +48,14 @@
 | 
|    return ::ppapi::thunk::GetPPB_Scrollbar_Thunk()->IsScrollbar(resource);
 | 
|  }
 | 
|  
 | 
| -uint32_t GetThickness() {
 | 
| +uint32_t GetThickness3() {
 | 
|    return WebScrollbar::defaultThickness();
 | 
|  }
 | 
|  
 | 
| +uint32_t GetThickness4(PP_Resource resource) {
 | 
| +  return ::ppapi::thunk::GetPPB_Scrollbar_Thunk()->GetThickness(resource);
 | 
| +}
 | 
| +
 | 
|  uint32_t GetValue(PP_Resource resource) {
 | 
|    return ::ppapi::thunk::GetPPB_Scrollbar_Thunk()->GetValue(resource);
 | 
|  }
 | 
| @@ -82,7 +86,7 @@
 | 
|  const PPB_Scrollbar_0_3_Dev ppb_scrollbar_0_3 = {
 | 
|    &Create,
 | 
|    &IsScrollbar,
 | 
| -  &GetThickness,
 | 
| +  &GetThickness3,
 | 
|    &GetValue,
 | 
|    &SetValue,
 | 
|    &SetDocumentSize,
 | 
| @@ -90,18 +94,48 @@
 | 
|    &ScrollBy
 | 
|  };
 | 
|  
 | 
| +const PPB_Scrollbar_0_4_Dev ppb_scrollbar_0_4 = {
 | 
| +  &Create,
 | 
| +  &IsScrollbar,
 | 
| +  &GetThickness4,
 | 
| +  &GetValue,
 | 
| +  &SetValue,
 | 
| +  &SetDocumentSize,
 | 
| +  &SetTickMarks,
 | 
| +  &ScrollBy
 | 
| +};
 | 
| +
 | 
|  }  // namespace
 | 
|  
 | 
| -PPB_Scrollbar_Impl::PPB_Scrollbar_Impl(PluginInstance* instance, bool vertical)
 | 
| +// static
 | 
| +PP_Resource PPB_Scrollbar_Impl::Create(PluginInstance* instance,
 | 
| +                                       bool vertical) {
 | 
| +  scoped_refptr<PPB_Scrollbar_Impl> scrollbar(
 | 
| +      new PPB_Scrollbar_Impl(instance));
 | 
| +  scrollbar->Init(vertical);
 | 
| +  return scrollbar->GetReference();
 | 
| +}
 | 
| +
 | 
| +PPB_Scrollbar_Impl::PPB_Scrollbar_Impl(PluginInstance* instance)
 | 
|      : PPB_Widget_Impl(instance) {
 | 
| +}
 | 
| +
 | 
| +PPB_Scrollbar_Impl::~PPB_Scrollbar_Impl() {
 | 
| +}
 | 
| +
 | 
| +void PPB_Scrollbar_Impl::Init(bool vertical) {
 | 
| +#if defined(WEBSCROLLBAR_SUPPORTS_OVERLAY)
 | 
| +  scrollbar_.reset(WebScrollbar::createForPlugin(
 | 
| +      vertical ? WebScrollbar::Vertical : WebScrollbar::Horizontal,
 | 
| +      instance()->container(),
 | 
| +      static_cast<WebKit::WebScrollbarClient*>(this)));
 | 
| +#else
 | 
|    scrollbar_.reset(WebScrollbar::create(
 | 
|        static_cast<WebKit::WebScrollbarClient*>(this),
 | 
|        vertical ? WebScrollbar::Vertical : WebScrollbar::Horizontal));
 | 
| +#endif
 | 
|  }
 | 
|  
 | 
| -PPB_Scrollbar_Impl::~PPB_Scrollbar_Impl() {
 | 
| -}
 | 
| -
 | 
|  PPB_Scrollbar_API* PPB_Scrollbar_Impl::AsPPB_Scrollbar_API() {
 | 
|    return this;
 | 
|  }
 | 
| @@ -111,10 +145,24 @@
 | 
|    return &ppb_scrollbar_0_3;
 | 
|  }
 | 
|  
 | 
| +// static
 | 
| +const PPB_Scrollbar_0_4_Dev* PPB_Scrollbar_Impl::Get0_4Interface() {
 | 
| +  return &ppb_scrollbar_0_4;
 | 
| +}
 | 
| +
 | 
|  uint32_t PPB_Scrollbar_Impl::GetThickness() {
 | 
|    return WebScrollbar::defaultThickness();
 | 
|  }
 | 
|  
 | 
| +bool PPB_Scrollbar_Impl::IsOverlay() {
 | 
| +// TODO(jam): take this out once WebKit is rolled.
 | 
| +#if defined(WEBSCROLLBAR_SUPPORTS_OVERLAY)
 | 
| +  return scrollbar_->isOverlay();
 | 
| +#else
 | 
| +  return false;
 | 
| +#endif
 | 
| +}
 | 
| +
 | 
|  uint32_t PPB_Scrollbar_Impl::GetValue() {
 | 
|    return scrollbar_->value();
 | 
|  }
 | 
| @@ -197,13 +245,32 @@
 | 
|    const PPP_Scrollbar_Dev* ppp_scrollbar =
 | 
|        static_cast<const PPP_Scrollbar_Dev*>(instance()->module()->
 | 
|            GetPluginInterface(PPP_SCROLLBAR_DEV_INTERFACE));
 | 
| -  if (!ppp_scrollbar)
 | 
| -    return;
 | 
| +  if (!ppp_scrollbar) {
 | 
| +    // Try the old version. This is ok because the old interface is a subset of
 | 
| +    // the new one, and ValueChanged didn't change.
 | 
| +    ppp_scrollbar =
 | 
| +      static_cast<const PPP_Scrollbar_Dev*>(instance()->module()->
 | 
| +          GetPluginInterface(PPP_SCROLLBAR_DEV_INTERFACE_0_2));
 | 
| +    if (!ppp_scrollbar)
 | 
| +      return;
 | 
| +  }
 | 
|    ScopedResourceId resource(this);
 | 
|    ppp_scrollbar->ValueChanged(
 | 
|        instance()->pp_instance(), resource.id, scrollbar_->value());
 | 
|  }
 | 
|  
 | 
| +void PPB_Scrollbar_Impl::overlayChanged(WebScrollbar* scrollbar) {
 | 
| +  const PPP_Scrollbar_Dev* ppp_scrollbar =
 | 
| +      static_cast<const PPP_Scrollbar_Dev*>(instance()->module()->
 | 
| +          GetPluginInterface(PPP_SCROLLBAR_DEV_INTERFACE));
 | 
| +  if (!ppp_scrollbar)
 | 
| +    return;
 | 
| +  ScopedResourceId resource(this);
 | 
| +  ppp_scrollbar->OverlayChanged(
 | 
| +      instance()->pp_instance(), resource.id,
 | 
| +      PP_FromBool(IsOverlay()));
 | 
| +}
 | 
| +
 | 
|  void PPB_Scrollbar_Impl::invalidateScrollbarRect(
 | 
|      WebKit::WebScrollbar* scrollbar,
 | 
|      const WebKit::WebRect& rect) {
 | 
| 
 |