The Giants agreed to terms with former Seattle Mariners outfielder Mitch Haniger on a three-year, $43.5 million contract in free agency.