The Blue Jays silenced the Giants and quieted down what manager John Gibbons called the "Tulo haters."
Troy Tulowitzki homered and drove in three runs in Toronto's 4-0 victory over San Francisco on Tuesday night.
"He had a big night," Gibbons said. "He's on familiar ground right now. It was only a matter of time. He's been taking heat and he's working hard. You know what? He's a damn good player."
Tulowitzki, who grew up in nearby Sunnyvale, California and who has faced the Giants often while with the Colorado Rockies, was slightly more diplomatic.
"I'm not happy with where I'm at but I'm not going to say everything is fine now," he said. "I still have to come out every day and work hard and not take anything for granted."
J.A. Happ allowed five hits in 8 2/3 innings as the Blue Jays won for the sixth time in eight games.
Happ (5-0) was one out away from his first complete game since August 2010. He walked three and struck out five in beating the Giants for the first time in five starts. He also singled in the eighth.
Roberto Osuna came on to walk Matt Duffy, loading the bases, before getting Jarrett Parker on strikes for his eighth save.
Tulowitzki hit a solo shot against Matt Cain (0-5) with one out in the second and followed Michael Saunders' seventh-inning triple with a sacrifice fly.
Saunders, who had three hits, also scored on Tulowitzki's ninth-inning double. Russell Martin singled home a run in the ninth, ending a 0-for-17 streak.
A .333 hitter (22 for 66) against Cain, Tulowitzki delivered his 12th extra-base hit against the right-hander, and his sixth homer.
Thanks to a pair of double plays and a caught stealing, Happ faced two over the minimum through seven innings.
Kelby Tomlinson had two hits for the Giants, who lost their third straight and five of seven overall.
The Giants were shut out for the second time in three days and third overall. They have scored three runs over their past 40 innings — allowing 10.
"We got hurt by a lack of execution," Giants manager Bruce Bochy said. "The little things hurt us."
Cain, winless in his last 14 starts dating to last year, pitched his best game of the season. He gave up two runs on six hits over eight innings in his longest outing. He did not walk a batter and struck out seven.
"I felt like I limited my mistakes," Cain said. "This is something to build off of and carry into the next one."
Happ pitched around Tulowitzki's throwing error to get out of jam in the eighth. Parker singled and went to third on Tomlinson's grounder to Tulowitzki, who tried to get the force at second and threw it into right field.
Blue Jays: RHP Gavin Floyd was not available Tuesday after pitching back-to-back games for the first time this season.
Giants: RHP George Kontos will throw an inning at Triple-A Sacramento as part of his rehab assignment. ... RHP Sergio Romo increased his throwing program, extending it to 105 feet. He also threw 20 pitches in his last session off the mound. ... IF Brandon Crawford was given a scheduled day off. ... OF Angel Pagan had a good day of baseball activities and was scheduled to take batting practice.
Blue Jays: RHP Marcus Stroman (4-0, 3.60) gets the call for Wednesday afternoon's series finale. He's given up three runs over his last 15 innings (1.80 ERA) and has five quality starts on the year. This will be his first start against the Giants.
Giants: LHP Madison Bumgarner (4-2, 3.14) gets the start for the Giants in Wednesday's matinee. He's won each of his last three starts with a 2.25 ERA during that span. He'll make his first start against the Blue Jays.